EXTERNAL - Teradata Database - Teradata Vantage NewSQL Engine - EXTERNALオプション、CREATE FUNCTION(テーブル形式)構文の文。

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/wkf1512081455740.ditamap
dita:ditavalPath
ja-JP/wkf1512081455740.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

外部関数本体の参照句を示します。

この句はすべてのテーブルUDFで必須です。

この句によって、以下の4種類の指定ができます。

  • キーワードEXTERNALのみ。
  • キーワードEXTERNAL NAMEおよび外部関数名(オプションのパラメータ形式の指定あり)。

    これはすべてのUDFの必須属性です。

  • キーワードEXTERNAL NAMEおよび外部文字列リテラルのセット。
  • キーワードEXTERNAL NAMEおよびJava JAR IDの指定。

例: 2つのTeradata Databaseシステムの間でデータを受け渡すテーブル関数の使用

二重のアクティブなTeradataシステムを実行している場合、あるいは開発またはテスト用のマシンに第2のTeradataシステムがある場合など、2つのプラットフォーム間でデータの受け渡しが必要になることが考えられます。例えば、一方のシステムからディクショナリ テーブルの問合わせを行ない、それらのテーブルをもう一方のシステムと相関できると便利な場合があります。この例では、これを行なう方法を説明します。

次のSELECTリクエストは、tdatという名前のテーブル関数を使用しますが、この関数はリモートTeradataシステムに対して問合わせを実行し、その後で要求元のシステムに応答セットを返します。この例では、UDFはもう一方のシステムのディクショナリ テーブルに含まれているすべてのデータベース名を返します。

    SELECT * 
    FROM table(rdg.tdat(2,1,'adw1/rdg,rdg', 'SELECT databasename FROM                dbc.databasesV')); 

このSELECTリクエストはテーブル関数の固定入力引数として要求元システムから渡され、ターゲット システムで(そのシステムへのログオン ストリングのように)実行されます。

テーブル関数を作成するDDLは次のとおりです。

    CREATE FUNCTION rdg.tdat 
        (rowc       INTEGER, 
         InLineNum  INTEGER, 
         logonstr   VARCHAR(50)   CHARACTER SET LATIN, 
         sqlRqst    VARCHAR(512)  CHARACTER SET LATIN) 
     RETURNS TABLE (
         ampId      INTEGER, 
         cnt        INTEGER, 
         OutLineNum INTEGER, 
         str1       VARCHAR(256)  CHARACTER SET LATIN, 
           .
           .
           .
         str20      VARCHAR(256)  CHARACTER SET LATIN) 
    SPECIFIC tdat 
    LANGUAGE C 
    NO SQL  
    PARAMETER STYLE SQL 
    NOT DETERMINISTIC 
    CALLED ON NULL INPUT 
    EXTERNAL NAME 'SS:tdat:/home/rdg/tdat/Tdat.c:SL:cliv2';

2つのTeradataシステムにまたがる1つのビューを作成することにより、両方のプラットフォームでディクショナリの内容を比較したり、テーブル領域や権限などの詳細データを比較したりすることができます。

次のビューは、各システムのDBC.Tablesビューに現われる行を比較します。

    CREATE VIEW allTables AS
      SELECT 'Local System' AS system, databasename, tablename, version,
             tablekind, protectionType, JournalFlag, CreatorName,              requesttext(VARCHAR(100))
      FROM DBC.tables
    UNION
      SELECT 'Remote System', str1 (CHAR(30)), str2 (CHAR(30)), 
             str3 (INTEGER), str4 (CHAR(1)), str5 (CHAR(1)), 
             str6 (CHAR(2)), str7 (CHAR(30)), str8 (VARCHAR(100))
      FROM table(rdg.tdat(2,1,'adw1/rdg,rdg', 'SELECT databasename,                  tablename, version, tablekind, protectionType,
                 JournalFlag, CreatorName, requesttext(VARCHAR(100))
                 FROM DBC.tables')) T;

リモートで実行されるSELECT問合わせから返されるデータのサンプリングをテーブル名で並べ替えると(クロス比較を簡単にするため)、次のようになります。

    System         DatabaseName  TableName     Version  TableKind
    -------------- ------------  ------------  -------  ---------
    Remote System  test          a             1        T
    Local System   DBC           AccessRights  1        T
    Remote System  DBC           AccessRights  1        T
    Remote System  DBC           AllSpaceV     1        V
    Local System   DBC           AllSpaceV     1        V
    Local System   rdg           allamp        1        T
    Remote System  test          allamp        1        T