表形式 SQL UDFs (UDTFs)¶
Snowflakeは、0、1つ、または複数の行で構成される一連の行を返す SQL UDFs をサポートします。各行には、1つ以上の列があります。このような UDFs は、 表形式 UDFs、 テーブル UDFs、または最も頻繁に UDTFs (ユーザー定義のテーブル関数)と呼ばれます。
UDTF は、クエリの FROM 句でアクセスできます。
構文¶
SQL UDTFsを含むすべての UDFsの一般的な構文の詳細については、 CREATE FUNCTION をご参照ください。
引数¶
name:これは、 識別子の要件 で説明されているルールに従う有効なデータベースオブジェクト名である必要があります。
arguments:これは、列名、リテラル、または単一の値に評価できる式などの式でなければなりません。通常、関数は1つの引数を取ります。これは列名です。たとえば、1つ以上の列名、または列名と1つ以上リテラル値など、1つ以上の値を渡すことができます。
定数を渡すことも、値をまったく渡さないことも可能です。ただし、ほとんどの場合、入力が毎回同じであれば、出力は毎回同じです。
RETURNS TABLE(...)UDF がテーブルを返すように指定します。括弧内で、返されるテーブルに含める列の名前と型のペアを指定します(以下で説明のとおり)。
output_col_name:返されたテーブルに含める出力列の名前。少なくとも1つの出力列が必要です。
output_col_type:出力列のデータ型です。
sql_expression:各行に1つ以上の列がある、ゼロ行以上のテーブルを返す有効な SQL 式またはステートメントにする必要があります。出力は、 RETURNS 句で指定された数およびデータ型と一致する必要があります。
使用上の注意¶
SQL UDTF の本体(別名「定義」)は SELECT 式でなければなりません。
sql_expressionの前後の区切り文字は通常一重引用符ですが、区切り文字としてドル記号$$のペアを使用できます。終了区切り文字は、開始区切り文字と一致する必要があります。sql_expressionに一重引用符が含まれる場合に、ドル記号のペアは便利です。ドル記号のペアを使用した例は、以下の例のセクションに含まれています。区切り文字が一重引用符であり、本文に一重引用符が含まれている場合は、バックスラッシュ文字
\をエスケープ文字として使用して、本文内の一重引用符をエスケープできます。例は、下記の例セクションに含まれています。UDTF で定義された列は、通常のテーブル列を使用できる場所であればどこにでも表示できます。
RETURNS 句で指定された戻り値の型は、表形式の結果にある列の名前と型を決定し、関数本体の SELECT ステートメントの対応する位置の式の型と一致する必要があります。
UDTF を呼び出すときは、 TABLE キーワードに続く括弧内に UDTF の名前と引数を含める必要があります。詳細については、 SQL UDTF の呼び出し をご参照ください。
注釈
表形式の関数(UDTFs)には、入力引数に500個、出力列に500個の制限があります。
SQL UDTF の呼び出し¶
クエリの FROM 句で UDTF を呼び出す場合は、 TABLE キーワードに続く括弧内に UDTF の名前と引数を指定します。
つまり、 UDTF を呼び出すときは、 TABLE キーワードに次のような形式を使用します。
サンプル SQL UDTFs¶
基本的な例¶
これは人為的に簡単にした UDTF の例で、出力をハードコードします。これは、区切り文字としての $$ の使用も示しています。
この例は前の例と似ていますが、区切り文字として一重引用符を使用し、 \ エスケープ文字を使用して UDTF の本文内の一重引用符をエスケープします。
これは、UDTF の別の基本的な例です。テーブルをクエリし、そのテーブルから2つの列を返します。
この同じ機能は、ビューを使用して実装することもできます。
結合の例¶
指定したユーザー ID の国情報(COUNTRY_CODE および COUNTRY_NAME)を返す SQL UDTF を作成し、使用します。
指定した年のお気に入りの色を返す SQL UDTF を作成します。
クエリで UDTF を使用します。
別のテーブルとの結合で UDTF を使用します。テーブルの結合列が引数として関数に渡されることに注意してください。
追加の述部には、 ON ではなく WHERE 句を使用します。
結合式で定数とともに UDTF を使用します。追加の結合条件には、 ON ではなく WHERE 句を使用する必要があることに注意してください。