Jupyter NotebookからVantageを利用する方法

著者 [Adam Tworkiewicz](adam.tworkiewicz@teradata.com)
最終更新日 2022年4月12日

:::note warn
警告
本記事はTeradata Corporationのサイト[Getting Started](https://quickstarts.teradata.com/index.html#getting-access-to-vantage)に掲載された内容を抄訳したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については、原本をご参照下さい。
また、修正が必要な箇所や、ご要望についてはコメントをよろしくお願いします。
:::

# 概要
このクイックスタートでは、JupyterノートブックからTeradata Vantageに接続する方法を説明します。

::: note info
Vantageの新しいインスタンスが必要な場合は、[Google Cloud](https://qiita.com/ykswi/items/10a382de5fa5a4a42c50)、[Azure](https://qiita.com/ykswi/items/2c30aa1f5413b16c838c)、[AWS](https://qiita.com/ykswi/items/fba559149ad568678d58)のクラウドにVantage Expressという無料版をインストールすることができます。また、[VMware](https://qiita.com/ykswi/items/ebe1d854c38db9bb0f51)、[VirtualBox](https://qiita.com/ykswi/items/ffadaa375add309f2075)、または[UTM](https://qiita.com/ykswi/items/94995954ae723185c2f7)を使用して、ローカルマシン上でVantage Expressを実行することもできます。
:::

# オプション
Jupyter ノートブックから Vantage に接続するには、いくつかの方法があります。

①	[通常の Python/R カーネルノートブックで Python または R ライブラリを使用する](https://quickstarts.teradata.com/jupyter.html#_teradata_libraries) - このオプションは、独自の Docker イメージを生成することができない制限された環境にいる場合に有効です。また、従来のデータサイエンス・シナリオで、SQLとPython/Rをノートブックに混在させなければならない場合にも有効です。もしあなたがJupyterを使いこなし、自分好みのライブラリや拡張機能のセットを持っているなら、このオプションから始めてみてください。

②	[Teradata Jupyter Dockerイメージの使用](https://quickstarts.teradata.com/jupyter.html#_teradata_jupyter_docker_image) - Teradata Jupyter Dockerイメージは、Teradata SQLカーネル（詳細は後述）、teradatamlおよびtdplyrライブラリ、pythonおよびRドライバをバンドルしています。また、Teradataの接続を管理したり、Vantageデータベースのオブジェクトを探索したりするためのJupyter拡張も含まれています。SQLをよく使う場合や、ビジュアルナビゲータがあると便利です。Jupyterを初めて使う場合や、ライブラリや拡張機能の精選されたアセンブリを入手したい場合は、このオプションから始めてください。


# Teradataのライブラリ
このオプションでは、通常のJupyter Labノートブックを使用します。Teradata Pythonドライバをロードし、Pythonコードから使用する方法について見ていきます。また、SQLのみのセルのサポートを追加する**ipython-sql**拡張についても検証します。

①	まず、プレーンなJupyter Labノートブックから始めます。ここでは docker を使っていますが、Jupyter Hub、Google Cloud AI Platform Notebooks、AWS SageMaker Notebooks、Azure ML Notebooks など、ノートブックを起動する方法であれば何でも構いません。

```:aaa
docker run --rm -p 8888:8888 -e JUPYTER_ENABLE_LAB=yes \
  -v "${PWD}":/home/jovyan/work jupyter/datascience-notebook
```

②	Docker logsに必要なurlが表示されます。

```:aaa
Entered start.sh with args: jupyter lab
Executing the command: jupyter lab
....
To access the server, open this file in a browser:
    file:///home/jovyan/.local/share/jupyter/runtime/jpserver-7-open.html
Or copy and paste one of these URLs:
    http://d5c2323ae5db:8888/lab?token=5fb43e674367c6895e8c2404188aa550b5c7bdf96f5b4a3a
  or http://127.0.0.1:8888/lab?token=5fb43e674367c6895e8c2404188aa550b5c7bdf96f5b4a3a
```

③	新しいノートブックを開き、必要なライブラリをインストールするためのセルを作成します。

::: note info
以下に説明するすべてのセルを含むノートブックをGitHubで公開しています: [https://github.com/Teradata/quickstarts/blob/main/modules/ROOT/attachments/vantage-with-python-libraries.ipynb](https://github.com/Teradata/quickstarts/blob/main/modules/ROOT/attachments/vantage-with-python-libraries.ipynb)
:::

```:aaa
import sys
!{sys.executable} -m pip install teradatasqlalchemy
```

④	では、**Pandas**をインポートして、Teradataに接続するための接続文字列を定義していきます。ノートブックをローカルマシンのDockerで動かしていて、ローカルのVantage Express VMに接続したいので、Dockerが提供する**host.docker.internal** DNS名を使って、自分のマシンのIPを参照するようにしています。

```:aaa
import pandas as pd
db_connection_string = "teradatasql://dbc:dbc@host.docker.internal/dbc"
```

⑤	Pandasを呼び出してVantageに問い合わせ、その結果をPandasのデータフレームに移動することができるようになりました。

```:aaa
pd.read_sql("SELECT * FROM dbc.dbcinfo", con = db_connection_string)
```

⑥	上記の構文は簡潔ですが、Vantageでデータを探索するだけであれば、退屈になることがあります。ここでは**ipython-sql**と **%%sql**の魔法を使って、SQLのみのセルを作成します。まずは必要なライブラリのインポートから始めます。

```:aaa
import sys
!{sys.executable} -m pip install ipython-sql teradatasqlalchemy
```
⑦	**ipython-sql**をロードし、データベース接続文字列を定義します。

```:aaa
%load_ext sql
%sql teradatasql://dbc:dbc@host.docker.internal/dbc
```

⑧	これで **%sql** と **%%sql** のマジックが使えるようになりました。例えば、テーブルの中のデータを探検したいとします。というセルを作ればいいのです。
```:aaa
%%sql
SELECT * FROM dbc.dbcinfo
```

⑨	データをPandasのフレームに移動させたい場合は、次のようになります。

```:aaa
result = %sql SELECT * FROM dbc.dbcinfo
result.DataFrame()
```

ipython-sql は他にも変数の置換、**matplotlib**によるプロット、ローカルcsvファイルへの書き込み、データベースへの戻しなど、多くの機能を提供しています。サンプルは [demo notebook](https://github.com/Teradata/quickstarts/blob/main/modules/ROOT/attachments/vantage-with-python-libraries.ipynb) を、完全なリファレンスは [ipython-sql github repo](https://github.com/catherinedevlin/ipython-sql/) を参照してください。



# Teradata Jupyter Dockerイメージ

Teradata Jupyter Docker イメージは、**jupyter/datascience-notebook Docker**イメージをベースに構築されています。Teradata SQLカーネル、Teradata PythonおよびRライブラリ、Jupyter拡張を追加し、Teradata Vantageと対話しながら生産性を向上させることができます。また、このイメージには、SQLカーネルとTeradataライブラリの使用方法を示すサンプルノートブックが含まれています。


SQLカーネルとTeradata Jupyter拡張は、SQLインターフェイスに多くの時間を費やす人々にとって便利なものです。多くの場合、Teradata Studioを使うよりも便利なノートブック体験とお考えください。Teradata Jupyter Dockerイメージは、Teradata Studioを置き換えようとするものではありません。すべての機能を備えているわけでもない。軽量でWebベースのインターフェイスを必要とし、ノートブックUIを楽しむ人のために設計されています。


Teradata Jupyter Dockerイメージは、ローカルでJupyterを実行したい場合や、カスタムJupyter Dockerイメージを実行できる場所がある場合に使用できます。以下の手順は、ローカルでイメージを使用する方法を示しています。
①	イメージを実行します

::: note info
オプション -e "accept_license=Y" を指定すると、Teradata Jupyter Extensions の[使用許諾](https://github.com/Teradata/jupyterextensions/blob/master/licensefiles/license.txt)に同意したことになります。
:::

```:aaa
docker volume create notebooks
docker run -e "accept_license=Y" -p :8888:8888 \
  -v notebooks:/home/jovyan/JupyterLabRoot \
  teradata/jupyterlab-extensions
```

②	Dockerのログには、必要なurlが表示されます。例えば、こんな感じです。
```:aaa
Starting JupyterLab ...
Docker Build ID = 3.2.0-ec02012022
Using unencrypted HTTP

Enter this URL in your browser:  http://localhost:8888?token=96a3ab874a03779c400966bf492fe270c2221cdcc74b61ed

* Or enter this token when prompted by Jupyter: 96a3ab874a03779c400966bf492fe270c2221cdcc74b61ed
* If you used a different port to run your Docker, replace 8888 with your port number
```

③	URLを開き、ファイルエクスプローラーで以下のノートブックを開いてください： **jupyterextensions → notebooks → sql → GettingStartedDemo.ipynb**.

④	Teradata SQL Kernelのデモをご覧ください。

画像1

# まとめ
このクイックスタートでは、Jupyter NotebookからTeradata Vantageに接続するためのさまざまなオプションについて説明しました。複数のTeradata PythonおよびRライブラリをバンドルしたTeradata Jupyter Dockerイメージについて学びました。また、SQLカーネル、データベースオブジェクトエクスプローラー、接続管理も提供されています。これらの機能は、SQLのインターフェイスに多くの時間を費やす場合に便利です。より伝統的なデータサイエンス・シナリオについては、スタンドアロンのTeradata Pythonドライバと、ipython sql拡張による統合を検討しました。


# さらに詳しく
・[Teradata Jupyter Extensions Website](https://teradata.github.io/jupyterextensions)
・[Teradata Vantage™ Modules for Jupyter Installation Guide](https://docs.teradata.com/r/KQLs1kPXZ02rGWaS9Ktoww/root)
・[Teradata® Package for Python User Guide](https://docs.teradata.com/r/1YKutX2ODdO9ppo_fnguTA/root)

#### Teradata Vantageへのお問合せ
[Teradata Vantage へのお問合せ](https://www.teradata.jp/About-Us/Contact)