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

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
管理
Publication ID
B035-1210-171K-JPN
Language
日本語 (日本)

テーブル演算子の言語サポートは、第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;