表函数(除 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)与表函数(除 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