跳转到主要内容

Impala分布式查询引擎的Python客户端

项目描述

impyla

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-learnmatplotlib);但请参阅Ibis项目以获得更丰富的体验

依赖关系

必需

  • Python 2.7+或3.5+

  • six, bitarray

  • thrift==0.16.0

  • thrift_sasl==0.4.3

可选

  • kerberos>=1.3.0 以支持通过HTTP的Kerberos。这还要求在您的系统上安装Kerberos库 - 请参阅系统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

对于最新(开发)版本,直接从仓库安装

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 选项以跳过 DB 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

如何贡献代码?

在我们接受和重新分发您的贡献之前,您需要首先签署并返回一个 ICLACCLA。一旦提交这些文件,您就可以开始为 impyla 贡献了。请将这些提交到 CLA@cloudera.com

查找

我们使用 Github issues 来跟踪这个项目的错误。找到一个您想工作的错误(或者如果您发现了一个新的错误,就提交一个!)如果没有人正在处理它,只有当您打算很快开始处理它时,才将其分配给自己。

在错误上讨论您打算采用的方法是个好主意。在您开始之前,如果已经得到了 impyla 社区的支持,那么您修补程序被审查和提交的可能性会更大。

修复

现在开始编码!当您编写补丁时,请记住以下几点

首先,请将测试与您的补丁一起包括在内。如果您的补丁添加了一个功能或修复了一个错误,但没有包括测试,通常不会接受。如果您不确定如何为特定组件编写测试,请在该问题上寻求指导。

其次,请将您的补丁严格针对问题中描述的问题。如果我们对每个补丁的范围保持纪律,那么对每个人来说都更好。一般来说,如果您在开发特定功能时发现了错误,请为该错误提交一个问题,检查您是否可以将其分配给自己,并独立于功能进行修复。这有助于我们区分错误修复和功能,并允许我们构建稳定的维护版本。

最后,请编写一个良好、清晰的提交信息,包括一个简短、描述性的标题和一个恰好足够长的信息,以说明问题是什么,以及如何修复它。

请使用您的补丁在 github 上创建一个 pull request。

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

impyla-0.19.0.tar.gz (258.9 kB 查看哈希值)

上传时间

构建分布

impyla-0.19.0-py2.py3-none-any.whl (278.0 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面