テーブル演算子の言語サポートは、第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_clause ] [ PARTITION_BY_clause ] [ LOCAL_ORDER_BY_clause ] [ DIMENSION_clause ] [ ON tab2 ]... USING Contract ('R_contract_function') Operator ('R_operator') [ other_USING_clause ]... ) 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_clause ] [ PARTITION_BY_clause ] [ LOCAL_ORDER_BY_clause ] [ DIMENSION_clause ] [ ON tab2 ]... USING Contract (SELECT rcode FROM progtable WHERE id=1) Operator (SELECT rcode FROM progtable WHERE id=2) [ other_USING_clause ]... ) 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;