Impala 分布式查询引擎的 Python 客户端
项目描述
因皮拉
用于分布式查询引擎的 HiveServer2 实现(例如,Impala、Hive)的 Python 客户端。
有关更高级别的 Impala 功能,包括分布式数据集上的类似 Pandas 的界面,请参阅Ibis 项目。
特征
-
符合 HiveServer2 标准;与 Impala 和 Hive 一起使用,包括嵌套数据
-
完全符合DB API 2.0 (PEP 249)的 Python 客户端(类似于 sqlite 或 MySQL 客户端),支持 Python 2.6+ 和 Python 3.3+。
-
与 Kerberos、LDAP、SSL 一起使用
-
SQLAlchemy连接器
-
转换为pandas
DataFrame
,可以轻松集成到 Python 数据堆栈(包括scikit-learn和 matplotlib);但请参阅宜必思项目以获得更丰富的体验
依赖项
必需的:
-
Python 2.7+ 或 3.5+
-
six
,bitarray
-
thrift==0.11.0
-
thrift_sasl==0.4.3
可选的:
-
kerberos>=1.3.0
通过 HTTP 支持 Kerberos。这也需要在您的系统上安装 Kerberos 库 - 请参阅System Kerberos -
pandas
用于转换为DataFrame
对象;但请参阅Ibis项目 -
sqlalchemy
用于 SQLAlchemy 引擎 -
pytest
用于运行测试;unittest2
用于在 Python 2.6 上进行测试
系统 Kerberos
不同的系统需要安装不同的软件包才能在 Impyla 中启用 Kerberos 支持。下面是一些如何在不同发行版上安装软件包的示例。
Ubuntu:
apt-get install libkrb5-dev krb5-user
RHEL/CentOS:
yum install krb5-libs krb5-devel krb5-server krb5-workstation
安装
安装最新版本pip
:
pip install impyla
对于最新(开发)版本,直接从 repo 安装:
pip install git+https://github.com/cloudera/impyla.git
或克隆回购:
git clone https://github.com/cloudera/impyla.git
cd impyla
python setup.py install
运行测试
impyla 使用pytest工具链,并且依赖于以下环境变量:
export IMPYLA_TEST_HOST=your.impalad.com
export IMPYLA_TEST_PORT=21050
export IMPYLA_TEST_AUTH_MECH=NOSASL
要运行最大的测试集,请运行
cd path/to/impyla
py.test --connect impala
--connect
忽略跳过数据库 API 合规性测试的选项。
用法
Impyla 实现了Python DB API v2.0 (PEP 249)数据库接口(有关 API 详细信息,请参阅它):
from impala.dbapi import connect
conn = connect(host='my.host.com', port=21050)
cursor = conn.cursor()
cursor.execute('SELECT * FROM mytable LIMIT 100')
print cursor.description # prints the result set's schema
results = cursor.fetchall()
该Cursor
对象还公开了迭代器接口,该接口被缓冲(由 控制cursor.arraysize
):
cursor.execute('SELECT * FROM mytable LIMIT 100')
for row in cursor:
print(row)
此外,该Cursor
对象会返回有关查询中返回的列的信息。这对于将数据导出为 csv 文件很有用。
import csv
cursor.execute('SELECT * FROM mytable LIMIT 100')
columns = [datum[0] for datum in cursor.description]
targetfile = '/tmp/foo.csv'
with open(targetfile, 'w', newline='') as outcsv:
writer = csv.writer(outcsv, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL, lineterminator='\n')
writer.writerow(columns)
for row in cursor:
writer.writerow(row)
您还可以取回一个 pandas DataFrame 对象
from impala.util import as_pandas
df = as_pandas(cur)
# carry df through scikit-learn, for example
我如何贡献代码?
您需要先签署并返回 ICLA 和 CCLA ,我们才能接受和重新分配您的贡献。提交这些内容后,您就可以开始为 impyla 做出贡献了。将这些提交至CLA@cloudera.com。
寻找
我们使用 Github 问题来跟踪该项目的错误。找到您想要处理的问题(如果您发现了新问题,请提交一个!)。如果没有人在处理它,只有当你打算很快处理它时才将它分配给自己。
讨论您在该问题上的预期方法是个好主意。如果您在开始之前已经从 impyla 社区获得了支持,那么您更有可能对您的补丁进行审查并提交。
使固定
现在开始编码!在编写补丁时,请牢记以下几点:
首先,请在您的补丁中包含测试。如果您的补丁添加了功能或修复了错误并且不包括测试,则通常不会被接受。如果您不确定如何为特定组件编写测试,请就该问题寻求指导。
其次,请让您的补丁只针对问题所描述的问题。如果我们对每个补丁的范围保持纪律,这对每个人都会更好。通常,如果您在处理特定功能时发现错误,请为该错误提交问题,检查您是否可以将其分配给自己并独立于该功能进行修复。这有助于我们区分错误修复和功能,并允许我们构建稳定的维护版本。
最后,请写一个好的、清晰的提交消息,带有简短的描述性标题和足够长的消息,以解释问题是什么,以及如何解决问题。
请使用您的补丁在 github 上创建一个拉取请求。