Spotfire内でIronPythonスクリプトからODBCを経由してTDV(TIBCO Data Virtualizationの略称)へ接続してデータを書き込む方法について説明します。
動作環境
- Spotfire Server 12.0.X LTS
- Spotfire Analyst 12.0.X LTS
- TIBCO Data Virtualization 8.7.0
動作要件
- TDV接続用ODBCドライバを事前に動作端末にインストールすること
- TIB_tdv_drivers_8.7.0_all.zip
特に、
- Analystから利用する場合にはすべての対象Analyst動作端末にドライバをインストールしてください。
- ブラウザ(Consumer)から利用する場合にはWeb Playerサーバ端末にドライバをインストールしてください。
- Automation Servicesジョブから利用する場合にはAutomation Servicesサーバ端末にドライバをインストールしてください。
TDV接続用ODBCドライバのインストール
以下の手順で動作端末にTDV接続用ODBCドライバをインストールしておいてください。
- ドライバ配布ファイル(TIB_tdv_drivers_8.7.0_all.zip)を解凍します。
- 解凍後に以下のファイルを右クリックして「管理者権限として実行」を実施してください。
- <TIB_tdv_drivers_8.7.0_all.zipの解凍先>\apps\odbc\win64\CsOdbcInstall87_x64.exe
- インストール画面が以下のように表示され、「はい」を押して続行します。
- 以下の画面が表示され、インストールが完了したことを示します。
- OSの「ODBC データソース アドミニストレーター (64ビット)」を起動して、ドライバ「TIBCO(R) Data Virtualization 8.7」が正しくインストールされていることを確認ください。
TDV側の設定
TDV側では事前に書き込み先のテーブルを準備する必要があります。
手順としては、TDVにデータソースを追加する場合と同じです。
- 物理データベースを参照するデータソースを作成
- データソースに指定したDB認証ユーザーにはDBへの書き込み権限が必要です。
- データベース内のテーブルをデータソースに追加
- データベース・サービスを作成し、上記のテーブルを公開する
実施後の例は以下になります。
IronPythonスクリプトのコード例
Spotfire内で分析を編集し、以下のサンプルコードのようにIronPythonスクリプトを作成します。
1.まずはODBC接続に必要な.NET FrameworkのAPIをインポートします。
import clr, sys
clr.AddReference('System.Data')
from System.Data.Odbc import OdbcConnection, OdbcType
2.次に、TDVへの接続情報を指定します。
connStr = 'Driver={TIBCO(R) Data Virtualization 8.7};Server=localhost;Port=9401;User=admin;Password=spotfire;domain=composite;dataSource=dms;'
conn = OdbcConnection(connStr)
TDVへ接続するには以下の接続情報を指定する必要があります。
・Driver:ドライバの名前、前述の「ODBC データソース アドミニストレーター (64ビット)」で表示されている名前を指定すること
・Server:TDVサーバのホスト名、IPアドレスまたはFQDN
・Port:TDVサービスポート番号(JDBC/ODBC/ADO.NET接続用ポート番号、通常は「9401」)
・User:TDV認証ユーザー名
・Password:TDV認証ユーザーのパスワード
・domain:ドメイン名、通常は「composite」
・dataSource:TDV側で公開されているデータソース・サービスの名前
※接続情報の詳細については参考資料の「P101、Defining an ODBC Client using a Connection String」部分をご参照ください。
3.最後に、TDVへの接続を確立してデータの書き込み(本例はINSERT)を実施します。
SQL文、パラメターのデータ型などはTDV側テーブルのカラム構成に合わせて指定してください。
try:
conn.Open()
cmd = conn.CreateCommand()
cmd.CommandText = 'insert into "public"."オフィス用品2007年" ("管理ID","売上","顧客名","注文日") values(?,?,?,?)'
cmd.Parameters.Add("",OdbcType.Int).Value = 1234
cmd.Parameters.Add("",OdbcType.Double).Value = 12.34
cmd.Parameters.Add("",OdbcType.NVarChar).Value = 'abc'
cmd.Parameters.Add("",OdbcType.Date).Value = '2023-01-02'
cmd.ExecuteNonQuery()
print 'done'
except:
print "Unexpected error:", sys.exc_info()[0]
conn.Close()
raise
# end
4.上記のスクリプトを実行した後にはTDV内でデータが正しく挿入されていることを確認できます。
制限事項
TDVに対するINSERT処理は一部のデータソースにのみサポートされております。
※詳細については参考資料の「P71、TDV supports INSERT only for the following data sources. 」部分をご参照ください。
参考資料
https://docs.tibco.com/pub/tdv/8.7.0/doc/pdf/TIB_tdv_8.7.0_ClientInterfacesGuide.pdf
- P101、Defining an ODBC Client using a Connection String
https://docs.tibco.com/pub/tdv/8.7.0/doc/pdf/TIB_tdv_8.7.0_ReferenceGuide.pdf
- P71、TDV supports INSERT only for the following data sources.