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

语言: 中文