2

我是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 函数。我在 imyla 源代码中找到了一个测试文件,该文件说明了如何使用 impala 驱动程序创建 sqlalchemy 引擎,例如:

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

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

4

3 回答 3

2

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)
于 2016-11-07T11:47:59.080 回答
0

如果您的 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())
于 2021-12-22T18:58:13.400 回答
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),

}
于 2017-09-25T02:21:47.417 回答