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 ... ;
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 ... ;
- 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)'
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>) ... ;
Por exemplo:
SELECT ... FROM my_table,
TABLE(FLATTEN(input=>[col_a]));
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>) ...;
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]));
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