3.6.8.4. OBJECTTABLE
OBJECTTABLE 関数は、オブジェクト入力を処理して表形式で出力を生成します。関数自体はプロジェクトの列を定義します。OBJECTTABLE 関数は暗黙的にネストされたテーブルであり、FROM 句内で使用できます。
用途
OBJECTTABLE([LANGUAGE lang] rowScript [PASSING val AS name ...] COLUMNS colName colType colScript [DEFAULT defaultExpr] ...) AS id
OBJECTTABLE([LANGUAGE lang] rowScript [PASSING val AS name ...] COLUMNS colName colType colScript [DEFAULT defaultExpr] ...) AS id
パラメーター
- lang
- 処理するスクリプトの大文字と小文字を区別する言語名である任意の文字列リテラル。スクリプトエンジンは、JSR-223 ScriptEngineManager ルックアップを介して利用できるようにする必要があります。
pidUAGE が指定されていない場合は、デフォルトの 'teiid_script' が使用されます。name:: val
式の値をスクリプト context. rowScript:: にバインドする識別子。rowScript:: 行の値を作成して行値を作成する文字列リテラル。Iterator が生成する null 以外のアイテムごとに、列が評価されます。列の colName/colType:: ID/data タイプで、任意で DEFAULT 句式 defaultExpr 表現 defaultExpr
を指定できます。cocoScript:: 列の値に評価されるスクリプトを指定する文字列リテラル。
構文ルール
- 列名に重複を含めることはできません。
-
Data Virtualization は、スクリプト実行コンテキストにいくつかの特殊な変数を配置します。CommandContext は、
teiid_context
として利用できます。さらに、coScripts
はteiid_row
およびteiid_row_number
にアクセスできます。teiid_row
は、行スクリプトで生成される現在の行オブジェクトです。teiid_row_number
は、現在の 1 ベースの行番号です。 -
rowScript
は Iterator に評価されます。結果がすでに Iterator の場合、これは直接使用されます。評価の結果が Iteratable、Array、または Array タイプである場合、イテレーターが取得されます。他のオブジェクトは、単一アイテムの Iterator として処理されます。いずれの場合も、null 行の値はスキップされます。
変数の名前付けには制限はありませんが、ターゲット言語で識別子として参照できる名前を選択することが推奨されます。
OBJECTTABLE の例
- 特殊な変数へのアクセス:
SELECT x.* FROM OBJECTTABLE('teiid_context' COLUMNS "user" string 'teiid_row.userName', row_number integer 'teiid_row_number') AS x
SELECT x.* FROM OBJECTTABLE('teiid_context' COLUMNS "user" string 'teiid_row.userName', row_number integer 'teiid_row_number') AS x
結果は、それぞれユーザー名と 1 を含む 2 つの列が含まれる行になります。
teiid_script 以外の言語では、通常、Java 機能への無制限のアクセスが許可されます。その結果、デフォルトでは使用は制限されます。allowed-languages
プロパティーで名前別に使用可能な言語を宣言することで、制限を上書きできます。 通常パーミッションチェックの対象でないビュー定義であっても、OBJECTTABLE を使用するには、allowed-languages
プロパティーを定義する必要があります。また、ユーザーアカウントに言語アクセス権を設定して、ユーザーが OBJECTTABLE 関数を処理できるようにする必要があります。
- teiid_script の詳細は、次のセクションを参照してください。
- teiid_script 以外の言語の使用を有効にする方法は、「 仮想データベースプロパティー で allowed-languages 」を参照してください。
- ユーザーアカウントのパーミッションの設定に関する詳細は、「パーミッション」の「ユーザー クエリーのパーミッション 」を参照し て ください。
teiid_script
teiid_script は、アレイ/リストでオブジェクトおよびインデックス化された値の 0 引数以外のメソッドへのアクセスを可能にする単純なスクリプト式言語です。teiid_script 式は、pass または special 変数を参照して始まります。次に、任意の数の .
アクセサーをチェーンして、式を別の値に評価できます。メソッドには、getFoo ではなく foo などのプロパティー名でアクセスできます。オブジェクトに getFoo
()メソッドと foo
()メソッドの両方が含まれる場合、accessor foo
参照 foo()
と getFoo
を使用して getter を呼び出す必要があります。同じ .
アクセッサー構文を使用して、1 ベースの正の値を使用してアレイまたはリストインデックスにアクセスします。システム関数 array_get
と同じロジックが使用されます。つまり、インデックスがバインド外である場合は、例外ではなく null
を返します。
teiid_script は、起動時に入力が実行されると、実質的に動的に入力されます。アクセサーがオブジェクトに存在しない場合や、メソッドにアクセスできない場合は、例外が発生します。アクセサーチェーン内のどの時点でも null 値に対して評価されると、null が返されます。
teiid_script の例
- VDB の記述文字列を取得するには、以下を実行します。
teiid_context.session.vdb.description
teiid_context.session.vdb.description
- VDB の記述文字列の最初の文字を取得するには、以下を実行します。
teiid_context.session.vdb.description.toCharArray.1
teiid_context.session.vdb.description.toCharArray.1