ClickHouse未返回列标题

3
我正在尝试从ClickHouse获取一些关系数据,并在pandas中进行操作。它可以工作,但pd.read_sql_query返回的数据框中,列名是第一行的值。相反,我希望看到列名与关系表中的名称相同。
我尝试了使用PostgreSQL,它可以正常工作。
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

enter image description here

返回的数据框的列头包含来自数据库的第一行的值。我希望看到列名而不是这些值。

https://stackoverflow.com/questions/65627583/right-way-to-implement-pandas-read-sql-with-clickhouse - vladimir
对于在JetBrains DataGrip中遇到此错误的人:https://qna.habr.com/q/661296 - faghani
4个回答

1

看这个问题:正确的方式使用ClickHouse实现pandas.read_sql


我无法在最新版本的模块上重现此行为:
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视图也很好:

enter image description here


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)

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() 输出中看到标签。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接