Superset で Oracle へ接続する

メモ:  Category:ubuntu

Superset から Oracle へ接続できるようデータベースドライバーをインストールします。

Superset では、接続するデータベース エンジンごとに Python の DB-API database driver と SQLAlchemy dialect が必要になります。

Oracle については、 SQLAlchemy でサポートされているため個別のインストールは必要ありません。

python-oracledb をインストールする

Superset のドキュメントに Oracle と接続するには python-oracledb をインストールするよう記載があります。

次のように python-oracledb をインストールします。

(venv) superset@host:~/superset$ pip install oracledb

以前は、 cx_Oracle が Oracle 用のドライバーだったのですが、 cx_Oracle は 8.3.0 が最終バージョンで python-oracledb に置き換わったようです。ドキュメント通り python-oracledb をインストールしたのですが、 Superset で使われている SQLAlchemy が 1.4.54 のため次のように設定ファイルに追加する必要があります。

これは、 python-oracledb が cx_Oracle の最終バージョンである 8.3.0 として扱われるよう設定しています。

※python-oracledb は、 Oracle Client を必要としない Thin モードで接続できます。

echo 'import sys
import oracledb
oracledb.version = "8.3.0"
sys.modules["cx_Oracle"] = oracledb
import cx_Oracle' >> ~/superset_config/superset_config.py

次に Oracle への接続に必要な tnsnames.ora を作成します。

echo 'oradb = (description=(address=(protocol=tcp)(port=1521)(host=x.x.x.x))(connect_data=(service_name=xxxx.world)))' > $HOME/superset_config/tnsnames.ora

作成した tnsnames.ora を参照できるようユニットファイルに環境変数 TNS_ADMIN を追加します。

[Unit]
Description=Apache Superset
After=network.target

[Service]
User=superset
Group=supersetgrp
WorkingDirectory=/home/superset/superset
Environment="PATH=/home/superset/superset/venv/bin"
Environment="SUPERSET_CONFIG_PATH=/home/superset/superset_config/superset_config.py"
Environment="FLASK_APP=superset"
Environment="TNS_ADMIN=/home/superset/superset_config/"
ExecStart=/home/superset/superset/venv/bin/gunicorn --workers 3 --bind 0.0.0.0:8088 "superset.app:create_app()"
Restart=always
StandardOutput=append:/var/log/superset/superset.log
StandardError=append:/var/log/superset/superset-error.log

[Install]
WantedBy=multi-user.target

daemon-reload でユニットファイルの設定を反映し、 Superset を再起動します。

$ sudo systemctl daemon-reload
$ sudo systemctl restart superset

ここまでで、環境構築は完了です。

Oracle へ接続する

ブラウザーから Superset へアクセスし、ログインします。

Superset ログイン

ログイン後、画面右上の「+」をクリックし、[ Data ] - [ Connect database ]をクリックします。

Superset Connect database

表示された画面の「 Supported database 」をクリックすると接続可能なデータベースが表示されます。その中から Oracle を選択します。

Superset Choosea a database

「 Display Name 」へ名称を設定します。「 SQLAlchemy URI 」に「 oracle://<username>:<password>@<接続文字列> 」を入力します。

Superset Oracle 接続設定

「 Test connection 」ボタンをクリックし、「 Connection looks good! 」と表示されれば設定完了です。

Superset Oracle 接続設定

簡単な動作確認のため、メニューにある [ SQL ] - [ SQL Lab ] をクリックします。

Superset SQL Lab

画面左の Database で設定した接続が表示されていることを確認し、右側の入力エリアへ SQL 文を入力します。

「 RUN 」ボタンをクリックして、画面右下に取得したデータが表示されれば成功です。

Superset Oracle 接続確認

ここまでで、 Oracle からデータを取得することができるようになりました。

bluenote by BBB