テーブル演算子の言語サポートは、第1クラスと第2クラスに分類できます。言語の第1クラスのサポートには、データベースへのテーブル演算子の登録が含まれます。例えば、Cは第1クラスの言語としてサポートされます。C演算子は、CREATE FUNCTIONなどのDDL文を使用してデータベースに登録されます。
Rは、第2クラスの言語としてサポートされます。Rテーブル演算子はデータベースに登録されておらず、TeradataのExecRシステム テーブル演算子によって実行されます。ExecRはDipRTblOp DIPスクリプトによって作成され、td_sysgplデータベースに存在します。Rがスレッド セーフでないため、ExecRは保護モードでのみ実行できます。
コントラクト関数とテーブル演算子のRコードは、USING句を使用してExecRに渡されます。ExecRの実行時に、契約と演算子はRインタープリタによって解釈されます。
コントラクト関数と演算子のRコードが64 KB未満の場合、契約と演算子をUSING句で文字列として渡すことができます。
SELECT * FROM TD_SYSGPL.ExecR ( ON (select * from tab1) [Hash By / Partition By / Local Order By / DIMENSION clauses] [ON ...] USING Contract('<R contract function>') Operator('<R operator>') [Other USING clauses] ... ) AS D;
コントラクト関数と演算子のRコードが64KBより大きく、4MBより小さい場合、コードをUSING句でLOBとして渡すことができます。例えば、列ID(INT)およびrcode(CLOB)を持つprogtableというテーブルがあるとします。次の問合わせは、ID 1のrcodeを契約、ID 2のrcodeを演算子として解釈します。
SELECT * FROM TD_SYSGPL.ExecR ( ON (select * from tab1) [Hash By / Partition By / Local Order By / DIMENSION clauses] [ON ...] USING Contract(select rcode from progtable where id=1) Operator(select rcode from progtable where id=2) [Other USING clauses] ... ) AS D;
RETURNS句を使用して出力列定義を定義する場合、コントラクト関数を省略できます。RETURNS句は、出力テーブル、または列名およびその対応するタイプを指定できます。コントラクト関数またはRETURNS句のいずれかを指定する必要があります。RETURNS句を指定する場合、ExecR呼び出し内のUSING句の前に指定する必要があります。以下に、コントラクト関数ではなく、RETURNS句を指定する例を示します。
SELECT * FROM TD_SYSGPL.ExecR ( ON (select * from t1) RETURNS (a integer, b smallint, c bigint, d byteint, e float, f real) USING Operator (' library(tdr); ... ') ) AS D1;