Funções de tabela (exceto UDTFs SQL): restrições com funções de tabela lateral e junções laterais externas

Atenção

Essa mudança de comportamento está no pacote 2023_04.

Para saber o status atual do pacote, consulte Histórico do pacote.

Na versão atual, o seguinte não é mais permitido:

  • Funções de tabela lateral (exceto UDTFs SQL) que são especificadas com a cláusula ON.

  • Junções laterais externas para funções de tabela (exceto UDTFs SQL) que especificam a cláusula ON.

Observe que essa restrição também se aplica a instruções que usam cláusulas equivalentes à cláusula ON (a cláusula USING e NATURAL JOIN).

Funções de tabela que não sejam UDTFs SQL incluem funções de tabela embutidas e as UDTFs definidas em idiomas diferentes de SQL.

Anteriormente:

Você podia especificar:

  • A cláusula ON (ou a cláusula USING ou NATURAL JOIN) para funções de tabela lateral (exceto UDTFs SQL).

    Por exemplo:

    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
  • Uma junção lateral externa para uma função de tabela (diferente de UDTFs SQL), usando a cláusula ON (ou a cláusula USING ou NATURAL JOIN).

    Por exemplo:

    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
Atualmente:

Ao executar as instruções acima, ocorre um erro com a seguinte mensagem:

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

Esta restrição não se aplica se você estiver usando uma vírgula para especificar a junção:

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

Por exemplo:

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

Esta restrição também não se aplica se a cláusula ON (ou a cláusula USING ou NATURAL JOIN) não for especificada:

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

Por exemplo:

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

Essa restrição foi adicionada porque esses tipos de consultas podem resultar em comportamento inconsistente. Esses tipos de consultas não são suportados.

Ref: 1057