【问题标题】:impala connection via sqlalchemy通过 sqlalchemy 的 impala 连接
【发布时间】:2017-01-27 17:08:22
【问题描述】:

我是 hadoop 和 impala 的新手。我通过安装impyla 并执行以下代码设法连接到 impala。这是通过 LDAP 进行的连接:

from impala.dbapi import connect
from impala.util import as_pandas
conn = connect(host="server.lrd.com",port=21050, database='tcad',auth_mechanism='PLAIN', user="alexcj", use_ssl=True,timeout=20, password="secret1pass")

然后我可以抓取一个光标并执行以下查询:

cursor = conn.cursor()
cursor.execute('SELECT * FROM tab_2014_m LIMIT 10')
df = as_pandas(cursor)

我希望能够使用 sqlalchemy 连接到 impala 并能够使用一些不错的 sqlalchemy 函数。我发现 a test file in imyla source code 说明了如何使用 impala 驱动程序创建 sqlalchemy 引擎,例如:

engine = create_engine('impala://localhost')

我希望能够做到这一点,但我做不到,因为我对上面的连接函数的调用有很多参数;而且我不知道如何将这些传递给 sqlalchemy 的 create_engine 以获得成功的连接。有人做过吗?谢谢。

【问题讨论】:

  • 您可以使用connect_argsconnect() 指定额外的参数。

标签: python python-3.x sqlalchemy flask-sqlalchemy impyla


【解决方案1】:

正如https://github.com/cloudera/impyla/issues/214所解释的那样

import sqlalchemy
def conn():
    return connect(host='some_host', 
                         port=21050,
                         database='default',
                         timeout=20,
                         use_ssl=True,
                         ca_cert='some_pem',
                         user=user, password=pwd,
                         auth_mechanism='PLAIN')

engine = sqlalchemy.create_engine('impala://', creator=conn)

【讨论】:

    【解决方案2】:
    import time
    
    from sqlalchemy import create_engine, MetaData, Table, select, and_
    
    
    ENGINE = create_engine(
        'impala://{host}:{port}/{database}'.format(
            host=host,    # your host
            port=port,
            database=database,
        )
    )
    METADATA = MetaData(ENGINE)
    TABLES = {
        'table': Table('table_name', METADATA, autoload=True),
    
    }
    

    【讨论】:

    • 这个答案没有回答问题;例如,它没有显示如何包含 ssl 参数
    【解决方案3】:

    如果您的 Impala 受 Kerberos 保护,则以下脚本有效(由于某种原因,我需要使用 hive:// 而不是 impala://)

    import sqlalchemy
    from sqlalchemy.engine import create_engine
    
    connect_args={'auth': 'KERBEROS', 'kerberos_service_name': 'impala'}
    engine = create_engine('hive://impalad-host:21050', connect_args=connect_args)
    
    conn = engine.connect()
    ResultProxy  = conn.execute("SELECT * FROM db1.table1 LIMIT 5")
    
    print(ResultProxy.fetchall())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 2020-03-10
      • 2023-01-19
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多