Skip to main content

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

依赖项

必需的:

  • 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

我如何贡献代码?

您需要先签署并返回 ICLACCLA ,我们才能接受和重新分配您的贡献。提交这些内容后,您就可以开始为 impyla 做出贡献了。将这些提交至CLA@cloudera.com

寻找

我们使用 Github 问题来跟踪该项目的错误。找到您想要处理的问题(如果您发现了新问题,请提交一个!)。如果没有人在处理它,只有当你打算很快处理它时才将它分配给自己。

讨论您在该问题上的预期方法是个好主意。如果您在开始之前已经从 impyla 社区获得了支持,那么您更有可能对您的补丁进行审查并提交。

使固定

现在开始编码!在编写补丁时,请牢记以下几点:

首先,请在您的补丁中包含测试。如果您的补丁添加了功能或修复了错误并且不包括测试,则通常不会被接受。如果您不确定如何为特定组件编写测试,请就该问题寻求指导。

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

最后,请写一个好的、清晰的提交消息,带有简短的描述性标题和足够长的消息,以解释问题是什么,以及如何解决问题。

请使用您的补丁在 github 上创建一个拉取请求。

项目详情