使用 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)
作为结果,我希望得到一个包含 date 和 region 列的数据框,但我得到的只是空数据框:
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
正在尝试实现 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)
作为结果,我希望得到一个包含 date 和 region 列的数据框,但我得到的只是空数据框:
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