通过SQLAlchemy连接Impala

3

我对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函数。我在impyla源代码中找到了一个测试文件test_sqlalchemy.py,它说明了如何创建一个具有impala驱动程序的sqlalchemy引擎:

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

我想做这件事,但是我无法做到,因为上面连接函数有更多的参数; 我不知道如何将它们传递给SQLAlchemy的create_engine以建立成功连接。有人做过吗?谢谢。


1
您可以使用connect_args来指定传递给connect()的额外参数。 - univerio
3个回答

4

正如在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)

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())

谢谢您,很难找到有关数据库连接的Kerberos信息。您是否知道可用于connect_args的参数列表? - Sanchez333

0
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),

}

2
这个答案并没有回答问题;例如,它没有展示如何包含SSL参数。 - Sam Hartman

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