Skip to main content

impyla

Python client for HiveServer2 implementations (e.g., Impala, Hive) for distributed query engines.

For higher-level Impala functionality, including a Pandas-like interface over distributed data sets, see the Ibis project.

Features

  • HiveServer2 compliant; works with Impala and Hive, including nested data

  • Fully DB API 2.0 (PEP 249)-compliant Python client (similar to sqlite or MySQL clients) supporting Python 3.8+.

  • Works with Kerberos, LDAP, SSL, JWT

  • SQLAlchemy connector

  • Converter to pandas DataFrame, allowing easy integration into the Python data stack (including scikit-learn and matplotlib); but see the Ibis project for a richer experience

Dependencies

Required:

  • Python 3.8+ (Python 2.7 was supported up to Impyla 0.23.0)

  • bitarray

  • thrift>=0.23.0

  • thrift_sasl==0.4.3

Optional:

  • kerberos>=1.3.0 for Kerberos over HTTP support. This also requires Kerberos libraries to be installed on your system - see System Kerberos

    • On Windows operating systems an alternative is 'winkerberos' which can be installed with pip
  • pandas for conversion to DataFrame objects; but see the Ibis project instead

  • sqlalchemy for the SQLAlchemy engine

  • pytest and requests for running tests; unittest2 for testing on Python 2.6

System Kerberos

Different systems require different packages to be installed to enable Kerberos support in Impyla. Some examples of how to install the packages on different distributions follow.

Ubuntu:

apt-get install libkrb5-dev krb5-user

RHEL/CentOS:

yum install krb5-libs krb5-devel krb5-server krb5-workstation

Installation

Install the latest release with pip:

pip install impyla

For the latest (dev) version, install directly from the repo:

pip install git+https://github.com/cloudera/impyla.git

or clone the repo:

git clone https://github.com/cloudera/impyla.git
cd impyla
python -m pip install .

Running the tests

impyla uses the pytest toolchain, and depends on the following environment variables:

export IMPYLA_TEST_HOST=your.impalad.com
export IMPYLA_TEST_PORT=21050
export IMPYLA_TEST_AUTH_MECH=NOSASL

To run the maximal set of tests, run

cd path/to/impyla
py.test --connect impala

Leave out the --connect option to skip tests for DB API compliance.

To test impyla with different Python versions tox can be used. The commands below will run all impyla tests with all supported and installed Python versions:

cd path/to/impyla
tox

To filter environments / tests use -e and pytest arguments after --:

tox -e py310 -- -ktest_utf8_strings

Usage

Impyla implements the Python DB API v2.0 (PEP 249) database interface (refer to it for API details):

from impala.dbapi import connect
conn = connect(host='my.host.com', port=21050) # auth_mechanism='PLAIN' for unsecured Hive connection, see function doc
cursor = conn.cursor()
cursor.execute('SELECT * FROM mytable LIMIT 100')
print cursor.description  # prints the result set's schema
results = cursor.fetchall()

The Cursor object also exposes the iterator interface, which is buffered (controlled by cursor.arraysize):

cursor.execute('SELECT * FROM mytable LIMIT 100')
for row in cursor:
    print(row)

Furthermore the Cursor object returns you information about the columns returned in the query. This is useful to export your data as a csv file.

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)

You can also get back a pandas DataFrame object

from impala.util import as_pandas
df = as_pandas(cur)
# carry df through scikit-learn, for example

For secure connection set use_ssl=True in connect(). Warning: this doesn't verify the server by default! To verify server set verify_cert or ca_cart perameter:

# Verify server using system CA certificates:
conn = connect(host='my.host.com', use_ssl=True, verify_cert=True)

# Verify server using custom CA certificate:
conn = connect(host='my.host.com', use_ssl=True, ca_cart="/tmp/my_cert.pem")

How do I contribute code?

You need to first sign and return an ICLA and CCLA before we can accept and redistribute your contribution. Once these are submitted you are free to start contributing to impyla. Submit these to CLA@cloudera.com.

Find

We use Github issues to track bugs for this project. Find an issue that you would like to work on (or file one if you have discovered a new issue!). If no-one is working on it, assign it to yourself only if you intend to work on it shortly.

It's a good idea to discuss your intended approach on the issue. You are much more likely to have your patch reviewed and committed if you've already got buy-in from the impyla community before you start.

Fix

Now start coding! As you are writing your patch, please keep the following things in mind:

First, please include tests with your patch. If your patch adds a feature or fixes a bug and does not include tests, it will generally not be accepted. If you are unsure how to write tests for a particular component, please ask on the issue for guidance.

Second, please keep your patch narrowly targeted to the problem described by the issue. It's better for everyone if we maintain discipline about the scope of each patch. In general, if you find a bug while working on a specific feature, file a issue for the bug, check if you can assign it to yourself and fix it independently of the feature. This helps us to differentiate between bug fixes and features and allows us to build stable maintenance releases.

Finally, please write a good, clear commit message, with a short, descriptive title and a message that is exactly long enough to explain what the problem was, and how it was fixed.

Please create a pull request on github with your patch.

Release files for impyla 0.24.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for impyla 0.24.0
File Size Uploaded
impyla-0.24.0.tar.gz 329.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for impyla 0.24.0
File Interpreter ABI Platform
impyla-0.24.0-py3-none-any.whl Python 3 none any Details

Total release size: 701.6 kB

Release files / impyla-0.24.0.tar.gz

Download URL impyla-0.24.0.tar.gz
Size 329.0 kB
Tags Source
SHA-256 checksum
How to use checksums
7c0ee0579aab4cbf1a0c1278ed06acdc982369fad0df7d673a009f59d0e04b05
BLAKE2b-256 checksum
How to use checksums
b243906b66fda1b83be56928a63784fa8c5bedb8ed48efa8f74cf9a7f498f685
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.7

Release files / impyla-0.24.0-py3-none-any.whl

Download URL impyla-0.24.0-py3-none-any.whl
Size 372.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
48f0dcd727af111212162bcf55dda3a545b22d862294ed19a973b47f23e800e2
BLAKE2b-256 checksum
How to use checksums
273d1fd8f98777df54a8e181c4beb6bd0fbdbc631093c0337986c8fc4c853ddf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.7

Release history Release notifications | RSS feed

This release

0.24.0 This release

2 release files

0.23.0

2 release files

0.22.0

2 release files

0.21.0

2 release files

0.20.0

2 release files

0.19.0

2 release files

0.18.0

2 release files

0.17.0

2 release files

0.16.3

1 release file

0.16.2

1 release file

0.16.1

1 release file

0.16.0

1 release file

0.15.0

1 release file

0.14.1

2 release files

0.14.0

1 release file

0.13.8

1 release file

0.13.7

1 release file

0.13.6

1 release file

0.13.5

1 release file

0.13.4

1 release file

0.13.3

1 release file

0.13.2

1 release file

0.10.0

1 release file

0.9.1

2 release files

0.9.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page