17.00 - 17.05 - テーブルUDFに対する入力引数の整列 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)
Last Update
2021-03-30

アプリケーションによっては、UDFテーブルに対して入力の整列が必要なものがあります。アプリケーションまたはUDFテーブルのあらゆる種類の入力引数を処理するのではなく、UDFテーブルをSELECT文のFROM句で呼び出すときにHASH BYおよびLOCAL ORDER BY句を使用できます。入力のスコープには、派生テーブル、ビュー、およびWITHオブジェクトが含まれます。

次のテーブル定義があるとします。

CREATE TABLE
   tempData(tID INTEGER, tTS TIMESTAMP, x INTEGER, y INTEGER);

テーブルにあるデータは次のようになっていると仮定します。

INSERT INTO tempData
   VALUES (1001, TIMESTAMP '2008-02-03 14:33:15', 10, 11);
INSERT INTO tempData
   VALUES (1001, TIMESTAMP '2008-02-03 14:44:20', 20, 24);
INSERT INTO tempData
   VALUES (1001, TIMESTAMP '2008-02-03 14:59:08', 31, 30);
INSERT INTO tempData
   VALUES (1002, TIMESTAMP '2008-02-04 11:02:19', 10, 11);
INSERT INTO tempData
   VALUES (1002, TIMESTAMP '2008-02-04 11:33:04', 22, 18);
INSERT INTO tempData
   VALUES (1002, TIMESTAMP '2008-02-04 11:48:27', 29, 29);

CharFromRowsと呼ばれるUDFテーブルについて見てみましょう。このUDFが生成する文字列には、timestamp、x、およびyのすべての値が表されており、tID列と同じ値を持っています。さらに、テキスト文字列に表現された値は、timestampにより整列されています。以下は、UDFテーブルの定義を示しています。

CREATE FUNCTION CharFromRows(tID INTEGER,
                             tTS TIMESTAMP,
                             x INTEGER,
                             y INTEGER)
RETURNS TABLE(outID INTEGER, outCHAR VARCHAR(64000))
LANGUAGE C
NO SQL
EXTERNAL NAME 'CS!charfromrows!udfsrc/charfromrows.c'
PARAMETER STYLE SQL;

次のクエリーは、CharFromRowsのテーブルUDFを起動し、再帰的でないWITH句を使用し、tIDをキーにして入力のハッシュを作成します。また、tTSをキーにして値の整列を行ない、AMPへ入力します。

WITH wq (tID1, tTS1, x1, y1) AS
   (SELECT tID, tTS, x, y FROM tempData)
SELECT *
FROM TABLE (CharFromRows(wq.tID1, wq.tTS1, wq.x1, wq.y1)
   HASH BY tID1 LOCAL ORDER BY tTS1) tudf;

出力は次のようになります。

outID outCHAR
----- ---------------------------------------------------------------------
1001  2008-02-03 14:33:1510112008-02-03 14:44:2020242008-02-03 14:59:083130
1002  2008-02-04 11:02:1910112008-02-04 11:33:0422182008-02-04 11:48:272929

HASH BY句およびLOCAL ORDER BY句の詳細については、<Teradata Vantage™- SQLデータ定義言語 - 詳細トピック、B035-1184>の「FROM TABLE」を参照してください。