LoginSignup
2
4

More than 5 years have passed since last update.

python から dashDB をアクセスしたメモ

Last updated at Posted at 2017-06-02

数値データ処理で主流になっている Python から IBM Watson Data Platform にグループされる dashDB for Analytics をアクセスする方法について試したメモです。

dashDBとは

dashDB は、「DB2 BLU」によるインメモリー・アナリティクスと PureData for Analytics (Netezza) 由来のイン・データベース・アナリティクスを融合し、クラウドサービスとして利用することを可能にしたアナリティクス・サービスです。IBM が提供するクラウド・プラットフォームである Bluemix 上で提供されています。
dashDB は、コアとなる分析エンジンに DB2 に搭載された BLU アクセラレーションを採用しています。BLU アクセラレーションは、IBM の基礎研究所の研究成果を元に開発された、まったく新しい SQL 処理エンジンです。DB2 for LUW の機能とメリットで紹介されているように、BLU アクセラレーションにはさまざまなイノベーションが詰め込まれています。そのなかでも特に重要なポイントは、分析処理につきものであったチューニングが不要になったことです。
BLU アクセラレーションを利用する上でユーザーに必要な作業はデータを投入することだけです。データ投入後はすぐに高速な分析ができます。これは、dashDB がクラウド上の分析サービスとして提供されるためにけして欠かせない要素です。逆の言い方をすると、チューニング不要な分析エンジンである BLU アクセラレーションが登場したからこそ、dashDB が実現できたとも言えます。そして、dashDB はサービスとして提供されており、初期投資やインフラの構築が不要で、迅速に利用を開始することが可能です。(1)

Pythonはアナリティックス用言語

Python には、数値データ処理用、高水準の科学技術計算用、機械学習用などのライブラリが提供されており、もしかしたら、R言語よりも、Pythonの方がアナリティックス用言語として、普及しているのではないかと思う程の情報があります。 (2),(3),(4)
そこで、Python から dashDB for Analytics を利用する方法について確認します。

Python & dashDB

Python から dashDBへ接続するには、ODBC と JDBC を利用できます。 設定に関する説明やドライバーダウンロード先のリンクは Bluemix の dashDBの管理画面にあります。

ODBC接続

次のスクリーンショットは、Bluemix の dashDB の管理画面の一つで、Connect を選んで、SSLを選択したところの表示です。 Python から ODBCドライバ経由で dashDBへ接続するには、ドライバをダウンロードしてインストールする必要があります。
スクリーンショット 2017-06-01 21.42.46.png
ODBCドライバーのインストールと設定は、参考資料(8)が助けになると思います。ただし、DSN名は上記スクリーンコピーに相当するページに表示される名前を利用しないと接続できません。
下記のサンプルコードは、自分の MacBook の vagrant 環境で動作する Ubuntu14.04 の環境で動作するものです。

ODBC接続のサンプルコード
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# ODBC

from ibmdbpy.base import IdaDataBase
idadb = IdaDataBase(dsn="DASHDB", uid="******", pwd="***********")
print "current_schema = ", idadb.current_schema
idadb.close();
実行結果
ubuntu@ubuntu-xenial:~/dashDB$ ./test1.py 
current_schema =  DASH9824
Connection closed.

JDBC接続

前述のODBCドライバーをダウンロードすれば、JDBCドライバーも同梱されていますので、また、接続の設定は、参考資料(5)のサイトの http://pythonhosted.org/ibmdbpy/start.html#jdbc-connection にあり、JDBCドライバーは、参考資料(9)からもダウンロードできます。 こちらも同様に MacBook 上で動作する仮装サーバー Ubuntu14.04 で動作するコードです。

JDBC接続のサンプルコード
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# JDBC
from ibmdbpy.base import IdaDataBase

jdbc = 'jdbc:db2://dashdb-entry-yp-dal09-09.services.dal.bluemix.net:50001/BLUDB:user=dash982;password=**********'
idadb = IdaDataBase(jdbc)
print idadb.current_schema
idadb.close();

しかし、2017年6月1日現在、このコードは動作しません。 原因は JayDeBeApi のバージョンが上がった事によります。この問題は次のURLから参照できます。
RuntimeError: No matching overloads found. at native/common/jp_method.cpp:117 #18
https://github.com/ibmdbanalytics/ibmdbpy/issues/18

ibmdbpy の対話インタフェース

bmdbpyプロジェクトは、IBM dashDBおよびIBM DB2のデータベース操作アルゴリズムおよびデータ操作のためのPython 対話型インターフェースを提供します。Pythonで記述された操作を実行のために、接続されたデータベースにシームレスにプッシュすることで、Pythonの解析を加速し、これにより、列指向記憶および並列処理などのデータベース内性能向上機能の恩恵を受ける。 ibmdbpyプロジェクトは、Python開発者にとって、学ばなくても使うことができます。なぜなら、データ操作のためのPandasライブラリや機械学習アルゴリズムのScikit-learnライブラリの良く知られたユーザーインタフェースを真似ているからです。
ibmdbpyプロジェクトは、Pythonリリース2.7〜3.4 で利用できます。 ODBCまたはJDBCを介してdashDBまたはDB2インスタンスに接続できます。プロジェクトはまだ初期段階にあり、その多くの機能はまだ開発中です。しかし、いくつかの実験では、中規模または大量のデータ、つまり100万行以上のテーブルで操作する場合、パフォーマンス上のメリットが顕著であることが既に実証されています。(5)
Pandas のユーザーインタフェースは、10 Minutes to pandas http://pandas.pydata.org/pandas-docs/stable/10min.html を参照すると感覚的に理解できると思います。

ibmdbpy ライブラリのイントール

Python から dashDB を操作するためのライブラリとして ibmdbpy があり pip install で自分の実行環境に落とす事ができます。(5)(6)(7)

ubuntu@ubuntu-xenial:~/dashDB$ pip install ibmdbpy

ibmdbpy の実行例

下記の様に動作しますが、開発途上ということもあり、もう少し様子を見る必要がありそうですね。

ubuntu@ubuntu-xenial:~/dashDB$ python
Python 2.7.12 (default, Feb 15 2017, 05:35:22) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ibmdbpy.base import IdaDataBase
>>> idadb = IdaDataBase(dsn="DASHDB", uid="******", pwd="*******")
>>> idadb.ida_query("SELECT* FROM SAMPLES.CITSTATUS")
  䥃彔佃䕄                                               䥃彔䕄䍓
0    1                                   Born in the U.S.
1    2  Born in Puerto Rico/Guam/Virgin Islands/Northe...
2    3                  Born abroad of American parent(s)
3    4                                Naturalized Citizen
4    5                          Not a citizen of the U.S.

ibm_db によるSQL実行

Python用のibm_dbは pip install ibm_db で導入することができます。 検証したところ、DSN名で接続することに問題がある様でしたので、カタログを利用せず、接続用文字列でアクセスした処で、アクセスに成功しました。 日本語の入ったデータも問題なく利用できる様です。

#!/usr/bin/env python                                                                                                         
import ibm_db
url = "DATABASE=BLUDB;HOSTNAME=dashdb-entry-yp-dal09-09.services.dal.bluemix.net;PORT=50001;PROTOCOL=TCPIP;UID=******; PWD=*****;SECURITY=ssl"
sql  = "SELECT* FROM SAMPLES.CITSTATUS"
conn = ibm_db.connect(url, "", "")
stmt = ibm_db.prepare(conn, sql)
ibm_db.execute(stmt)
data = ibm_db.fetch_tuple(stmt)
while(data):
    print data[0], data[1]
    data = ibm_db.fetch_tuple(stmt)

ibm_db.free_stmt(stmt)
ibm_db.close(conn)

実行結果は、以下の様になり、普通のODBCによるアクセスと同じです。

ubuntu@ubuntu-xenial:~/dashDB$ ./test5.py
1 Born in the U.S.
2 Born in Puerto Rico/Guam/Virgin Islands/Northern M
3 Born abroad of American parent(s)
4 Naturalized Citizen
5 Not a citizen of the U.S.

まとめ

Bluemix の dashDB for analytics を Python でアクセスしてみました。 ibmdbpy プロジェクトは、Pandasと互換のあるUIを適用するもので、期待が大きいのですが、開発初期段階ということもあり、これからの成果を見守りたいと思います。 それから、レガシーな ibm_db の Python版は安定の動作でスグに使えますね。

続編 python dashDBをアクセスするコードの作り方 on Blumix or local もあります。

参考資料

(1) さわってみよう dashDB https://www.ibm.com/developerworks/jp/data/library/dashdb/dm-dashdb1-bluemix/
(2) Python でデータサイエンス http://pythondatascience.plavox.info/
(3) なぜ機械学習にPythonが選ばれるのか http://qiita.com/yaju/items/5502115d7e3d06e6bbdd
(4) Scipy Lecture Notes http://www.turbare.net/transl/scipy-lecture-notes/index.html
(5) ibmdbpy Accelerating Python Analytics by In-Database Processing http://pythonhosted.org/ibmdbpy/index.html
(6) Python package index ibmdbpy 0.1.4 A Pandas-like SQL-wrapper for in-database analytics with IBM dashDB/DB2. https://pypi.python.org/pypi/ibmdbpy
(7) GitHUB ibmdbanalytics/ibmdbpy https://github.com/ibmdbanalytics/ibmdbpy
(8) Bluemixでデータ分析「dashDB」:LinuxサーバにODBCの設定してみた http://qiita.com/azzeten/items/55dc4ad1535bf709403b
(9) DB2 JDBC Driver Versions and Downloads http://www-01.ibm.com/support/docview.wss?uid=swg21363866
(10) ibm_db 2.0.7 https://pypi.python.org/pypi/ibm_db/

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4