#本記事の狙い
2020/2に、Oracle Cloud Infrastructure Data Science(OCI-Data Science)がリリースされました。
本記事では、実際にOCI-Data Scienceを使って、Oracle Autonomous Database(ADW)上のデータにクエリする手順を、実際に実施してみたいと思います。
#参考文献
###実施に参考になるリンク
- Oracle Cloud Infrastructure Data Science(OCI-Data Science)を使ってみよう
- Autonomous Database(ADB,ADW,ATP)の作成とSQL Developerからの接続
- SQL Developer Webによるローカル・ファイルからのデータのロード
- Qiita記事:SQLAlchemy から Pandas にデータを読み込む
###その他、参考文献
- 【翻訳記事】:What Is Oracle Cloud Infrastructure Data Science?
- OCI-Data Science 公式ドキュメント
- Oracle Accelerated Data Science SDK (ADS) 公式ドキュメント
#手順
以下のような手順で実施します。
1.OCI-Data Scienceの設定
2.Oracle Autonomous Database(ADW)の構築
3.OCI-Data ScienceからADWに接続できるようにするための設定
4.実際にOCI-Data Scienceから、ADW上のデータにクエリする
###1.OCI-Data Scienceの設定
上記参考文献の「Oracle Cloud Infrastructure Data Science(OCI-Data Science)を使ってみよう」を参考にOCI-Data Scienceのノートブック環境を構築、設定をします。
手順とおりに実施すれば、それほど難しくないのでは、と思います。
- Oracle Cloudの基本的な設定の後に、ノートブック環境を構築します。
- getting-started.ipynbを使って、ノートブック環境(JupyerLab)の初期作業を行います。
###2.Oracle Autonomous Database(ADW)の構築
上記参考文献の「Autonomous Database(ADB,ADW,ATP)の作成とSQL Developerからの接続」を参考に、ADWを構築、設定をします。
今回は簡単なクエリを実施できればいいので、あまり難しく考えずに、「ADWの作成」を見ながら、ADWを作成します。「使用可能」のステータスまで10分ぐらいでしょうか。超簡単。
###3.OCI-Data ScienceからADWに接続できるようにするための設定
OCI-Data Scienceの中には、/home/datascience/ads-examples 配下のディレクトリに、多くのサンプルノートブックファイルが存在します。
これらサンプルファイルで、基本的な使い方は大体網羅されていますが、今回はその中の一つ、ads_load_data_from_ADW_1.ipynb というサンプルファイルを使います。
このサンプルノートブックの順序に従ってやればできるようになっています。
実際やってみます。下記のa-hは、サンプルノートブック内記載の手順に準拠しています。
a.ADWのDB接続ボタンをクリック
まずは、OCI-Data ScienceとADWを接続設定します。
ADWのDB接続ボタンをクリックします。
b.ウオレットのダウンロード
ダウンロードボタンより、ウオレットをダウンロードします。
ウォレットためのパスワード指定を求められるので入力してダウンロードします。
c.ノートブック環境にフォルダ作成
ノートブック環境に、ウオレットをおく、フォルダを作成します。
/home/datascience/block_storage 配下に新規ディレクトリ(下記の場合、MOADW)を作成します。
d.接続設定ファイルアップロード
ダウンロードしてきたzipファイルを解凍し、全てのファイルを、上記フォルダにアップロードします。
ノートブック環境であるJupyterLabのアップロードボタンを使ってアップロードします。
d.sqlnet.oraのMETHOD_DATAの変更
アップロードした、sqlnet.oraのMETHOD_DATAを、上記ディレクトリのパスに変更します。
e.環境変数:TNS_ADMINの設定
環境変数:TNS_ADMINを、上記ディレクトリに設定します。
各自の環境のパスに変更後、ノートブック上でShift+Returnで実行します。
# Replace with your TNS_ADMIN value here:
%env TNS_ADMIN=/home/datascience/block_storage/MOADW
f.環境変数:ADW_SIDの設定
環境変数:ADW_SIDを、tnsnames.oraのSIDに変更します。
tnsnames.oraを確認します。
環境変数を読み込みます。
# Replace with your SID name here:
%env ADW_SID=moadw_high
g.環境変数:ユーザー名とパスワードの設定
ADWにアクセスできる、ユーザー名/パスワードを入力します。
# Replace with your ADW user name and password here:
%env ADW_USER=<ADWのユーザー名>
%env ADW_PASSWORD=<ADWのユーザーのパスワード>
h.接続テスト
最後に接続テストを行います。
ADWに接続、Disconnectedすれば成功です。
!echo exit | sqlplus $ADW_USER/$ADW_PASSWORD@$ADW_SID
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Mar 10 05:45:33 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Tue Mar 10 2020 04:33:50 +00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.5.0.0.0
SQL> Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.5.0.0.0
以上で、OCI-Data ScienceとADWを接続設定設定は終了です。
これで、OCI-Data ScienceからADWにアクセスができるようになっています。
もしエラーが出る場合は、特に以下を確認ください。
- ADWは正常に起動しているか、パスワードなどは間違いないか。
- 上記a-gはきちんと設定されているか。
- getting-started.ipynbは、エラーなく実行できているか。特に「Testing the Access to our API」まで正常に設定できているか。
###4.実際にOCI-Data Scienceから、ADW上のデータにクエリする
####0.SQL Developer Webを使ったサンプルデータのロード
実際にクエリアクセスをする前に、ADWにサンプルデータを入力します。
今回は下記のようなサンプルデータをローカルPCでExcelで作り、SQL Developer Webを使って、ADWにテーブル作成とデータロードしました。
SQL Developer Webの使い方は、上記参考文献、「SQL Developer Webによるローカル・ファイルからのデータのロード」を参考にしてください。
SQL Developer Web、超簡単、超便利 !!
いよいよ、OCI-Data ScienceからADW上のデータにクエリしますが、これにはいくつかの方法があります。
今回は、上記設定手順も記載されているサンプルノートブックads_load_data_from_ADW_1.ipynb に記載されている、1−3の方法を実施します。
**
1.Load an ADW database Table as an ADSDataset object
2.Query data from ADW using pandas
3.Query data from ADW using cx_Oracle
####1.Load an ADW database Table as an ADSDataset object
では実際にADW上のデータにOCI-Data Scienceからアクセスしてみたいと思います。
1つ目の方法は、ADSのDatasetFactoryクラスを使って、ADWのデータをクエリし、ADSDatasetにロードする方法です。
ADSとは、OCI-Data Scienceに含まれる、独自のPythonライブラリです。詳細は、参考文献のADSのドキュメントを参考にしてください。
まずは必要なライブラリをインポートします。
%load_ext autoreload
%autoreload 2
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
import pandas as pd
import logging
import os
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.INFO)
from ads.dataset.factory import DatasetFactory
接続に必要なURIを設定します。
uri=f'oracle+cx_oracle://{os.environ["ADW_USER"]}:{os.environ["ADW_PASSWORD"]}@{os.environ["ADW_SID"]}'
Table名と、Indexを指定し、データをロードします。
table="PURCHASE_ITEM"
index_col="cust_id"
ds = DatasetFactory.open(uri, format="sql", table=table, index_col=index_col)
確認してみます。
ds.head()
でもいいのですが、ADSにはshow_in_notebook
という便利な可視化ライブラリがあるので、こちらでざっと属性を見てみます。
ds.show_in_notebook()
各属性ごとに下記のような形で、特徴や値の分布が表示されます。
これらが、ds.show_in_notebook()
の、一行のコマンドでできてしまう!
超便利!
####2.Run a SQL query on your ADW database using SQLAlchemy and Pandas
次のサンプルは、pandasとsqlalchemyを使って、ADWから読み込む方法です。
参考文献「SQLAlchemy から Pandas にデータを読み込む」も参考ください。
from sqlalchemy import create_engine
engine = create_engine(uri)
ds_01 = pd.read_sql('SELECT * from PURCHASE_ITEM', con=engine)
read_sql_query
を使って、where
句を使うこともできます。
ds_02=pd.read_sql_query(
'''
SELECT cust_id, age from PURCHASE_ITEM
'''
, uri)
pandasのDataFrameを、ADSのDataframeに変換することもできます。
サンプルノートブックads_load_data_from_ADW_1.ipynbには、DatasetFactory.open()
を使ったサンプルがのっていますが、
ds_03 = DatasetFactory.open(ds_02)
DatasetFactory.from_dataframe()
を使うこともできます。
これは、参考文献のADSのドキュメントにのっていました。
ds_03 = DatasetFactory.from_dataframe(ds_02)
####3.Query data from ADW using cx_Oracle
cx_ORACLEを使ってクエリを実施することもできます。
import cx_Oracle
connection = cx_Oracle.connect(os.environ["ADW_USER"], os.environ["ADW_PASSWORD"], os.environ["ADW_SID"])
cursor = connection.cursor()
results = cursor.execute("""
SELECT * from PURCHASE_ITEM
""")
data = results.fetchall()
df = pd.DataFrame(np.array(data))
ds_04 = DatasetFactory.from_dataframe(df)
#終わりに
今回は、OCI-Data Scienceにサンプルとして含まれる、ads_load_data_from_ADW_1.ipynb をベースに、OCI-Data ScienceからADWにクエリしてみましたが、それ以外にも方法はあります。
また、ADSを使って、ADW上のデータからモデル生成をしたり、推論した結果をADW上のデータにInsertする方法も、サンプルノートブックや、ADSのドキュメントの「Loading Data」に記載しているので参考にしてみてください。
それ以外にも、AWSのS3上のデータからOCI-Data Scienceにデータをロードする方法も記載されています。
OCI-Data Scienceは、最大30日間300$分の無償クレジットが使えるOracle Free Trialの、対象サービスですので、ぜひ実際に使ってみることをおすすめします。