Erfahren Sie, wie Sie den Fehler `SQL compilation error: Unsupported subquery type cannot be evaluated` in Snowflake user-defined table functions beheben und mit einem praktischen Beispiel lösen können.
---
Dieses Video basiert auf der Frage https://stackoverflow.com/q/62225083/ gestellt von dem Nutzer 'Nathan T Alexander' ( https://stackoverflow.com/u/8377495/ ) sowie auf der Antwort https://stackoverflow.com/a/62271461/ bereitgestellt von dem Nutzer 'Greg Pavlik' ( https://stackoverflow.com/u/12756381/ ) auf der Website 'Stack Overflow'. Vielen Dank an diese großartigen Nutzer und die Stackexchange-Community für ihre Beiträge.
Besuchen Sie diese Links, um den Originalinhalt und weitere Details zu sehen, z. B. alternative Lösungen, aktuelle Entwicklungen zum Thema, Kommentare, Versionsverlauf usw. Der ursprüngliche Titel der Frage lautete beispielsweise: Snowflake UDTF (User-Defined-Table-Function) SQL compilation error: Unsupported subquery type cannot be evaluated
Außerdem steht der Inhalt (außer Musik) unter der Lizenz CC BY-SA https://meta.stackexchange.com/help/l...
Der ursprüngliche Fragenbeitrag steht unter der Lizenz 'CC BY-SA 4.0' ( https://creativecommons.org/licenses/... ), und der ursprüngliche Antwortbeitrag steht unter der Lizenz 'CC BY-SA 4.0' ( https://creativecommons.org/licenses/... ).
Falls Ihnen irgendetwas auffällt oder Unstimmigkeiten bestehen, schreiben Sie mir bitte an vlogize [AT] gmail [DOT] com.
---
Fehlersuche bei SQL Compilation Error: Unsupported Subquery Type Cannot Be Evaluated in Snowflake UDTF
Bei der Arbeit mit Snowflake kann es zu verschiedenen SQL-Fehlermeldungen kommen, eine davon ist der frustrierende Fehler Unsupported subquery type cannot be evaluated. Dieses Problem tritt häufig auf, wenn versucht wird, benutzerdefinierte Tabellenfunktionen (User-Defined Table Functions, UDTF) mit Subqueries zu verwenden, die nicht unterstützt werden. In diesem Blogbeitrag erläutern wir die Ursache dieses Fehlers und zeigen eine einfache Lösung mit JavaScript UDTFs.
Verständnis des Problems
Schauen wir uns die Situation an, die diesen Fehler auslöst. Sie versuchen, eine benutzerdefinierte Tabellenfunktion mit einer SELECT-Anweisung zu verbinden, wobei Werte verwendet werden, die nicht hartkodiert sind, was zum genannten Fehler führt. Konkret führt die folgende SQL-Anweisung zum Fehler:
[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]
Der Fehler entsteht, weil Snowflake bestimmte Arten von Subqueries nicht unterstützt, und die Art, wie die UDTF mit dynamischen Eingaben aufgerufen wird, in diesem Fall nicht zulässig ist.
Kontext Ihrer Anforderungen
Zur Klarstellung: Sie haben erwähnt, dass Ihre Lösung nicht nur diesen SQL-Fehler beheben soll, sondern auch zahlreiche Eingabeargumente und Ausgabewerte berücksichtigen muss. Die Verwendung einer einzelnen skalaren Ausgabefunktion ist daher nicht ausreichend. Es wird ein alternativer Ansatz benötigt.
Die Lösung: Wechsel zu JavaScript UDTF
Obwohl die native SQL-UDTF-Implementierung Probleme verursacht, lässt sich dies durch die Umstellung auf eine JavaScript UDTF lösen. Diese Methode kann effektiv mehrere Eingaben verarbeiten und tabellenartige Ausgaben zurückliefern, ohne den Fehler wegen des nicht unterstützten Subquery-Typs auszulösen.
Schritt 1: Erstellen der JavaScript UDTF
So erstellen Sie die JavaScript-Version Ihrer Funktion:
[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]
Schritt 2: Erstellen der temporären Datentabelle
Stellen Sie sicher, dass Ihre temporäre Datentabelle wie folgt eingerichtet ist:
[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]
Schritt 3: SQL-Abfragen ausführen
Nun können Sie Ihre SQL-Abfragen ohne den Fehler für nicht unterstützte Subqueries ausführen. Hier ein Beispiel mit einer ähnlichen dynamischen Ausführung ohne harte Werte:
Hartkodiertes Beispiel (zum Testen)
[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]
Dynamische Werte mit LATERAL
Um der UDTF dynamische Eingaben zu ermöglichen, verwenden Sie die folgende SQL-Anweisung mit LATERAL:
[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]
Wichtige Erkenntnisse
Bei einem Fehler wegen nicht unterstützter Subquery-Typen in Snowflake UDTFs kann der Wechsel zu einer JavaScript UDTF komplexe Datenverarbeitung ermöglichen.
JavaScript UDTFs bieten mehr Flexibilität und können mehrere Eingangswerte effizient verarbeiten sowie tabellenartige Ausgaben liefern.
Nutzen Sie LATERAL in Ihren SQL-Abfragen, um dynamische Eingaben an Ihre Funktionen weiterzugeben, ohne Werte hart zu codieren.
Durch die Verwendung eines JavaScript UDTF-Ansatzes lösen Sie nicht nur den Kompilierungsfehler, sondern verbessern auch die Performance und Kapazität Ihrer Anwendung für komplexere Szenarien. Viel Erfolg beim Abfragen!
Информация по комментариям в разработке