Fonctions de table (sauf UDTFs SQL) : restrictions concernant les fonctions de tables latérales et les jointures latérales externes

Attention

Ce changement de comportement est présent dans le bundle 2023_04.

Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.

Dans la version actuelle, les éléments suivants ne sont plus autorisés :

  • Les fonctions des tables latérales (autres que des UDTFs SQL) qui sont spécifiées avec la clause ON.

  • Jointures latérales externes vers des fonctions de table (autres que des UDTFs SQL) qui spécifient la clause ON.

Notez que cette restriction s’applique également aux instructions qui utilisent des clauses équivalentes à la clause ON (la clause USING et NATURAL JOIN).

Les fonctions de table autres que des UDTFs SQL comprennent les fonctions de table intégrées et les UDTFs définies dans des langages autres que SQL.

Précédemment

Vous pouviez spécifier :

  • La clause ON (ou la clause USING ou NATURAL JOIN) pour les fonctions de table latérales (autres que des UDTFs SQL).

    Par exemple :

    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
  • Une jointure latérale externe à une fonction de table (autre que des UDTFs SQL), en utilisant la clause ON (ou la clause USING ou NATURAL JOIN).

    Par exemple :

    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
Actuellement

Lorsque vous exécutez les instructions ci-dessus, une erreur se produit avec le message suivant :

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

Cette restriction ne s’applique pas si vous utilisez une virgule pour spécifier la jointure :

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

Par exemple :

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

Cette restriction ne s’applique pas non plus si la clause ON (ou la clause USING ou NATURAL JOIN) n’est pas spécifiée :

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

Par exemple :

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

Cette restriction était ajoutée parce que ce type de requêtes peut donner lieu à des comportements incohérents. Ces types de requêtes ne sont pas pris en charge.

Réf : 1057