ExecRを使用したRスクリプトおよびテーブル演算子の実行 - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQL外部ルーチン プログラミング

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/uhh1512082756414.ditamap
dita:ditavalPath
ja-JP/uhh1512082756414.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

テーブル演算子の言語のサポートは、第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コードが64 KBより大きく、4 MBより小さい場合、コードを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;