Teiid Server に SQL クエリーを投げる

作成日:2016.05.05

このページでは VDB の配備(deploy)が終わった Teiid Server にクライアントから SQL クエリーを投げる方法を説明する。 Teiid Server に SQL クエリーを実行させる方法は AdminShell を使う方法と JDBC を使う方法の 2 種類がある。 AdminShell を使う方法は 2章 で、JDBC を使う方法は 3 章 で紹介する。

Teiid に関する他のページはTeiid Data Virtualization の覚え書きのインデックスからたどれる。


更新履歴
(2016.05.05) 作成。


目次

1. 準備

Teiid Server に SQL クエリーを投げるためには、Teiid Server へ VDB の配備を済ませる必要がある。 Teiid Server のインストールはTeiid のインストールメモを、データソースへ接続し VDB を配備するまではTeiid からデータソースへ接続するを参考にしておくこと。 VDB の配備後は Teiid Designer は不要なので、Teiid Server だけを起動する。 Teiid のインストールメモの 3.5節を参考に Teiid Server を起動する。

前提として Teiid Server は 10.20.230.16 で稼動し、管理ユーザーとして admin というユーザーが登録されているとする。 admin のパスワードは admin とする。 Teiid のインストールメモの 3.2節を参照のこと。

また Teiid Server には "Benchmark" という VDB が登録されているとする。 "Benchmark" には "MySqlDbt3" と "PostgreSqlDbt3" という 2 種類のモデルが存在しているとする。 それぞれのモデルの下にテーブルが存在する。

2. AdminShell

Teiid AdminShell は Teiid Server を外部から制御してデータソースや VDB の登録を行うためのツールである。 Groovy を AdminShell を使って SQL クエリーを投げることもできる。

2.1 AdminShell のインストール

Teiid のインストールメモの 2.1節 で teiid-x.y.z-adminshell-dist.zip というファイルをダウンロードしたが、これを適当なディレクトリに展開する。 すると teiid-adminshell-x.y.z というディレクトリができる。 展開したディレクトリの直下にできた adminshell.sh が実行コマンドになる。

2.2 登録された VDB の表示

AdminShell を使い Teiid Server に登録された VDB を表示してみる。 "Benchmark" が登録されているのが表示されるはずである。

connectAsAdmin("10.20.230.16", 9999, "admin", "admin", "conn1");

println getVDBs();

disconnect();

これを実行すると以下のように表示される。

$ ./adminshell.sh --color=false
groovy:000> connectAsAdmin("10.20.230.16", 9999, "admin", "admin", "conn1");
===> null
groovy:000> println getVDBs();
[Benchmark.1[MySqlDbt3{MySqlDbt3=MySqlDbt3, mysql5, MySqlDbt3_DS}, PostgreSqlDbt3{PostgreSqlDbt3=PostgreSqlDbt3, postgresql, PostgreSqlDbt3_DS}]]
===> null
groovy:000> disconnect();
===> null

Benchmark.1 の前半 "Benchmark" は VDB 名となる。 ピリオド(.)の後の 1 はバージョン番号を示す。 VDB ファイルをアップデートする場合は、バージョン番号を 2 → 3 と増やしてデプロイすることになり、Benchmark.2Benchmark.3 のように番号が増えてゆく。

adminshell.sh につけた --color=false オプションは文字のカラーリングを抑止してくれる。

2.3 VDB への接続

VDB 名が分かれば Teiid Server へコネクションを張る。 今度は connectAsAdmin を使わずに connect を使う。

sql = connect("jdbc:teiid:Benchmark@mm://10.20.230.16:31000", "user", "user");

// Q1: システムテーブルをリスト表示
sql.eachRow("select * from sys.tables") { println "${it}" };

// Q2: 実際のコマンド
sql.eachRow("select count(*) from PostgreSqlDbt3.lineitem") { println "${it}" };

// Q3: update, insert, delete 
sql.execute(<sql command>);

connect によって Teiid Server の VDB とのコネクションを張る。 connect の第一引数には JDBC の接続 URL を記述する。

connect の第二・第三引数はTeiid のインストールメモの 3.2節で登録したアプリケーションユーザーのユーザー名とパスワードを並べる。

connect が成功した場合、戻り値の sql を使って実際の SQL クエリーを実行することができる。

Q1 は Teiid のシステムスキーマの一つシステムテーブルを表示させている。 出力の一部を抜粋すると以下のようになる。

groovy:000> sql.eachRow("select * from sys.tables") { println "${it}" };
[VDBName:Benchmark, SchemaName:MySqlDbt3, Name:customer, Type:Table, NameInSource:`dbt3`.`customer`, IsPhysical:true, SupportsUpdates:true, UID:mmuuid:6ce9e26c-f80c-498b-bec1-af6a6f053ebc, Cardinality:-1, Description:[null], IsSystem:false, IsMaterialized:false, OID:[null]]

VDB のモデル名が SQL のスキーマとなっている。 もしテーブルにアクセスしたい場合は MySqlDbt3.customer のようにピリオド(.)で区切ってスキーマ.テーブル名の形で指定することになる。

Teiid のサポートするその他のシステムテーブルはここで確認できる。

Q2 では VDB 内のテーブルにアクセスしている。

3. JDBC

Teiid Server へ JDBC へアクセスするには JDBC ドライバーが必要になる。 Teiid のインストールメモの 2.1節 で teiid-x.y.z-jdbc.jar というファイルをダウンロードしたが、これを適当なディレクトリにおいておく。

Teiid Server への接続クライアントプログラムの例を TeiidClient.java とする。

これをコンパイルする。

javac -classpath .:/path/teiid-x.y.z-jdbc.jar TeiidClient.java

第一引数に SQL を渡して実行する。

java -classpath .:/path/teiid-x.y.z-jdbc.jar TeiidClient "select * from sys.tables"
java -classpath .:/path/teiid-x.y.z-jdbc.jar TeiidClient "select count(*) from PostgreSqlDbt3.lineitem"

INSERT/DELETE/UPDATE、トランザクション、プリペアド・ステートメントなどの機能も使うことが可能だが、記述方法は他の JDBC の解説を参考にして欲しい。

4. 補足

JDBC を用いれば Teiid Server がサポートしている全機能を呼び出すことができるが、Teiid からデータソースへ接続する の流れに沿った設定では、VDB 経由のテーブルに対する更新の許可と分散トランザクションが有効になっていない。

Teiid Desinger を使わずに Teiid Server を運用するを参照のこと。

コメント

トラックバック   [Trackback URL: http://www.nminoru.jp/cgi-bin/tb.cgi/teiid__teiid-exec-sql-query]
コメントを書き込む

TOP    掲示板    戻る
Written by NAKAMURA Minoru, Email: nminoru atmark nminoru dot jp, Twitter:@nminoru_jp