Python学習【365日チャレンジ!】150日目のマスターU(@Udemy11)です。
Python学習365日チャレンジの次の目標は180日(6ヶ月)ですが、今日でキリのいい数字である150日目に到達しました!
よくがんばってるね!
と自分で自分を褒めてあげたいです。
と言いつつも、最近、釣りのことが気になって仕方がないので、改めて気を引き締めていきたいと思います。
それでは今日もPython学習を始めましょう。
昨日の復習
昨日は、Hbaseをターミナルで操作しました。
ターミナルの操作になれていないと、ちょっと戸惑ってしまうかもしれませんが、ターミナルからコマンドを入力してデータベースを操作するのって、ちょっと興奮しちゃいますよね。
ただ、きちんと操作できているのか、データが保存されているのかなど、目に見えないので不安になってしまいます。
しっかりと頭の中でシミュレーションすることで、ターミナルでの操作でもイメージが膨らんで来ると思うので、実践あるのみです。
ターミナルでHbaseを操作する方法は、昨日の記事をごらんください。
今日は、HbaseをPythonファイルから操作していきます。
PythonでHbaseを使う
まず、ターミナルでHbaseを使える状態にしておく必要があります。
昨日学習しましたが、ターミナルで次のコマンドのどちらかを実行してHbaseを起動します。
brew services start hbase
start-hbase.sh
Hbaseをスタートしたら、次に外部からHbaseの操作を許可する必要があります。
ターミナルでhbase thrift start
を実行し、外部からHbaseを操作できるようにしてからPythonファイルのコードを書いていきます。
テーブルを作ってデータを入れる
ターミナルでやったのと同様に、この表を作成していきます。
まずはターミナルから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行目でデータベースに接続します。
このときのlocalhost
は127.0.0.1
でも大丈夫です。
8行目でtest
テーブルを作成し、data
カラムファミリーを作成します。
10行目で変数table
に作成したテーブルtest
を代入して操作していきます。
12行目から29行目までは、作る表のuser1
、user2
、user3
のデータを順番に挿入しています。
これで表は完成していますが、何も出力していないので、ファイルを実行しても何も出力されません。
データを表示する
次に作成したデータをコンソールに表示させてみましょう。
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_prefix
でuser1
行を指定しています。
15行目ではscan
の引数にcolumn
のdata:food
列を指定しています。
次にターミナルでやったように、データベースの値を削除してみましょう。
値を削除する
最後にテーブルに保存してあるuser1
行とuser3
のdata: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
+c
でthrift
から抜けてHbaseをスタートさせたコマンドに対応するコマンドを実行します。
今回私はbrew services
でスタートさせたので、brew services stop hbase
を実行してHbaseを終了させました。
コマンド入力がたのしい
今回、PythonでHbaseを操作しましたが、Pythonファイルからprint
でコンソールに出力するだけでなく、ターミナルからscan
コマンドを使ってテーブルを表示させたりしていました。
何度もやっていると少しずつなれてくるので、どんどん楽しくなってくるんです。
なんだかマトリックスの世界に近づいた感じがするんです。
実際はそんなレベルではないんですけど。。。
ま〜自分の成長をどう捉えるかは自分次第なので、プラス思考でPython学習を継続していこうと思います。
それでは、明日もGood Python!