2.2. スキーマオブジェクトの DDL メタデータ
テーブルとビューがスキーマの同じ namespace に存在する。インデックスはスキーマスコープオブジェクトとはみなされませんが、定義されたテーブルまたはビューに対してスコープ付けされます。手順と機能は別の namespace で定義されていますが、仮想手順言語で定義される機能は、関数と同じ名前の手順の両方として存在します。ドメインタイプはスキーマスコープではありません。それらは VDB 全体のスコープになります。
データ型
データ型の詳細は、SQL 文法の BNF の 単純なデータタイプ を参照してください。
外部テーブル
FOREIGN テーブルは、Oracle、Microsoft SQL Server などのソースデータベースの実際のリレーショナルデータベースの実際のリレーショナルデータベースを表すソーススキーマで定義されるテーブルです。リレーショナルデータベースの場合、既存のスキーマを自動インポートする必要がある場合に、Data Virtualization は VDB のデプロイメント時にデータベーススキーマ情報を自動的に取得できます。ただし、ユーザーは PHYSICAL スキーマでテーブルを明示的に定義したい場合や、カスタム変換機能でリレーショナルデータベース以外のデータをリレーショナルデータベースとして表現する場合は、以下の FOREIGN テーブルセマンティクスを使用できます。
例: 外部テーブルの作成(PHYSICAL モデルで作成)
外部テーブルの作成に関する詳細は、BNF for SQL grammar の CREATE TABLE を参照してください。
例: 外部テーブルの作成(PHYSICAL モデルで作成)
TABLE OPTIONS:(以下のオプションはよく知られており、定義されたその他のプロパティーは拡張メタデータとみなされます)
プロパティー | データタイプまたは許可される値 | 説明 |
---|---|---|
UUID | string | ビューの一意識別子。 |
CARDINALITY | int | コスト情報。テーブルの行数。計画の目的で使用されます。 |
更新可能 | 'TRUE' | 'FALSE' |
ビューの更新が許可されるかどうかを定義します。 | アノテーション | string |
ビューの説明。 | DETERMINISM | NONDETERMINISTIC, COMMAND_DETERMINISTIC, SESSION_DETERMINISTIC, USER_DETERMINISTIC, VDB_DETERMINISTIC, DETERMINISTIC |
COLUMN OPTIONS:(以下のオプションはよく知られており、その他のプロパティーは拡張メタデータとみなされます)。
プロパティー | データタイプまたは許可される値 | 説明 |
---|---|---|
UUID | string | 列の一意識別子。 |
NAMEINSOURCE | string | これが FOREIGN テーブルの列名である場合、この値はソースデータベースの列の名前を表します。省略すると、ソースに対するデータのクエリー時に列名が使用されます。 |
CASE_SENSITIVE | 'TRUE'|'FALSE' |
|
選択可能 | 'TRUE'|'FALSE' | この列がユーザークエリーから選択できる場合は TRUE。 |
更新可能 | 'TRUE'|'FALSE' | 列が updatable であるかを定義します。view/table が updatable の場合、デフォルトは true に設定されます。 |
署名あり | 'TRUE'|'FALSE' |
|
通貨 | 'TRUE'|'FALSE' |
|
FIXED_LENGTH | 'TRUE'|'FALSE' |
|
検索可能 | 'SEARCHABLE'|'UNSEARCHABLE'|'LIKE_ONLY'|'ALL_EXCEPT_LIKE' | 列の検索性。通常、データタイプにより指定されます。 |
MIN_VALUE |
| |
MAX_VALUE |
| |
CHAR_OCTET_LENGTH | integer |
|
アノテーション | string |
|
NATIVE_TYPE | string |
|
RADIX | integer |
|
NULL_VALUE_COUNT | Long | コスト情報。この列の NULLS 数。 |
DISTINCT_VALUES | Long | コスト情報。この列の一意の値の数。 |
列は NOT NULL、auto_increment、または DEFAULT の値とマークすることもできます。
大きな型の列は、精度/スケールなしで 10 進数または 10 進数の列を宣言できます。デフォルトは、半分スケールの精度に対する内部の最大値です。あるいは、デフォルトでスケールが 0 になる精度を使用します。
タイプタイムスタンプのコラムは、スケールなしで宣言できます。これは、デフォルトで内部最大の 9 分秒になります。
テーブルの制約
テーブル/ビューで制約を定義して、インデックスや他のテーブル/ビューへの関係を定義できます。この情報は、Data Virtualization オプティマイザーによってクエリーを計画するか、マテリアル化テーブルのインデックスを使用してデータへのアクセスを最適化します。
CONSTRAINTS は gitops で定義できるものと同じです。
CONSTRAINTs の例
テーブルの変更
ALTER TABLE ステートメントの完全な SQL 文法は、BNF for SQL 文法 の ALTER TABLE を参照してください。
ALTER コマンドを使用すると、列の追加、変更、削除、および任意の OPTIONS の値の変更、および制約の追加を行うことができます。以下の例は、ALTER コマンドを使用してテーブルオブジェクトを変更する方法を示しています。
ビュー
ビューは仮想テーブルです。ビューには、実際のテーブルなどの行と列が含まれます。ビューの列は、ソースまたは他のビューモデルの 1 つ以上の実際のテーブルのコラムです。また、複数の列または集約された列で構成される式を使用することもできます。列定義が view テーブルで定義されない場合は、AS
キーワードの後に定義されるビューの選択変換の展開された列から派生します。
データが 1 つのテーブルから送信されるかのように、関数、JOIN ステートメント、および WHERE 句をビューデータに追加できます。
現在、アクセスパターンは表示には意味がありませんが、文法で引き続き許可されます。ビューの他の制約も適用されません。内部マテリアルビューで指定されていない限り、それらをマテリアル化ターゲットテーブルに自動的に追加されます。ただし、アクセス以外のパターンビュー制約は、最適化やクライアントによる検出の関係を伝えるなど、他の目的でも便利です。
BNF - CREATE VIEW
プロパティー | データタイプまたは許可される値 | 説明 |
---|---|---|
マテリアル化 | 'TRUE'|'FALSE' | テーブルがマテリアル化されているかどうかを定義します。 |
MATERIALIZED_TABLE | 'table.name' | このビューが外部データベースにマテリアル化されている場合は、マテリアル化されたテーブルの名前を定義します。 |
例: ビューテーブルの作成(VIRTUAL スキーマで作成される)
列は変換クエリー(SELECT ステートメント)によって暗黙的に定義されることに注意してください。列はインラインでも定義できますが、定義した場合はプロパティーの変更のみが可能です。ADD または DROP の新規列は追加できません。
テーブルの変更
The BNF for ALTER VIEW, refer to ALTER TABLE(ALTER VIEW の BNF。ALTER TABLEを参照)
ALTER COMMAND を使用すると、VIEW の変換クエリーを変更できます。列 情報は変更できません。変換クエリーは有効である必要があります。
VIEW での INSTEAD OF のトリガー(VIEW の更新)
複数のベーステーブルを構成するビューは、レコードを挿入し、更新を適用し、テーブルの参照データを削除するために INSTEAD OF
トリガーを使用する必要があります。VIEW の UPDATABLE
OPTION が TRUE
に設定されている場合、一部の変換の複雑さに基づいて、ユーザーに INSTEAD OF TRIGGERS が自動的に提供されます。ただし、CREATE TRIGGER メカニズムを使用すると、デフォルトの動作を提供/上書きすることができます。
例: INSERT のビューでの INSTEAD OF トリガーの定義
更新の場合
例: UPDATE の View でトリガーではなく定義
更新すると、列の以前の値と新しい値にアクセスできます。更新手順の詳細は、「手順の更新」を参照してください。???
ソーステーブルでの AFTER トリガー
ソーステーブルには、変更データキャプチャーシステムによって報告される変更イベントを処理するために登録される一意の名前付きトリガーを含めることができます。
表示するのと同様に、AFTER insert は NEW グループを介して新しい値へのアクセスを提供し、AFTER delete は OLD グループ経由で以前の値へのアクセスを提供し、AFTER の更新により両方のアクセスが提供されます。
例: カスタマーでの AFTER トリガー
CREATE TRIGGER ON Customer AFTER INSERT AS FOR EACH ROW BEGIN ATOMIC INSERT INTO CustomerOrders (CustomerName, CustomerID) VALUES (NEW.Name, NEW.ID); END
CREATE TRIGGER ON Customer AFTER INSERT AS
FOR EACH ROW
BEGIN ATOMIC
INSERT INTO CustomerOrders (CustomerName, CustomerID) VALUES (NEW.Name, NEW.ID);
END
通常、操作ごとにハンドラーを定義します(INSERT/UPDATE/DELTE)。
更新手順の詳細は、「 更新手順」を参照してください。
手順/機能の作成
ユーザーは以下の機能のいずれかを定義できます。
- Source Procedure("CREATE FOREIGN PROCEDURE")
- ソースのストアドプロシージャー。
- Source Function("CREATE FOREIGN FUNCTION")
- データソースの機能に依存し、Data Virtualization エンジンの評価ではなく、Data Virtualization がソースにプッシュされる関数。
- 仮想手順(「CREATE VIRTUAL PROCEDURE」)
- ストアドプロシージャーと同様に、これは Data Virtualization の Procedure 言語を使用して定義され、Data Virtualization エンジンで評価されます。
- function/UDF("CREATE VIRTUAL FUNCTION")
- Teiid 手順言語を使用して定義できるユーザー定義の関数や、Java クラスによる実装の定義はできます。UDF の Java コードの作成に関する詳細は、『 Translator Development Guide 』の「 Support for user-defined functions(un-pushdown) 」を参照してください。
関数または手順 の詳細は、SQL 文法の BNF を参照してください。
変数引数
IN パラメーターだけを使用する代わりに、最後のオプション以外のパラメーターで VARIADIC を宣言して、手順が呼び出される際に 0 以上の回数を繰り返すことができます。
例: Vararg 手順
CREATE FOREIGN PROCEDURE proc (x integer, VARIADIC z integer) RETURNS (x string);
CREATE FOREIGN PROCEDURE proc (x integer, VARIADIC z integer)
RETURNS (x string);
FUNCTION OPTIONS:(以下はよく知られており、その他のプロパティーは拡張メタデータとみなされます)
プロパティー | データタイプまたは許可される値 | 説明 |
---|---|---|
UUID | string | 一意識別子 |
NAMEINSOURCE | これがソース機能である場合、物理ソースの名前(上記の論理名と異なる場合)になります。 | |
アノテーション | string | 関数/手順の説明 |
CATEGORY | string | 関数カテゴリー |
DETERMINISM | NONDETERMINISTIC, COMMAND_DETERMINISTIC, SESSION_DETERMINISTIC, USER_DETERMINISTIC, VDB_DETERMINISTIC, DETERMINISTIC | 仮想手順では使用されません |
NULL-ON-NULL | 'TRUE'|'FALSE' | |
JAVA_CLASS | string | UDF の場合にメソッドを定義する Java クラス |
JAVA_METHOD | string | 上記で定義された UDF 実装の Java メソッド名 |
VARARGS | 'TRUE'|'FALSE' | 関数の最後の引数をいつでも 0 に繰り返すことができることを示します。デフォルトは false です。VARIADIC パラメーターを使用する方が適切です。 |
AGGREGATE | 'TRUE'|'FALSE' | 関数がユーザー定義の集約機能であることを示します。集約固有のプロパティーを以下に示します。 |
NULL-ON-NULL、VARARGS、およびすべての AGGREGATE プロパティーは、関数としてマークされたソースの手順で使用できる有効なリレーショナルデータベースメタデータプロパティーでもあることに注意してください。
ソース固有の関数に基づく FOREIGN 関数を作成することもできます。データソースによって提供される関数を使用する外部関数の作成に関する詳細は、『 Translator Development guide』の「 Source supported functions 」を参照し てください。
.AGGREGATE 関数のオプション
プロパティー | データタイプまたは許可される値 | 説明 |
---|---|---|
分析 | 'TRUE'|'FALSE' |
集約関数のウィンドウが必要であることを示します。デフォルト値は |
ALLOW-ORDERBY | 'TRUE'|'FALSE' |
集約関数が ORDER BY 句を使用できることを示します。デフォルト値は |
ALLOWS-DISTINCT | 'TRUE'|'FALSE' |
aggregate 関数が |
DECOMPOSABLE | 'TRUE'|'FALSE' |
1 つの引数集約関数をデータのサブセットに対して agg(agg(x))として破棄できることを示します。デフォルト値は |
USES-DISTINCT-ROWS | 'TRUE'|'FALSE' |
集約関数がすべての行ではなく、個別の行を効果的に使用することを示します。デフォルト値は |
Teiid 手順言語を使用して定義される Virtual Function は集約機能できないことに注意してください。
JAR ライブラリーの指定: Teiid 手順の定義なしで UDF(仮想)関数を定義した場合は、Java での実装を反映する必要があります。Java ライブラリーを VDB への依存関係として設定する方法については、『 Translator Development Guide』の「 Support for User-Defined Functions 」を参照し てください。
PROCEDURE OPTIONS:(以下のオプションはよく知られており、定義されたその他のプロパティーは拡張メタデータとみなされます)
プロパティー | データタイプまたは許可される値 | 説明 |
---|---|---|
UUID | string | 一意識別子 |
NAMEINSOURCE | string | ソースの場合 |
アノテーション | string | 手順の説明 |
UPDATECOUNT | int | この手順が基礎となるソースを更新する場合、更新数が >1 の場合に、実行用に XA プロトコルが適用されます。 |
例: 仮想手順の定義
仮想手順および仮想手順言語の詳細は、「仮想手順」および「 手順 言語」を参照 し てください。
例: 仮想機能の定義
手順列は NOT NULL としてマークすることも、DEFAULT の値で指定することもできます。ソース手順でパラメーターをデフォルトに可能で、Data Virtualization でデフォルト値を指定しない場合は、パラメーターでエクステンションプロパティー teiid_rel:default_handling を省略するように設定される必要があります。
単一の RESULT パラメーターしか存在できず、out
パラメーターである必要があります。RESULT パラメーターは、Stable 以外の RETURNS 型が 1 つ必要です。両方が宣言された場合は、例外が発生します。他方が正確ではありません。「RETURNS type」は、特に関数のための構文は短くなりますが、パラメーターの形式は追加のメタデータ(標準名、拡張メタデータ、戻り値テーブルの定義も定義)に便利です。
return パラメーターは、引数リストに表示される場所にかかわらず、ランタイム時に手順の最初のパラメーターとして扱われます。これは、"? = EXEC …" 形式で割り当てが想定される Data Virtualization および JDBC 呼び出しセマンティクスと一致します。
.relational 拡張 OPTIONS:
プロパティー | データタイプまたは許可される値 | 説明 |
---|---|---|
native-query | パラメーター化された文字列 | 関数と手順の両方に適用されます。標準の接頭辞形式ではなく、関数構文の代わりに括弧を使用します。詳細は「 Translators でパラメーター化 可能なネイティブクエリー 」を参照してください。 |
non-prepared | boolean | native-query オプションを使用して JDBC 手順に適用されます。true の場合、PreparedStatement はネイティブクエリーの実行には使用されません。 |
例: ネイティブクエリー
CREATE FOREIGN FUNCTION func (x integer, y integer) RETURNS integer OPTIONS ("teiid_rel:native-query" '$1 << $2');
CREATE FOREIGN FUNCTION func (x integer, y integer)
RETURNS integer OPTIONS ("teiid_rel:native-query" '$1 << $2');
例: ネイティブクエリーのシーケンス
CREATE FOREIGN FUNCTION seq_nextval () RETURNS integer OPTIONS ("teiid_rel:native-query" 'seq.nextval');
CREATE FOREIGN FUNCTION seq_nextval ()
RETURNS integer
OPTIONS ("teiid_rel:native-query" 'seq.nextval');
ソース関数表現を使用して、シーケンス機能を公開します。
拡張メタデータ
カスタムトランスフォーマーの場合、エクステンションメタデータを定義するとき、テーブル/ビュー/手順/列のプロパティーは必要なものになります。プロパティーに関連する内容を示す一貫性のある接頭辞を使用することが推奨されます。teiid_ で始まる接頭辞は、Data Virtualization で使用するために予約されます。プロパティーキーはランタイム API 経由でアクセスする場合は大文字と小文字を区別しませんが、SYS.PROPERTIES にアクセスする場合に大文字と小文字が区別されます。
カスタムプレフィックスまたは namespace への SET NAMESPACE の使用が許可されなくなりました。
CREATE VIEW MyView (...) OPTIONS ("my-translator:mycustom-prop" 'anyvalue')
CREATE VIEW MyView (...)
OPTIONS ("my-translator:mycustom-prop" 'anyvalue')
プレフィックス | 説明 |
---|---|
teiid_rel | リレーショナルデータベースの拡張。include 関数およびネイティブクエリーメタデータを使用 |
teiid_sf | Salesforce エクステンション。 |
teiid_mongo | MongoDB エクステンション |
teiid_odata | OData エクステンション |
teiid_accumulo | Accumulo 拡張 |
teiid_excel | Excel エクステンション |
teiid_ldap | LDAP 拡張 |
teiid_rest | REST エクステンション |
teiid_pi | PI データベースの拡張 |