ExecRを使用した、Rスクリプトとテーブル演算子の実行 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL演算子およびユーザー定義関数

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-31
dita:mapPath
ja-JP/xwv1596137968859.ditamap
dita:ditavalPath
ja-JP/xwv1596137968859.ditaval
dita:id
B035-1210
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コードが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;