Python Hbase ターミナルで使う

Python学習【365日チャレンジ!】150日目のマスターU(@Udemy11)です。

Python学習365日チャレンジの次の目標は180日(6ヶ月)ですが、今日でキリのいい数字である150日目に到達しました!

よくがんばってるね!

と自分で自分を褒めてあげたいです。

と言いつつも、最近、釣りのことが気になって仕方がないので、改めて気を引き締めていきたいと思います。

それでは今日もPython学習を始めましょう。

昨日の復習

昨日は、Hbaseをターミナルで操作しました。

ターミナルの操作になれていないと、ちょっと戸惑ってしまうかもしれませんが、ターミナルからコマンドを入力してデータベースを操作するのって、ちょっと興奮しちゃいますよね。

ただ、きちんと操作できているのか、データが保存されているのかなど、目に見えないので不安になってしまいます。

しっかりと頭の中でシミュレーションすることで、ターミナルでの操作でもイメージが膨らんで来ると思うので、実践あるのみです。

ターミナルでHbaseを操作する方法は、昨日の記事をごらんください。

今日は、HbaseをPythonファイルから操作していきます。

PythonでHbaseを使う

まず、ターミナルでHbaseを使える状態にしておく必要があります。

昨日学習しましたが、ターミナルで次のコマンドのどちらかを実行してHbaseを起動します。

  1. brew services start hbase
  2. start-hbase.sh

Hbaseをスタートしたら、次に外部からHbaseの操作を許可する必要があります。

ターミナルでhbase thrift startを実行し、外部からHbaseを操作できるようにしてからPythonファイルのコードを書いていきます。

テーブルを作ってデータを入れる

Pythonista データベース NoSQL

ターミナルでやったのと同様に、この表を作成していきます。

まずはターミナルからpipインストールでhappybaseパッケージをインストールしますが、Pycharmの【Preferences】からインストールしてもかまいません。

AnacondaでPythonをインストールしている場合はプリインストールされているモジュールですので、すでにインストールされている人もいると思います。

happybaseのインストールが完了すれば、コードを書いていきます。

import happybase


connection = happybase.Connection('localhost')
connection.open()


connection.create_table(b'test', {'data': dict()})

table = connection.table(b'test')

table.put(
    b'user1', {
        b'data:sports': b'data1',
        b'data:food': b'data2'
    }
)

table.put(
    b'user2', {
        b'data:sports': b'data3'
    }
)

table.put(
    b'user3', {
        b'data:food': b'data6'
    }
)

4行目でコネクターオブジェクトを作り、5行目でデータベースに接続します。

このときのlocalhost127.0.0.1でも大丈夫です。

8行目でtestテーブルを作成し、dataカラムファミリーを作成します。

10行目で変数tableに作成したテーブルtestを代入して操作していきます。

12行目から29行目までは、作る表のuser1user2user3のデータを順番に挿入しています。

これで表は完成していますが、何も出力していないので、ファイルを実行しても何も出力されません。

データを表示する

次に作成したデータをコンソールに表示させてみましょう。

import happybase


connection = happybase.Connection('localhost')
connection.open()


table = connection.table(b'test')


print(list(table.scan()))
print()
print(list(table.scan(row_prefix=b'user1')))
print()
print(list(table.scan(columns=[b'data:food'])))

出力結果

[(b'user1', {b'data:food': b'data2', b'data:sports': b'data1'}), (b'user2', {b'data:sports': b'data3'}), (b'user3', {b'data:food': b'data6'})]

[(b'user1', {b'data:food': b'data2', b'data:sports': b'data1'})]

[(b'user1', {b'data:food': b'data2'}), (b'user3', {b'data:food': b'data6'})]

変数tableにテーブルtestを代入するところまでは同じです。

11行目では、ターミナル同様にscanコマンドでテーブルのイテラブルデータを取得して、listメソッドでループさせて順番にデータを取得して表示しています。

12行目と14行目は見やすいように空白行を挿入するためのコードで、13行目ではscanの引数にrow_prefixuser1行を指定しています。

15行目ではscanの引数にcolumndata:food列を指定しています。

次にターミナルでやったように、データベースの値を削除してみましょう。

値を削除する

最後にテーブルに保存してあるuser1行とuser3data:food列を削除してみます。

import happybase


connection = happybase.Connection('localhost')
connection.open()


table = connection.table(b'test')


table.delete(b'user3', {b'data:food'})

table.delete(b'user1')

print(list(table.scan()))

出力結果

[(b'user2', {b'data:sports': b'data3'})]

11行目でuser3行のdata:food列を削除して、13行目でuser1行全体を削除しています。

最後にテーブルのデータを出力していますので、残ったuser2のデータだけが表示されています。

テーブルの削除

ターミナルでの操作同様に、テーブルを使用不可(disable)にしてからでないと削除することができません。

connection.disable_table(b'test')
connection.delete_table(b'test')

10行目までは同じコードで、上記のようにtestテーブルをdisableにしてから、deleteでテープルを削除しています。

最後に作業を終了するには、ターミナルにもどり、control+cthriftから抜けてHbaseをスタートさせたコマンドに対応するコマンドを実行します。

今回私はbrew servicesでスタートさせたので、brew services stop hbaseを実行してHbaseを終了させました。

コマンド入力がたのしい

今回、PythonでHbaseを操作しましたが、Pythonファイルからprintでコンソールに出力するだけでなく、ターミナルからscanコマンドを使ってテーブルを表示させたりしていました。

何度もやっていると少しずつなれてくるので、どんどん楽しくなってくるんです。

なんだかマトリックスの世界に近づいた感じがするんです。
実際はそんなレベルではないんですけど。。。

ま〜自分の成長をどう捉えるかは自分次第なので、プラス思考でPython学習を継続していこうと思います。

それでは、明日もGood Python!