VantageがテーブルUDF式を評価するとき、1度のループで1行ずつのテーブルをSELECT文に返すテーブル関数を呼び出します。この関数は、渡された入力引数、または外部ファイルあるいはメッセージ キューの読み取りに基づいて、テーブルの行を生成できます。
テーブル関数では、128個の入力パラメータを用意することができます。 テーブル関数呼び出しの引数に適用されるルールは、スカラー関数呼び出しに適用されるルールと同じです。 UDF引数を参照してください。
テーブルUDFには戻り値がありません。作成される結果の行の列は、出力パラメータとして返されます。
テーブル関数の出力パラメータは、CREATE FUNCTION文のRETURNS TABLE句で定義します。出力パラメータの数は、通常のテーブルに定義できる列の最大数によって制限されます。
出力パラメータの数とデータ型は、CREATE FUNCTION文で静的に指定することも、実行時にテーブル関数を呼び出すSELECT文で動的に指定することもできます。
AMPがダウンしている場合には、フォールバック データに対してテーブル関数およびテーブル演算子を実行できません。AMPが復帰したら、問合わせは通常どおり完了できます。
例
この例では、extract_fieldテーブルUDFを使用して、raw_custテーブルのpending_data列からcustomer ID、store number、およびitem IDを抽出します。
raw_custテーブルの定義
CREATE SET TABLE raw_cust ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT ( region INTEGER, pending_data VARCHAR(32000) CHARACTER SET LATIN NOT CASESPECIFIC) PRIMARY INDEX (region);
pending_dataテキスト フィールドは、書式を指定された数の文字列です。
store number, entries:customer ID, item ID , ...; repeat;
- store numberは、これらの商品を顧客に販売した店です。
- entriesは、販売した商品の数です。
- customer ID、item IDによって、各顧客(customer)が購入した商品(item)を表わします。customer ID、item IDはセミコロン ';'で区切り、entriesの回数だけ繰り返されます。
- 上記の手順が繰り返されることになります。
raw_custテーブルからのサンプル データを以下に示します。
region pending_data -------- --------------------------------------------------------- 2 7,2:879,3788,879,4500;08,2:500,9056,390,9004; 1 25,3:9005,3789,9004,4907,398,9004;36,2:738,9387,738,9550; 1 25,2:9005,7896,9004,7839;36,1:737,9387;
extract_fieldテーブルUDFのSQL定義を以下に示します。
CREATE FUNCTION extract_field (Text VARCHAR(32000), From_Store INTEGER) RETURNS TABLE (Customer_ID INTEGER, Store_ID INTEGER, Item_ID INTEGER) LANGUAGE C NO SQL PARAMETER STYLE SQL EXTERNAL NAME extract_field;
次の問合わせでは、地域(region) 1の店(store) 25から購入した顧客と商品を抽出して表示します。
SELECT DISTINCT cust.Customer_ID, cust.Item_ID FROM raw_cust, TABLE (extract_field(raw_cust.pending_data, 25)) AS cust WHERE raw_cust.region = 1;
このSELECT文の出力は、次のようになります。
Customer_ID Item_ID ------------ ----------- 9005 3789 9004 4907 398 9004 9005 7896 9004 7839