Db2

Jupyter NotebookからDb2に簡単アクセス

記事をシェアする:

こんにちは、IBM西戸です。今回はJupyter NotebookからDb2に簡単アクセスできるDb2 Magicコマンドをご紹介します。

Jupyter Notebookはコード(主にPython)をインタラクティブに記述・実行がすぐでき、結果をすぐにグラフ化したり表示したりすることができるオープンソースのWebアプリケーションです。Pythonを使った分析で使っている方も多いと思います。このJupyter Notebookから今回紹介するDb2 Magicコマンドを使えば、Pythonのコードを書かずに、データベース内でのSQLのプロトタイピング、アプリケーションの構築、結果の分析、データのグラフ化などを素早く行うことができます。

Jupyter Notebookの準備

Jupyter Notebookはいろいろな方法で準備できます。以下に主な方法を記述しました。環境がない方は以下の方法で準備していただければと思います。

  • Windows, Mac,などのPCに導入して使う
    • PCにPythonの環境を導入した上で、Jupyter Notebookが導入できます 。
    • またはVisual Studio Code(VSCode)でJupyter Notebookも使用できます。(VSCode Jupyter Notebookで検索)

 

Db2 Magic コマンド

MagicコマンドとはJupyter Notebookの機能でコードブロック内で使用できる構文を拡張します。Magicコマンドは、パーセント記号「%」で始まります。

標準で提供されているMagicコマンドはNotebookの動作の変更、OSコマンドの実行、 Notebook機能の拡張など、 環境内でさまざまな機能を提供しています。

Jupyter NotebookからDb2へのアクセスを簡単にするために作成されたのがDb2 Magicコマンド%sqlです。このMagicコマンドを使用すると、標準的なSQL構文を使用してDb2テーブルを照会することができます。このコマンドは標準では提供されていないので、ダウンロードしてロードが必要です。

 

前準備

1. Python環境にibm_dbパッケージの導入

Db2にアクセスするためpipでibm_dbパッケージを導入します。下記のコマンドの-Uオプションは導入済みでもライブラリが古い場合は更新するオプションです。

pip install -U ibm_db

IBM Cloud Watson Studio やGoogle ColaboratoryなどのSaaS環境であれば、直接Notebookのセルで!を先頭につけてibm_dbパッケージを導入します。

! pip install -U ibm_db

2. Db2 magic コマンドのモジュールをダウンロード

Jupyter Notebookでアクセスできる場所にDb2 magic コマンドのモジュールdb2.ipynbをダウンロードします。GitHubのパスは以下になります:
https://github.com/IBM/db2-jupyter/blob/master/db2.ipynb
このURLにWebブラウザーでアクセスし、[Raw]ボタンを右クリックしてメニューの「リンク先を別名で保存」(使用しているブラウザーによって多少表現が違います)をクリックし、保存してください。

db2.ipynbのダウンロード

db2.ipynbのダウンロード

こちらもSaaS環境であれば、直接Notebookのセルで!を先頭につけてwgetコマンドで直接仮想環境にdb2.ipynbをダウンロードします。

! wget https://raw.githubusercontent.com/IBM/db2-jupyter/master/db2.ipynb

ダウンロードしたdb2.ipynbを実行

前準備ができたら、Db2 Magicコマンドをロードします。空のNotebookを開いてください。
セルに以下のコマンドを入力して実行してください。db2.ipynbには必要に応じてPATHをつけてください。%run db2.ipynbコマンドは、db2.ipynbファイルの内容を読み込み、新しい %sqlと %%sqlコマンドを作成します。

%run db2.ipynb

環境によっては下記の警告が表示されることがありますが、無視してください。

Warning: QGRID is unavailable for displaying results in scrollable windows.
Install QGRID if you want to enable scrolling of result sets.
Warning: PANDAS level does not support Db2 typing which will can increase memory usage.
Install PANDAS version 1.3+ for more efficient dataframe creation.

コマンドの基本

以下がDb2 Magicコマンドの基本的な使用方法です:

  • %sql コマンドは一行コマンドに使用され、%%sql は SQL のブロック(複数のSQL)を実行します。
  • %sqlコマンドの結果のみ変数に代入できます。
  • Pythonの変数を%sqllコマンドに渡すには,{}の中括弧で変数名をかこみます。
  • 単一の %sqlコマンドは、行末にバックスラッシュ\を使用して複数行に記載できます。
  • %%sql ブロック内の複数のステートメントでは、セミコロン;をデリミタとして使用します

Db2への接続

ではいよいよDb2 Magicコマンドを使ってDb2に接続してみます。
接続前に接続先のDb2のホスト名、ポート番号、Db名、ユーザーID、パスワード、SSL接続かどうかの情報を取得しておいてください。

下記のコマンドをセルに入力し、実行します。SSL接続の場合は最後にSSL TRUEを付けます。SSL接続が不要な場合はSSL TRUEは不要です。

%sql CONNECT TO <データベース名> USER <ユーザー名> USING <パスワード> HOST <ホスト名 または IPアドレス> port <ポート番号> SSL TRUE

コマンド実行時は先頭に%sqlを付けます。
Db2にCLIでコマンドラインから接続した方はご存知と思いますが、この接続構文はCLIを使用して接続する時の構文とほぼ同様です。コマンドは大文字でも小文字でも問題ありません。

実行例(SSL接続):

Db2への接続

Db2への接続

SQLの実行

SQLの実行は普通に%sqlにスペースを1つ以上開けて、SQLを記載すれば実行できます。

%sql select * FROM EMPLOYEE

実行例:

select文の実行

select文の実行

デフォルトではpandas DataFrame形式で出力されます。

出力の最初の5行と最後の5行を表示します。
もっと見たい場合は、特別なフラグ(-all)を使用します。

-all. -a : 全部レコード表示 (ただし現状MAX 100行)

%sql -all select * FROM EMPLOYEE

他にもオプションがありますが、ここでは割愛します。他のオプションについては当記事の一番最後のセクション「まとめ」に記載しているDb2 and Jupyter Notebooksを参照してみてください。

SELECTの結果セットのPythonの変数への代入

df_employee = %sql select * FROM EMPLOYEE

変数に格納された後は、pandasの構文を使って表示したり、スライスしたりすることができます。以下はその例です(Db2 Magic コマンドではなくpandasの構文です)。

#単に表示 (前後5行)
df_employee
# 0行目のFIRSTNMEを表示 (行数は0から開始)
df_employee[‘FIRSTNME’][0]
# index 10行目を表示 (0から始まるので実質11行目)
df_employee.iloc[[10]]
# WORKDEPTがC01の行を表示 (これはSQLでもいいかも、、、)
df_employee.loc[(df_employee[‘WORKDEPT’]==’C01′)]
# 最初10行
df_employee.head(10)
# 最後10行
df_employee.tail(10)

実行例:

単に表示 (前後5行)

単に表示 (前後5行)

 

0行目のFIRSTNMEを表示、WORKDEPTがC01の行を表示 index 10行目を表示、

0行目のFIRSTNMEを表示、WORKDEPTがC01の行を表示

 

最初10行

最初10行

 

最後10行

最後10行

 

簡易グラフ機能

%sqlコマンドで、簡単なチャートが作成できます:

  • -bar 棒グラフ
  • -pie 円グラフ
  • -line 折れ線グラフ

# 棒グラフ
%sql -bar SELECT WORKDEPT, AVG(SALARY) FROM EMPLOYEE GROUP BY WORKDEPT
# 円グラフ
%sql -pie SELECT WORKDEPT, AVG(SALARY) FROM EMPLOYEE GROUP BY WORKDEPT
# 折れ線グラフ
%sql -line SELECT WORKDEPT, AVG(SALARY) FROM EMPLOYEE GROUP BY WORKDEPT

実行例:

グラフ表示

グラフ表示

まとめ

今回はDb2 Magicコマンドの使い方の一部をご紹介しましたが、その他にも通常CLIで実施するようなこととPythonを組み合わせたりして簡単な構文でDb2のデータを活用可能です。

その他のいろいろなコマンドの使い方については以下の資料をぜひ参照してみてください。

 

またDb2のテーブル作成可能な環境があれば一通りの機能を簡単に動かせる説明入りのJupyter NotebookのサンプルをGitHubで公開してありますので、ダウンロードして使ってみてください。

 

尚Db2環境はIBM CloudのDb2 on CloudのLiteプランを使用すれば無料で試すことができます。

 

本家db2-jupyter のGithub repositoryにはいろいろなサンプルNotebookがあります。最新の情報もこちらになります。ぜひこちらも参照してみてください(コンテンツは英語になります)。

 

最後に、実際に動かしてみたいけど一人ではよくわからない、動いているところを見たいという方には、2022年4月21日にハンズオンセミナーを実施しますので、ぜひご参加いただければと思います。

 

ぜひ皆様実際に使ってみていただければと思います。
最後まで読んでいただきありがとうございました。

kyoko nishito

西戸 京子
日本アイ・ビー・エム株式会社
テクノロジー事業本部 Data & AI
第三テクニカルセールス

More Db2 stories

ジェネレートするAI。クリエートする人類 。 | Think Lab Tokyo 宇宙の旅(THE TRIP)

IBM Data and AI, IBM Partner Ecosystem, IBM Sustainability Software

その日、船長ジェフ・ミルズと副船長COSMIC LAB(コズミック・ラブ)は、新宿・歌舞伎町にいた。「THE TRIP -Enter The Black Hole-」(以下、「THE TRIP」)と名付けられた13度目の ...続きを読む


イノベーションを起こす方法をイノベーションしなければならない(From IBVレポート「エコシステムとオープン・イノベーション」より)

Client Engineering, IBM Data and AI, IBM Partner Ecosystem

不確実性が増し、変化が絶え間なく続く時代には「イノベーション疲れ」に陥るリスクがある。誰もがイノベーションを起こしていると主張するならば、結局、誰もイノベーション(革新的なこと)を起こしてなどいないことになるだろう 当記 ...続きを読む


キー・パートナーに訊く | 毛利 茂弘(株式会社システムリサーチ)

IBM Data and AI, IBM Partner Ecosystem

株式会社システムリサーチでPM/Tech Advisorとして活躍する毛利茂弘氏に、日本IBMで中部地区パートナーを担当する大石正武が訊きます。 (写真左)毛利 茂弘(もうり しげひろ) | 株式会社システムリサーチ 製 ...続きを読む