我正试图从Clickhouse那里获取一些关系数据,并在大熊猫中玩耍。它可以工作,但是pd.read_sql_query返回数据帧,其中列名是第一行的值。相反,我希望看到在关系表中命名的列名。
我对Postgress进行了同样的尝试,并且工作正常。
cheng = create_engine('clickhouse://mylogin:mypassG@domain.my:PORT/schema')
qry2 = '''select * from myschema.mytable order by a_date desc limit 10'''
dt = pd.read_sql_query(qry, cheng)
dt
返回的数据框列的标题包含从DB返回的第一行的值。我希望看到的是列名。
答案 0 :(得分:0)
请签出以下python软件包:https://pypi.org/project/pandahouse/
connection = {'host': 'http://clickhouse-host:8123',
'database': 'test'
affected_rows = to_clickhouse(df, table='name', connection=connection)
df = read_clickhouse('SELECT * FROM {db}.table', index_col='id',
connection=connection)
答案 1 :(得分:0)
您可以使用clickhouse-driver在pandas数据框中获取列标签。示例如下所示。
from clickhouse_driver import Client
import pandas
client = Client('localhost')
result, columns = client.execute('SELECT * FROM iris',
{'species': "Iris-setosa"},
with_column_types=True)
df = pandas.DataFrame(result, columns=[tuple[0] for tuple in columns])
df.tail()
您将在df.tail()输出中看到标签。
答案 2 :(得分:0)
我无法在最新版本的模块上重现此行为:
sqlalchemy==1.3.16
sqlalchemy-clickhouse==0.1.5.post0
pandas==1.0.3
此代码:
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('clickhouse://default:@localhost/test')
query = 'select * from call_center'
dt = pd.read_sql_query(query, engine)
print(dt)
返回:
cc_call_center_sk cc_call_center_id ... cc_gmt_offset cc_tax_percentage
0 1 AAAAAAAABAAAAAAA ... -5.0 0.11
1 2 AAAAAAAACAAAAAAA ... -5.0 0.12
2 3 AAAAAAAACAAAAAAA ... -5.0 0.01
3 4 AAAAAAAAEAAAAAAA ... -5.0 0.05
4 5 AAAAAAAAEAAAAAAA ... -5.0 0.12
5 6 AAAAAAAAEAAAAAAA ... -5.0 0.11
[6 rows x 31 columns]
PyCharm DataFrame视图也看起来不错:
答案 3 :(得分:0)
由于软件包 clickhouse-sqlalchemy ,我和您有同样的问题。
我修改配置,添加选项本地
clickhouse+native://username:password@host:port/database
它可以解决问题。