テーブル関数(SQL UDTFs を除く): ラテラルテーブル関数と外側のラテラル結合の制限¶
現在のリリースでは、以下は許可されなくなりました。
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 ... ;
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 ... ;
- 現在:
上記のステートメントを実行すると、次のようなメッセージが表示され、エラーが発生します。
000002 (0A000): Unsupported feature 'lateral table function called with OUTER JOIN syntax or a join predicate (ON clause)'
コンマで結合を指定する場合は、この制限は適用されません。
SELECT ... FROM <table>,
TABLE(<ptable_function_other_than_sql_udtf>) ... ;
例:
SELECT ... FROM my_table,
TABLE(FLATTEN(input=>[col_a]));
ON 句(または USING 句、 NATURAL JOIN)が指定されていない場合も、この制限は適用されません。
SELECT ... FROM <table>
[{ [ INNER | { LEFT | RIGHT | FULL } [ OUTER ] | CROSS } JOIN
TABLE(<table_function_other_than_sql_udtf>) ...;
例:
SELECT ... FROM my_table
FULL JOIN TABLE(FLATTEN(input=>[col_a]));
SELECT ... FROM my_table
LEFT JOIN OUTER TABLE(FLATTEN(input=>[col_a]));
このようなクエリの型は動作に一貫性がなくなる可能性があるため、こうした制限を設けています。これらのクエリの型はサポートされていません。
参照: 1057