Superset で Oracle へ接続する
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 へアクセスし、ログインします。
ログイン後、画面右上の「+」をクリックし、[ Data ] - [ Connect database ]をクリックします。
表示された画面の「 Supported database 」をクリックすると接続可能なデータベースが表示されます。その中から Oracle を選択します。
「 Display Name 」へ名称を設定します。「 SQLAlchemy URI 」に「 oracle://<username>:<password>@<接続文字列> 」を入力します。
「 Test connection 」ボタンをクリックし、「 Connection looks good! 」と表示されれば設定完了です。
簡単な動作確認のため、メニューにある [ SQL ] - [ SQL Lab ] をクリックします。
画面左の Database で設定した接続が表示されていることを確認し、右側の入力エリアへ SQL 文を入力します。
「 RUN 」ボタンをクリックして、画面右下に取得したデータが表示されれば成功です。
ここまでで、 Oracle からデータを取得することができるようになりました。