PyHive is a collection of Python DB-API and SQLAlchemy interfaces for Presto and Hive.
frompyhiveimportpresto# or import hivecursor=presto.connect('localhost').cursor()
cursor.execute('SELECT * FROM my_awesome_data LIMIT 10')
printcursor.fetchone()
printcursor.fetchall()frompyhiveimporthivefromTCLIService.ttypesimportTOperationStatecursor=hive.connect('localhost').cursor()
cursor.execute('SELECT * FROM my_awesome_data LIMIT 10', async=True)
status=cursor.poll().operationStatewhilestatusin (TOperationState.INITIALIZED_STATE, TOperationState.RUNNING_STATE):
logs=cursor.fetch_logs()
formessageinlogs:
printmessage# If needed, an asynchronous query can be cancelled at any time with:# cursor.cancel()status=cursor.poll().operationStateprintcursor.fetchall()First install this package to register it with SQLAlchemy (see setup.py).
fromsqlalchemyimport*fromsqlalchemy.engineimportcreate_enginefromsqlalchemy.schemaimport*# Prestoengine=create_engine('presto://localhost:8080/hive/default')
# Hiveengine=create_engine('hive://localhost:10000/default')
logs=Table('my_awesome_data', MetaData(bind=engine), autoload=True)
printselect([func.count('*')], from_obj=logs).scalar()Note: query generation functionality is not exhaustive or fully tested, but there should be no problem with raw SQL.
# DB-APIhive.connect('localhost', configuration={'hive.exec.reducers.max': '123'})
presto.connect('localhost', session_props={'query_max_run_time': '1234m'})
# SQLAlchemycreate_engine('presto://user@host:443/hive', connect_args={'protocol': 'https'})
create_engine(
'hive://user@host:10000/database',
connect_args={'configuration': {'hive.exec.reducers.max': '123'}},
)
# SQLAlchemy with LDAPcreate_engine(
'hive://user:password@host:10000/database',
connect_args={'auth': 'LDAP'},
)Install using
pip install pyhive[hive]for the Hive interface andpip install pyhive[presto]for the Presto interface.
PyHive works with
- Python 2.7 / Python 3
- For Presto: Presto install
- For Hive: HiveServer2 daemon
- For Python 3 + Hive + SASL, you currently need to install an unreleased version of
thrift_sasl(pip install git+https://github.com/cloudera/thrift_sasl). At the time of writing, the latest version ofthrift_saslwas 0.2.1.
See https://github.com/dropbox/PyHive/releases.
- Please fill out the Dropbox Contributor License Agreement at https://opensource.dropbox.com/cla/ and note this in your pull request.
- Changes must come with tests, with the exception of trivial things like fixing comments. See .travis.yml for the test environment setup.
Run the following in an environment with Hive/Presto:
./scripts/make_test_tables.sh virtualenv --no-site-packages env source env/bin/activate pip install -e . pip install -r dev_requirements.txt py.test
WARNING: This drops/creates tables named one_row, one_row_complex, and many_rows, plus a
database called pyhive_test_database.