自分のキャリアをあれこれ考えながら、Pythonで様々なデータを分析していくブログです

Pythonからimpylaでhiveを操作してみる

Python
Python
ヒノマルク
ヒノマルク

どうもヒノマルクです。今日はhiveへのアクセスになります。

最近だとBigQueryに移行している企業もいるかと思いますが、まだまだ現役でゾウさんとハチさんに頑張ってもらっている企業も多いのではないでしょうか?

ヒノマルクは業務上、hiveもBigQueryも両方使っていますが、hiveにはかなり思い入れがあります。

戦友みたいな感じです。

CSVにデータを吐き出して読み込んでもいいですが、やっぱり直接hiveからデータを読み込みたいですよね。

impylaというライブラリで可能なのでご紹介します。

スポンサーリンク

impylaのインストール

impylaはHadoopディストリビューションを展開しているClouderaさんが提供してくださっています。

まずはpipでインストールしてみましょう。

WindowsでもMacでもLinuxでもpipが使えればインストール可能だと思います。

impylaのインストール
$ /Users/hinomaruc/Desktop/notebooks/my-venv/bin/python3 -m pip install impyla
Out[0]
Collecting impyla
  Downloading impyla-0.17.0-py2.py3-none-any.whl (272 kB)
     |████████████████████████████████| 272 kB 5.7 MB/s
Requirement already satisfied: bitarray in ./Desktop/notebooks/my-venv/lib/python3.9/site-packages (from impyla) (2.3.5)
Collecting thrift-sasl==0.4.3
  Downloading thrift_sasl-0.4.3-py2.py3-none-any.whl (8.3 kB)
Requirement already satisfied: thrift==0.11.0 in ./Desktop/notebooks/my-venv/lib/python3.9/site-packages (from impyla) (0.11.0)
Requirement already satisfied: six in ./Desktop/notebooks/my-venv/lib/python3.9/site-packages (from impyla) (1.16.0)
Collecting pure-sasl>=0.6.2
  Downloading pure-sasl-0.6.2.tar.gz (11 kB)
  Preparing metadata (setup.py) ... done
Using legacy 'setup.py install' for pure-sasl, since package 'wheel' is not installed.
Installing collected packages: pure-sasl, thrift-sasl, impyla
    Running setup.py install for pure-sasl ... done
Successfully installed impyla-0.17.0 pure-sasl-0.6.2 thrift-sasl-0.4.3
スポンサーリンク

impylaを使ってみる

cx_Oracleのインストールとは違い簡単でしたね。
早速、impylaを使ってみましょう。

impylaのインポート
from impala.dbapi import connect
コネクション作成。ユーザーは何でもよい
conn = connect(host='localhost', port=10000, auth_mechanism="PLAIN", user="hinomaruc")
カーソル作成
cur = conn.cursor()

テストテーブル作成

テストテーブル作成
cur.execute('create table test (aaa string)')
テストデータ投入
cur.execute('insert into table test values ("hello")')

テストテーブルの中身を確認

抽出クエリ発行
cur.execute('select * from test')
データのフェッチ
rows = cur.fetchall()
フェッチしたデータの確認
for row in rows:
    print(row)
Out[0]
('hello',)

先ほどインサートした「hello」という文字列が返却されました。

フェッチしないで、カーソルを直接読み込む方法もある

cur.execute('select * from test')
for row in cur:
    print(row)
Out[0]
('hello',)
コネクションを閉じる
cur.close()
conn.close()

いかがでしょうか? cx_Oracleやpsycopg2とほとんど同じような手順でしたね。

これで、oracleもpostgreSQLもhiveも直接Pythonからアクセスすることができるようになりました。

あとはMySQLやBigQueryをPythonからアクセスする記事があれば、業務上使うデータベースは網羅できるのではないでしょうか?

あでも、MongoDBとかはどうかな。。。使うかな。。。
実業務での経験はないですが、必要になったら調べて記事化しようと思います。

それではまた次回。次はPythonからBigQueryへアクセスする方法をまとめようと思います。

タイトルとURLをコピーしました