LoginSignup
9
4

More than 3 years have passed since last update.

Oracle Cloud Infrastructure Data Scienceを使って、Oracle Autonomous Database(ADW)のデータにアクセスしてみる

Last updated at Posted at 2020-03-11

本記事の狙い

2020/2に、Oracle Cloud Infrastructure Data Science(OCI-Data Science)がリリースされました。
本記事では、実際にOCI-Data Scienceを使って、Oracle Autonomous Database(ADW)上のデータにクエリする手順を、実際に実施してみたいと思います。

参考文献

実施に参考になるリンク

その他、参考文献

手順

以下のような手順で実施します。
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のノートブック環境を構築、設定をします。
手順とおりに実施すれば、それほど難しくないのでは、と思います。

  1. Oracle Cloudの基本的な設定の後に、ノートブック環境を構築します。
  2. getting-started.ipynbを使って、ノートブック環境(JupyerLab)の初期作業を行います。

2.Oracle Autonomous Database(ADW)の構築

上記参考文献の「Autonomous Database(ADB,ADW,ATP)の作成とSQL Developerからの接続」を参考に、ADWを構築、設定をします。
今回は簡単なクエリを実施できればいいので、あまり難しく考えずに、「ADWの作成」を見ながら、ADWを作成します。「使用可能」のステータスまで10分ぐらいでしょうか。超簡単。
image.png

3.OCI-Data ScienceからADWに接続できるようにするための設定

OCI-Data Scienceの中には、/home/datascience/ads-examples 配下のディレクトリに、多くのサンプルノートブックファイルが存在します。
これらサンプルファイルで、基本的な使い方は大体網羅されていますが、今回はその中の一つ、ads_load_data_from_ADW_1.ipynb というサンプルファイルを使います。

image.png

このサンプルノートブックの順序に従ってやればできるようになっています。
実際やってみます。下記のa-hは、サンプルノートブック内記載の手順に準拠しています。

a.ADWのDB接続ボタンをクリック

まずは、OCI-Data ScienceとADWを接続設定します。
ADWのDB接続ボタンをクリックします。
image.png

b.ウオレットのダウンロード

ダウンロードボタンより、ウオレットをダウンロードします。
ウォレットためのパスワード指定を求められるので入力してダウンロードします。
image.png

c.ノートブック環境にフォルダ作成

ノートブック環境に、ウオレットをおく、フォルダを作成します。
 /home/datascience/block_storage 配下に新規ディレクトリ(下記の場合、MOADW)を作成します。
image.png

d.接続設定ファイルアップロード

ダウンロードしてきたzipファイルを解凍し、全てのファイルを、上記フォルダにアップロードします。
ノートブック環境であるJupyterLabのアップロードボタンを使ってアップロードします。
image.png

d.sqlnet.oraのMETHOD_DATAの変更

アップロードした、sqlnet.oraのMETHOD_DATAを、上記ディレクトリのパスに変更します。
image.png

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を確認します。
image.png

環境変数を読み込みます。

# 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、超簡単、超便利 !!

image.png

いよいよ、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()

各属性ごとに下記のような形で、特徴や値の分布が表示されます。
image.png

それぞれの属性の相関図も見ることもできます。
image.png

これらが、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の、対象サービスですので、ぜひ実際に使ってみることをおすすめします。

Let's Enjoy Data Science!

9
4
1

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
9
4