2.2. スキーマオブジェクトの DDL メタデータ


テーブルとビューがスキーマの同じ namespace に存在する。インデックスはスキーマスコープオブジェクトとはみなされませんが、定義されたテーブルまたはビューに対してスコープ付けされます。手順と機能は別の namespace で定義されていますが、仮想手順言語で定義される機能は、関数と同じ名前の手順の両方として存在します。ドメインタイプはスキーマスコープではありません。それらは VDB 全体のスコープになります。

データ型

データ型の詳細は、SQL 文法の BNF の 単純なデータタイプ を参照してください。

外部テーブル

FOREIGN テーブルは、Oracle、Microsoft SQL Server などのソースデータベースの実際のリレーショナルデータベースの実際のリレーショナルデータベースを表すソーススキーマで定義されるテーブルです。リレーショナルデータベースの場合、既存のスキーマを自動インポートする必要がある場合に、Data Virtualization は VDB のデプロイメント時にデータベーススキーマ情報を自動的に取得できます。ただし、ユーザーは PHYSICAL スキーマでテーブルを明示的に定義したい場合や、カスタム変換機能でリレーショナルデータベース以外のデータをリレーショナルデータベースとして表現する場合は、以下の FOREIGN テーブルセマンティクスを使用できます。

例: 外部テーブルの作成(PHYSICAL モデルで作成)

CREATE FOREIGN TABLE {table-name} (
    <table-element> (,<table-element>)*
    (,<constraint>)*
) [OPTIONS (<options-clause>)]


<table-element> ::=
    {column-name} <data-type> <element-attr> <options-clause>

<data-type> ::=
    varchar | boolean | integer | double | date | timestamp .. (see Data Types)

<element-attr> ::=
    [AUTO_INCREMENT] [NOT NULL] [PRIMARY KEY] [UNIQUE] [INDEX] [DEFAULT {expr}]

<constraint> ::=
    CONSTRAINT {constraint-name} (
        PRIMARY KEY <columns> |
        FOREIGN KEY (<columns>) REFERENCES tbl (<columns>)
        UNIQUE <columns> |
        ACCESSPATTERN <columns>
        INDEX <columns>

<columns> ::=
    ( {column-name} [,{column-name}]* )

<options-clause> ::=
    <key> <value>[,<key>, <value>]*

外部テーブルの作成に関する詳細は、BNF for SQL grammarCREATE TABLE を参照してください。

例: 外部テーブルの作成(PHYSICAL モデルで作成)

CREATE FOREIGN TABLE Customer (
    id integer PRIMARY KEY,
    firstname varchar(25),
    lastname varchar(25),
    dob timestamp);

CREATE FOREIGN TABLE Order (
    id integer PRIMARY KEY,
    customerid integer OPTIONS(ANNOTATION 'Customer primary key'),
    saledate date,
    amount decimal(25,4),
    CONSTRAINT CUSTOMER_FK FOREIGN KEY(customerid) REFERENCES Customer(id)
 ) OPTIONS(UPDATABLE true, ANNOTATION 'Orders Table');

TABLE OPTIONS:(以下のオプションはよく知られており、定義されたその他のプロパティーは拡張メタデータとみなされます)

Expand
プロパティーデータタイプまたは許可される値説明

UUID

string

ビューの一意識別子。

CARDINALITY

int

コスト情報。テーブルの行数。計画の目的で使用されます。

更新可能

'TRUE'

'FALSE'

ビューの更新が許可されるかどうかを定義します。

アノテーション

string

ビューの説明。

DETERMINISM

NONDETERMINISTIC, COMMAND_DETERMINISTIC, SESSION_DETERMINISTIC, USER_DETERMINISTIC, VDB_DETERMINISTIC, DETERMINISTIC

images/create_column.png

COLUMN OPTIONS:(以下のオプションはよく知られており、その他のプロパティーは拡張メタデータとみなされます)。

Expand
プロパティーデータタイプまたは許可される値説明

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 オプティマイザーによってクエリーを計画するか、マテリアル化テーブルのインデックスを使用してデータへのアクセスを最適化します。

images/constraint.png

CONSTRAINTS は gitops で定義できるものと同じです。

CONSTRAINTs の例

CREATE FOREIGN TABLE Orders (
    name varchar(50),
    saledate date,
    amount decimal,
    CONSTRAINT CUSTOMER_FK FOREIGN KEY(customerid) REFERENCES Customer(id)
    ACCESSPATTERN (name),
    PRIMARY KEY ...
    UNIQUE ...
    INDEX ...

テーブルの変更

ALTER TABLE ステートメントの完全な SQL 文法は、BNF for SQL 文法ALTER TABLE を参照してください。

ALTER コマンドを使用すると、列の追加、変更、削除、および任意の OPTIONS の値の変更、および制約の追加を行うことができます。以下の例は、ALTER コマンドを使用してテーブルオブジェクトを変更する方法を示しています。

-- add column to the table
ALTER FOREIGN TABLE "Customer" ADD COLUMN address varchar(50) OPTIONS(SELECTABLE true);

-- remove column to the table
ALTER FOREIGN TABLE "Customer" DROP COLUMN address;

-- adding options property on the table
ALTER FOREIGN TABLE "Customer" OPTIONS (ADD CARDINALITY 10000);

-- Changing options property on the table
ALTER FOREIGN TABLE "Customer" OPTIONS (SET CARDINALITY 9999);

-- Changing options property on the table's column
ALTER FOREIGN TABLE "Customer" ALTER COLUMN "name" OPTIONS(SET UPDATABLE FALSE)

-- Changing table's column type to integer
ALTER FOREIGN TABLE "Customer" ALTER COLUMN "id" TYPE bigdecimal;

-- Changing table's column column name
ALTER FOREIGN TABLE "Customer" RENAME COLUMN "id" TO "customer_id";

-- Adding a constraint
ALTER VIEW "Customer_View" ADD PRIMARY KEY (id);

ビュー

ビューは仮想テーブルです。ビューには、実際のテーブルなどの行と列が含まれます。ビューの列は、ソースまたは他のビューモデルの 1 つ以上の実際のテーブルのコラムです。また、複数の列または集約された列で構成される式を使用することもできます。列定義が view テーブルで定義されない場合は、AS キーワードの後に定義されるビューの選択変換の展開された列から派生します。

データが 1 つのテーブルから送信されるかのように、関数、JOIN ステートメント、および WHERE 句をビューデータに追加できます。

現在、アクセスパターンは表示には意味がありませんが、文法で引き続き許可されます。ビューの他の制約も適用されません。内部マテリアルビューで指定されていない限り、それらをマテリアル化ターゲットテーブルに自動的に追加されます。ただし、アクセス以外のパターンビュー制約は、最適化やクライアントによる検出の関係を伝えるなど、他の目的でも便利です。

BNF - CREATE VIEW

CREATE VIEW {table-name} [(
    <view-element> (,<view-element>)*
    (,<constraint>)*
)] [OPTIONS (<options-clause>)]
    AS {transformation_query}


<table-element> ::=
    {column-name} [<data-type> <element-attr> <options-clause>]

<data-type> ::=
    varchar | boolean | integer | double | date | timestamp .. (see Data Types)

<element-attr> ::=
    [AUTO_INCREMENT] [NOT NULL] [PRIMARY KEY] [UNIQUE] [INDEX] [DEFAULT {expr}]

<constraint> ::=
    CONSTRAINT {constraint-name} (
        PRIMARY KEY <columns> |
        FOREIGN KEY (<columns>) REFERENCES tbl (<columns>)
        UNIQUE <columns> |
        ACCESSPATTERN <columns>
        INDEX <columns>

<columns> ::=
    ( {column-name} [,{column-name}]* )

<options-clause> ::=
    <key> <value>[,<key>, <value>]*

images/create_view.png

Expand
表2.1 VIEW OPTIONS:(これらのプロパティーは CREATE TABLE で定義されるプロパティーの他に、これらのプロパティーも CREATE TABLE で定義されます)
プロパティーデータタイプまたは許可される値説明

マテリアル化

'TRUE'|'FALSE'

テーブルがマテリアル化されているかどうかを定義します。

MATERIALIZED_TABLE

'table.name'

このビューが外部データベースにマテリアル化されている場合は、マテリアル化されたテーブルの名前を定義します。

例: ビューテーブルの作成(VIRTUAL スキーマで作成される)

CREATE VIEW CustomerOrders
  AS
  SELECT concat(c.firstname, c.lastname) as name,
        o.saledate as saledate,
        o.amount as amount
  FROM Customer C JOIN Order o ON c.id = o.customerid;

重要

列は変換クエリー(SELECT ステートメント)によって暗黙的に定義されることに注意してください。列はインラインでも定義できますが、定義した場合はプロパティーの変更のみが可能です。ADD または DROP の新規列は追加できません。

テーブルの変更

The BNF for ALTER VIEW, refer to ALTER TABLE(ALTER VIEW の BNF。ALTER TABLEを参照)

ALTER COMMAND を使用すると、VIEW の変換クエリーを変更できます。列 情報は変更できません。変換クエリーは有効である必要があります。

ALTER VIEW CustomerOrders
    AS
    SELECT concat(c.firstname, c.lastname) as name,
        o.saledate as saledate,
        o.amount as amount
  FROM Customer C JOIN Order o ON c.id = o.customerid
  WHERE saledate < TIMESTAMPADD(now(), -1, SQL_TSI_MONTH)

VIEW での INSTEAD OF のトリガー(VIEW の更新)

複数のベーステーブルを構成するビューは、レコードを挿入し、更新を適用し、テーブルの参照データを削除するために INSTEAD OF トリガーを使用する必要があります。VIEW の UPDATABLE OPTION が TRUE に設定されている場合、一部の変換の複雑さに基づいて、ユーザーに INSTEAD OF TRIGGERS が自動的に提供されます。ただし、CREATE TRIGGER メカニズムを使用すると、デフォルトの動作を提供/上書きすることができます。

images/create_trigger.png

例: INSERT のビューでの INSTEAD OF トリガーの定義

CREATE TRIGGER ON CustomerOrders INSTEAD OF INSERT AS
   FOR EACH ROW
   BEGIN ATOMIC
      INSERT INTO Customer (...) VALUES (NEW.name ...);
      INSERT INTO Orders (...) VALUES (NEW.value ...);
   END

更新の場合

例: UPDATE の View でトリガーではなく定義

CREATE TRIGGER ON CustomerOrders INSTEAD OF UPDATE AS
   FOR EACH ROW
   BEGIN ATOMIC
      IF (CHANGING.saledate)
      BEGIN
          UPDATE Customer SET saledate = NEW.saledate;
          UPDATE INTO Orders (...) VALUES (NEW.value ...);
      END
   END

更新すると、列の以前の値と新しい値にアクセスできます。更新手順の詳細は、「手順の更新」を参照してください。???

ソーステーブルでの 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

通常、操作ごとにハンドラーを定義します(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) 」を参照してください。

images/create_procedure.png

関数または手順 の詳細は、SQL 文法の BNF を参照してください。

変数引数

IN パラメーターだけを使用する代わりに、最後のオプション以外のパラメーターで VARIADIC を宣言して、手順が呼び出される際に 0 以上の回数を繰り返すことができます。

例: Vararg 手順

CREATE FOREIGN PROCEDURE proc (x integer, VARIADIC z integer)
    RETURNS (x string);

FUNCTION OPTIONS:(以下はよく知られており、その他のプロパティーは拡張メタデータとみなされます)

Expand
プロパティーデータタイプまたは許可される値説明

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 関数のオプション

Expand
プロパティーデータタイプまたは許可される値説明

分析

'TRUE'|'FALSE'

集約関数のウィンドウが必要であることを示します。デフォルト値は false です。

ALLOW-ORDERBY

'TRUE'|'FALSE'

集約関数が ORDER BY 句を使用できることを示します。デフォルト値は false です。

ALLOWS-DISTINCT

'TRUE'|'FALSE'

aggregate 関数が DISTINCT キーワードを使用できることを示します。デフォルト値は false です。

DECOMPOSABLE

'TRUE'|'FALSE'

1 つの引数集約関数をデータのサブセットに対して agg(agg(x))として破棄できることを示します。デフォルト値は false です。

USES-DISTINCT-ROWS

'TRUE'|'FALSE'

集約関数がすべての行ではなく、個別の行を効果的に使用することを示します。デフォルト値は false です。

Teiid 手順言語を使用して定義される Virtual Function は集約機能できないことに注意してください。

注記

JAR ライブラリーの指定: Teiid 手順の定義なしで UDF(仮想)関数を定義した場合は、Java での実装を反映する必要があります。Java ライブラリーを VDB への依存関係として設定する方法については、『 Translator Development Guide』の「 Support for User-Defined Functions 」を参照し てください。

PROCEDURE OPTIONS:(以下のオプションはよく知られており、定義されたその他のプロパティーは拡張メタデータとみなされます)

Expand
プロパティーデータタイプまたは許可される値説明

UUID

string

一意識別子

NAMEINSOURCE

string

ソースの場合

アノテーション

string

手順の説明

UPDATECOUNT

int

この手順が基礎となるソースを更新する場合、更新数が >1 の場合に、実行用に XA プロトコルが適用されます。

例: 仮想手順の定義

CREATE VIRTUAL PROCEDURE CustomerActivity(customerid integer)
    RETURNS (name varchar(25), activitydate date, amount decimal)
    AS
    BEGIN
        ...
    END

仮想手順および仮想手順言語の詳細は、「仮想手順」および「 手順 言語」を参照 てください。

例: 仮想機能の定義

CREATE VIRTUAL FUNCTION CustomerRank(customerid integer)
   RETURNS integer AS
   BEGIN
      DECLARE integer result;
      ...
      RETURN result;
   END

手順列は NOT NULL としてマークすることも、DEFAULT の値で指定することもできます。ソース手順でパラメーターをデフォルトに可能で、Data Virtualization でデフォルト値を指定しない場合は、パラメーターでエクステンションプロパティー teiid_rel:default_handling を省略するように設定される必要があります。

単一の RESULT パラメーターしか存在できず、out パラメーターである必要があります。RESULT パラメーターは、Stable 以外の RETURNS 型が 1 つ必要です。両方が宣言された場合は、例外が発生します。他方が正確ではありません。「RETURNS type」は、特に関数のための構文は短くなりますが、パラメーターの形式は追加のメタデータ(標準名、拡張メタデータ、戻り値テーブルの定義も定義)に便利です。

return パラメーターは、引数リストに表示される場所にかかわらず、ランタイム時に手順の最初のパラメーターとして扱われます。これは、"? = EXEC …​" 形式で割り当てが想定される Data Virtualization および JDBC 呼び出しセマンティクスと一致します。

.relational 拡張 OPTIONS:

Expand
プロパティーデータタイプまたは許可される値説明

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 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')
Expand
表2.2 組み込みプレフィックス
プレフィックス説明

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 データベースの拡張

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る