【问题标题】:Clickhouse does not return column headersClickhouse 不返回列标题
【发布时间】:2019-11-04 11:50:16
【问题描述】:

我正在尝试从 clickhouse 获取一些关系数据并在 pandas 中使用。它有效,但 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 返回的第一行的值。我希望看到列名。

【问题讨论】:

标签: pandas sqlalchemy clickhouse


【解决方案1】:

请查看这个 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)

【讨论】:

    【解决方案2】:

    您可以使用 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() 输出中看到标签。

    【讨论】:

      【解决方案3】:

      看这个问题:Right way to implement pandas.read_sql with ClickHouse


      我无法在最新版本的模块上重现此行为:

      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 视图看起来也不错:

      【讨论】:

        猜你喜欢
        • 2019-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多