Tabellenfunktionen (außer SQL-UDTFs): Einschränkungen bei lateralen Tabellenfunktionen und äußeren seitlichen Verknüpfungen (Lateral Joins)¶
Achtung
Diese Verhaltensänderung ist in Bundle 2023_04 enthalten.
Den aktuellen Status des Bundles finden Sie unter Bundle-Verlauf.
Mit dem aktuellen Release ist Folgendes nicht mehr zulässig:
Laterale Tabellenfunktionen (mit Ausnahme von SQL-UDTFs), die mit der ON-Klausel angegeben werden.
Äußere seitliche Verknüpfungen (Lateral Joins) zu Tabellenfunktionen (außer SQL-UDTFs), die die ON-Klausel angeben.
Beachten Sie, dass diese Einschränkung auch für Anweisungen gilt, die Klauseln verwenden, die der Klausel-ON entsprechen (USING-Klausel und NATURAL JOIN).
Zu Tabellenfunktionen, die keine SQL-UDTFs sind, gehören integrierte Tabellenfunktionen und UDTFs, die in anderen Sprachen als SQL definiert sind.
- Bisher:
Sie können Folgendes angeben:
Die ON-Klausel (oder die USING-Klausel oder NATURAL JOIN) für laterale Tabellenfunktionen (außer SQL-UDTFs).
Beispiel:
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 ... ;
Eine äußere seitliche Verknüpfung (Lateral Join) zu einer Tabellenfunktion (außer SQL-UDTFs), unter Verwendung der ON-Klausel (oder der USING-Klausel oder NATURAL JOIN).
Beispiel:
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 ... ;
- Jetzt:
Wenn Sie die obigen Anweisungen ausführen, tritt ein Fehler mit der folgenden Meldung auf:
000002 (0A000): Unsupported feature 'lateral table function called with OUTER JOIN syntax or a join predicate (ON clause)'
Diese Einschränkung gilt nicht, wenn Sie bei der Angabe der Verknüpfung (Join) ein Komma verwenden:
SELECT ... FROM <table>,
TABLE(<ptable_function_other_than_sql_udtf>) ... ;
Beispiel:
SELECT ... FROM my_table,
TABLE(FLATTEN(input=>[col_a]));
Diese Einschränkung gilt auch nicht, wenn die ON-Klausel (oder die USING-Klausel oder NATURAL JOIN) nicht angegeben ist:
SELECT ... FROM <table>
[{ [ INNER | { LEFT | RIGHT | FULL } [ OUTER ] | CROSS } JOIN
TABLE(<table_function_other_than_sql_udtf>) ...;
Beispiel:
SELECT ... FROM my_table
FULL JOIN TABLE(FLATTEN(input=>[col_a]));
SELECT ... FROM my_table
LEFT JOIN OUTER TABLE(FLATTEN(input=>[col_a]));
Diese Einschränkung wurde hinzugefügt, weil diese Typen von Abfragen zu inkonsistentem Verhalten führen können. Diese Typen von Abfragen werden nicht unterstützt.
Ref.: 1057