使用 ClickHouse 实现 pandas.read_sql 的正确方法

Right way to implement pandas.read_sql with ClickHouse

正在尝试实现 pandas.read_sql 功能。

我创建了一个 clickhouse table 并填充了它:

create table regions
(
    date DateTime Default now(),
    region String
)
    engine = MergeTree()
        PARTITION BY toYYYYMM(date)
        ORDER BY tuple()
        SETTINGS index_granularity = 8192;

insert into regions (region) values ('Asia'), ('Europe')

然后python代码:

import pandas as pd 
from sqlalchemy import create_engine


uri = 'clickhouse://default:@localhost/default'
engine = create_engine(uri)
query = 'select * from regions'
pd.read_sql(query, engine)

作为结果,我希望得到一个包含 dateregion 列的数据框,但我得到的只是空数据框:

Empty DataFrame
Columns: [2021-01-08 09:24:33, Asia]
Index: []

更新。碰巧定义clickhouse+native解决问题

不用+native能解决吗?

存在旧问题 https://github.com/xzkostyan/clickhouse-sqlalchemy/issues/10。还有一个提示假设在查询末尾添加 FORMAT TabSeparatedWithNamesAndTypes 。因此初始查询将如下所示:

select * 
from regions 
FORMAT TabSeparatedWithNamesAndTypes