テーブル関数(SQL UDTFs を除く): ラテラルテーブル関数と外側のラテラル結合の制限

注意

この動作変更は2023_04バンドルにあります。

バンドルの現在のステータスについては、 バンドル履歴 をご参照ください。

現在のリリースでは、以下は許可されなくなりました。

  • ON 句で指定されるラテラルテーブル関数(SQL UDTFs 以外)。

  • ON 句を指定するテーブル関数(SQL UDTFs 以外)への外側ラテラル結合。

なお、この制限は、 ON 句と同等の句(USING 句および NATURAL JOIN)を使用するステートメントにも適用されることに注意してください。

SQL UDTFs 以外のテーブル関数には、組み込みテーブル関数や、 SQL 以外の言語で定義された UDTFs が含まれます。

以前

次は指定できます。

  • ラテラルテーブル関数(SQL UDTFs 以外)の ON 句(または USING 句、または NATURAL JOIN)。

    例:

    SELECT ... FROM my_table
    JOIN TABLE(FLATTEN(input=>[col_a]))
    ON ... ;
    SELECT ... FROM my_table
    INNER JOIN TABLE(FLATTEN(input=>[col_a]))
    ON ... ;
    SELECT ... FROM my_table
    JOIN TABLE(my_js_udtf(col_a))
    ON ...;
    SELECT ... FROM my_table
    INNER JOIN TABLE(my_js_udtf(col_a))
    ON ... ;
    
    Copy
  • ON 句(または USING句、または NATURAL JOIN)を使用した、テーブル関数(SQL UDTFs 以外)への外部ラテラル結合。

    例:

    SELECT ... FROM my_table
    LEFT JOIN TABLE(FLATTEN(input=>[col_a]))
    ON ... ;
    SELECT ... FROM my_table
    FULL JOIN TABLE(FLATTEN(input=>[col_a]))
    ON ... ;
    SELECT ... FROM my_table
    LEFT JOIN TABLE(my_js_udtf(col_a))
    ON ... ;
    SELECT ... FROM my_table
    FULL JOIN TABLE(my_js_udtf(col_a))
    ON ... ;
    
    Copy
現在

上記のステートメントを実行すると、次のようなメッセージが表示され、エラーが発生します。

000002 (0A000): Unsupported feature 'lateral table function called with
    OUTER JOIN syntax or a join predicate (ON clause)'
Copy

コンマで結合を指定する場合は、この制限は適用されません。

SELECT ... FROM <table>,
    TABLE(<ptable_function_other_than_sql_udtf>) ... ;
Copy

例:

SELECT ... FROM my_table,
TABLE(FLATTEN(input=>[col_a]));
Copy

ON 句(または USING 句、 NATURAL JOIN)が指定されていない場合も、この制限は適用されません。

SELECT ... FROM <table>
[{ [ INNER  | { LEFT | RIGHT | FULL } [ OUTER ] | CROSS } JOIN
TABLE(<table_function_other_than_sql_udtf>) ...;
Copy

例:

SELECT ... FROM my_table
FULL JOIN TABLE(FLATTEN(input=>[col_a]));
SELECT ... FROM my_table
LEFT JOIN OUTER TABLE(FLATTEN(input=>[col_a]));
Copy

このようなクエリの型は動作に一貫性がなくなる可能性があるため、こうした制限を設けています。これらのクエリの型はサポートされていません。

参照: 1057