DatabricksからOracleAutonomousにアクセスしてみた

# はじめに
***Databricksとは統合データ分析プラットフォームで、データの取得、ETL処理、DWH機能、分析、可視化、様々な言語(Python、Scala、R、SQL、Markdown)が使用できます。***


今回はDatabricksのCommunity EditionでAlwaysFreeのOracle Autonomous Databaseからデータを取得します。他のAWS、Azure、GCPのDatabricksでも可能となります。

## Databricksログイン

Community Editionのdatabricksにログインします。
![スクリーンショット 2022-08-28 092245.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/5b43fdf1-d42e-06a5-b638-270b56ce9930.png)

## クラスター作成

ログイン後トップ画面に遷移するので、左のメニューから「**Compute**」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/88539e00-dcb1-b4b2-17de-b891ae050465.png)

「**Create Cluster**」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/143c046c-c90b-273d-4849-4c852988bc32.png)

「**Cluster Name**」を入力して、後はデフォルトのまま「**Create Cluster**」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/383e9453-f445-bd2d-74e5-477325121d9a.png)

## クラスター内での使用モジュール設定

以下を参考にPythonでOracle Databaseにアクセス出来るcx_Oracleの使用を考えていましたが、エラーが発生してしまいます。そのためcx_oracleの後継で、Oracle Client不要で接続出来るpython-oracledbを使用します。

https://docs.microsoft.com/ja-jp/azure/databricks/kb/data-sources/use-cx-oracle-connect-server

![スクリーンショット 2022-08-28 092746.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/91060673-5397-1c39-83f2-8378db17074d.png)

クラスター作成完了後、「**Libraies**」をクリックして「**Install new**」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/456c245b-d3cf-aacb-6470-d05665bfab43.png)


Library Sourceを「**PyPI**」に選択し、Packageに「**oracledb**」を入力。「**Installボタン**」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/caf4edcc-f595-9d95-7ba4-0e313e928b10.png)

これでクラスター内にモジュールのインストールが完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/87dd5f5b-eb82-919b-26c9-33092319bd47.png)

## Notebook作成

左のメニューから「**Create**」をクリックし、「**Notebook**」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/cd464872-fb45-69f3-0d77-e757e536ce50.png)


Nameに「**ノートブック名**」を入力し、「**Create**」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/e821a731-f688-ffe1-8712-1c10feb257b5.png)

作成されたNotebookのコードに以下を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/0e144f41-7b42-59c5-fde5-e13caa42ecf2.png)


```
import oracledb

connection = oracledb.connect(user='',password='',dsn='')

with connection.cursor() as cursor:
    try:

        sql = """select systimestamp from dual"""
        for r in cursor.execute(sql):
            print(r)

    except oracledb.Error as e:
        error, = e.args
        print(error.message)
        print(sql)
        if (error.offset):
            print('^'.rjust(error.offset+1, ' '))
```

## Oracle Autonomous Database設定

Autonomous側の設定を行います。
「**Mutual TLS (mTLS) authentication**」の編集をクリックします。**OFF**にして「**変更の保存**」をクリックします。
![abcd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/e720acdf-1424-8f51-9793-5b616dc4e91e.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/f7a7d337-f000-babf-59a2-c24ac4f49282.png)

次に「**アクセス制御リスト**」の編集をクリックします。
「**IP表記法タイプ**」を「**CIDRブロック**」に選択し、「**値**」を「**0.0.0.0/0**」を入力して「**変更の保存**」をクリックします。

<font color="Red">この0.0.0.0/0はすべての通信を許可する設定になります。
開発・本番は指定のIPアドレスを指定して保護するように注意してください。</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/824a2893-a343-66ba-8865-d9b0df778997.png)

「**DB接続ボタン**」をクリックします。
![abcd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/52f50c54-b281-7869-63c0-db524177d069.png)


「**TLS認証**」を「**TLS**」に選択して、接続したい優先度の「**接続文字列**」のコピーをクリックして他に保存してきます。
![スクリーンショット 2022-08-28 102942.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/0309a729-e38a-4bc6-32c3-d8c4e6e18255.png)

## 実行

先ほどコピーした内容をdsnに張り付けて、接続するユーザー、パスワードを入力して▲をクリックして実行します。
![スクリーンショット 2022-08-28 103549.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/a7c27d40-679e-1dc0-ab4e-df7d849f6a41.png)

日付が取得出来れば成功です。
![スクリーンショット 2022-08-28 104032.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/14b664b4-7328-07c7-2b51-d25937fa0f4f.png)

# 参考にさせて頂いたサイト
https://blogs.oracle.com/opal/post/easy-way-to-connect-python-applications-to-oracle-autonomous-databases

https://dev.classmethod.jp/articles/python-oracledb-lambdapython-rds-for-oracle/


これで以上となります。
見て頂きありがとうございました。