SnowConvert AI – Redshift– SQL-Anweisungen¶
Übersetzungsreferenz für alle von SnowConvert AI unterstützten Anweisungen für Redshift.
CALL¶
Beschreibung¶
Führt eine gespeicherte Prozedur aus. Der Befehl CALL muss den Namen der Prozedur und die Werte der Eingabeargumente enthalten. Sie müssen eine gespeicherte Prozedur mit der Anweisung CALL aufrufen. (Redshift SQL-Referenz: CALL).
Grammatikalische Syntax¶
Beispielhafte Quellcode-Muster¶
Basis-Szenario¶
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Redshift¶
Aufruf im Modus Ausgabeparameter (INOUT, OUT)¶
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Redshift¶
Bekannte Probleme¶
Ausgabeparameter von Aufrufen außerhalb von Prozeduren funktionieren nicht.
CREATE DATABASE¶
Grammatikalische Syntax¶
Weitere Informationen finden Sie in der Redshift [CREATE DATABASE-Dokumentation](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE. html).
Beispielhafte Quellcode-Muster¶
Grundlegende Beispiele¶
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
COLLATE-Klausel¶
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
CONNECTION LIMIT-Klausel¶
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
Warnung
The connection limit clause is removed since the connection concurrency in Snowflake is managed by warehouse. For more information, see the Snowflake MAX_CONCURRENCY_LEVEL parameter.
from ARN-Klausel¶
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
Warnung
Diese Klausel wird entfernt, da sie zur Referenzierung von Amazon-Ressourcen verwendet wird, die in Snowflake nicht gültig sind.
OWNER-Klausel¶
Eingabecode¶
Redshift¶
Ausgabecode¶
Snowflake¶
Warnung
Bitte beachten Sie, dass in diesem Fall die OWNER-Klausel aus dem Code entfernt wird, da Snowflake-Datenbanken im Besitz von Rollen und nicht von einzelnen Benutzern sind. Weitere Informationen finden Sie in der Snowflake GRANT OWNERSHIP-Dokumentation.
ISOLATION LEVEL-Klausel¶
Eingabecode¶
Redshift¶
Ausgabecode¶
Snowflake¶
Bemerkung
Die Umstellung auf Isolationslevel ist für die Zukunft geplant.
Zugehörige EWIs¶
[SSC-EWI-0073](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend
CREATE EXTERNAL TABLE¶
Beschreibung ¶
Derzeitig transformiert SnowConvert AI CREATE EXTERNAL TABLES in regulären Tabellen, was zusätzlichen Aufwand erfordert, da in externen RedShift-Tabellen gespeicherte Daten in die Snowflake-Datenbank übertragen werden müssen.
Grammatikalische Syntax ¶
See the Redshift CREATE EXTERNAL TABLE specification for this syntax.
Beispielhafte Quellcode-Muster¶
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
Create External Table AS¶
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
Empfehlungen¶
Für die Verwendung von Create External Table in Snowflake lesen Sie bitte die Snowflake-Dokumentation.
Zugehörige EWIs¶
[SSC-FDM-0004](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM. md#ssc-fdm-0004): Externe Tabelle in reguläre Tabelle übersetzt
CREATE MATERIALIZED VIEW¶
Beschreibung¶
In SnowConvert AI werden materialisierte Redshift-Ansichten in dynamische Snowflake-Tabellen umgewandelt. Um dynamische Tabellen ordnungsgemäß zu konfigurieren, müssen zwei wichtige Parameter definiert werden: TARGET_LAG und WAREHOUSE. Wenn diese Parameter in den Konfigurationsoptionen nicht spezifiziert sind, verwendet SnowConvert AI bei der Konvertierung standardmäßig die vorab zugewiesenen Werte, wie im folgenden Beispiel gezeigt.
For more information, see the Redshift CREATE MATERIALIZED VIEW documentation.
For details on the necessary parameters, see the Snowflake CREATE DYNAMIC TABLE documentation.
Grammatikalische Syntax¶
The following is the SQL syntax to create a view in Amazon Redshift. See the Redshift CREATE MATERIALIZED VIEW specification for this syntax.
Beispielhafte Quellcode-Muster¶
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
Bemerkung
Die Dokumentation zu den Tabellenattributen finden Sie in der folgenden Dokumentation:
Warnung
Die BACKUP- und AUTO REFRESH-Klauseln werden gelöscht, da sie in einer dynamischen Tabelle von Snowflake nicht anwendbar sind
Zugehörige EWIs¶
[SSC-FDM-0031](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM. md#ssc-fdm-0031): Erforderliche Parameter der dynamischen Tabelle standardmäßig eingestellt
CREATE SCHEMA¶
Grammatikalische Syntax¶
Weitere Informationen finden Sie in der [Redshift CREATE SCHEMA- Dokumentation](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_SCHEMA. html).
Beispielhafte Quellcode-Muster¶
Grundlegende Beispiele¶
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
QUOTA-Klausel¶
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
Bemerkung
In Snowflake ist es nicht erlaubt, eine Quote pro Schema zu definieren. Die Speicherverwaltung erfolgt auf Konto- und Warehouse-Level und wird von Snowflake automatisch durchgeführt. Aus diesem Grund wird sie aus dem Code entfernt.
Zugehörige EWIs¶
Es gibt keine bekannten Probleme.
CREATE-FUNCTION¶
Beschreibung¶
Dieser Befehl definiert eine benutzerdefinierte Funktion (UDF) innerhalb der Datenbank. Diese Funktionen enthalten eine wiederverwendbare Logik, die innerhalb von SQL-Abfragen aufgerufen werden kann.
Grammatikalische Syntax¶
The following is the SQL syntax to create a view in Amazon Redshift. See the Redshift CREATE VIEW specification for this syntax.
SQL-Sprache¶
Volatilitätskategorie¶
In Snowflake, VOLATILE and IMMUTABLE function volatility are functionally equivalent. Given that STABLE is inherently transformed to the default VOLATILE behavior, explicit use of STABLE will be deleted.
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
Python-Sprache¶
Innerhalb des Geltungsbereichs von SnowConvert AI wird Python für CREATE FUNCTION-Anweisungen nicht unterstützt. Folglich wird die Sprache plpythonu mit einem EWI (SSC-EWI-0073) gekennzeichnet und der Text könnte mit Parsing-Fehlern angezeigt werden.
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
Zugehörige EWIs¶
Es gibt keine bekannten Probleme.
CREATE VIEW¶
Beschreibung¶
Dieser Befehl erstellt eine Ansicht in einer Datenbank, die jedes Mal ausgeführt wird, wenn die Ansicht in einer Abfrage referenziert wird. Mit der Klausel WITH NO SCHEMA BINDING können Sie Ansichten auf eine externe Tabelle oder auf Objekte erstellen, die noch nicht existieren. Diese Klausel verlangt jedoch, dass Sie den qualifizierten Namen des Objekts oder der Tabelle angeben, auf die Sie verweisen.
Grammatikalische Syntax¶
The following is the SQL syntax to create a view in Amazon Redshift. See the Redshift CREATE VIEW specification for this syntax.
Beispielhafte Quellcode-Muster¶
Unter Berücksichtigung der obligatorischen und optionalen Klauseln in Redshifts Befehl ist die Ausgabe nach der Migration zu Snowflake sehr ähnlich.
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
Es gibt jedoch einige Ausnahmen von einer nicht unterstützten Klausel von Redshift, daher wurde ein EWI implementiert, um diesen Fall abzudecken.
Zugehörige EWIs¶
[SSC-EWI-RS0003](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/redshiftEWI. md#ssc-ewi-rs0003): Die Anweisung ohne Schemabindung wird in Snowflake nicht unterstützt.
DELETE¶
Beschreibung¶
Löscht Zeilen aus Tabellen. (Redshift SQL-Referenz: DELETE-Anweisung).
Hinweis
Diese Syntax wird in Snowflake vollständig unterstützt.
Grammatikalische Syntax¶
Beispielhafte Quellcode-Muster¶
Einrichtungsdaten¶
Redshift¶
FROM-Klausel¶
Aktualisieren Sie eine Tabelle, indem Sie Informationen aus anderen Tabellen referenzieren. In Redshift ist das Schlüsselwort FROM optional, aber in Snowflake ist es obligatorisch. Daher wird sie in Fällen, in denen sie fehlt, hinzugefügt.
Eingabecode:¶
Redshift¶
Ergebnis¶
ID |
NAME |
DEPARTMENT |
MANAGER_ID |
|---|---|---|---|
Ausgabecode:¶
Snowflake¶
Ergebnis¶
ID |
NAME |
DEPARTMENT |
MANAGER_ID |
|---|---|---|---|
WHERE-Klausel¶
Schränkt Aktualisierungen auf Zeilen ein, die eine Bedingung erfüllen. Wenn die Bedingung den Wert „true“ liefert, werden die angegebenen SET-Spalten aktualisiert. Die Bedingung kann ein einfaches Prädikat für eine Spalte sein oder eine Bedingung, die auf dem Ergebnis einer Unterabfrage basiert. Diese Klausel ist in Snowflake vollständig gleichwertig.
Eingabecode:¶
Redshift¶
Ergebnis¶
ID |
NAME |
DEPARTMENT |
MANAGER_ID |
|---|---|---|---|
1 |
Alice |
Sales |
2 |
2 |
Bob |
Sales |
1 |
3 |
Charlie |
Sales |
1 |
7 |
Grace |
Engineering |
6 |
8 |
Helen |
Engineering |
7 |
9 |
Ivy |
Engineering |
7 |
10 |
John |
Sales |
3 |
11 |
Joe |
Engineering |
5 |
Ausgabecode:¶
Snowflake¶
Ergebnis¶
ID |
NAME |
DEPARTMENT |
MANAGER_ID |
|---|---|---|---|
1 |
Alice |
Sales |
2 |
2 |
Bob |
Sales |
1 |
3 |
Charlie |
Sales |
1 |
7 |
Grace |
Engineering |
6 |
8 |
Helen |
Engineering |
7 |
9 |
Ivy |
Engineering |
7 |
10 |
John |
Sales |
3 |
11 |
Joe |
Engineering |
5 |
USING-Klausel¶
Diese Klausel führt eine Liste von Tabellen ein, wenn in der Bedingung der WHERE-Klausel auf zusätzliche Tabellen verwiesen wird. Diese Klausel ist in Snowflake vollständig gleichwertig.
Eingabecode:¶
Redshift¶
Ergebnis¶
ID |
NAME |
DEPARTMENT |
MANAGER_ID |
|---|---|---|---|
4 |
David |
Marketing |
2 |
5 |
Eva |
Marketing |
4 |
6 |
Frank |
Marketing |
4 |
7 |
Grace |
Engineering |
6 |
8 |
Helen |
Engineering |
7 |
9 |
Ivy |
Engineering |
7 |
11 |
Joe |
Engineering |
5 |
Ausgabecode:¶
Snowflake¶
Ergebnis¶
ID |
NAME |
DEPARTMENT |
MANAGER_ID |
|---|---|---|---|
4 |
David |
Marketing |
2 |
5 |
Eva |
Marketing |
4 |
6 |
Frank |
Marketing |
4 |
7 |
Grace |
Engineering |
6 |
8 |
Helen |
Engineering |
7 |
9 |
Ivy |
Engineering |
7 |
11 |
Joe |
Engineering |
5 |
WITH-Klausel.¶
Diese Klausel gibt einen oder mehrere allgemeine Tabellenausdrücke (CTE) an. Die Namen der Ausgabespalten sind optional für nicht-rekursive CTEs, aber obligatorisch für rekursive.
Da diese Klausel nicht in einer DELETE-Anweisung verwendet werden kann, wird sie in temporäre Tabellen mit ihren entsprechenden Abfragen umgewandelt. Nachdem die Anweisung DELETE ausgeführt wurde, werden diese temporären Tabellen gelöscht, um aufzuräumen, Ressourcen freizugeben und Namenskollisionen bei der Erstellung von Tabellen innerhalb derselben Sitzung zu vermeiden. Wenn außerdem eine reguläre Tabelle mit demselben Namen existiert, hat diese wieder Vorrang, da die temporäre Tabelle Vorrang vor jeder anderen Tabelle mit demselben Namen in derselben Sitzung hat.
Nicht-rekursive CTE¶
Eingabecode:¶
Redshift¶
Ergebnis¶
ID |
NAME |
DEPARTMENT |
MANAGER_ID |
|---|---|---|---|
4 |
David |
Marketing |
2 |
5 |
Eva |
Marketing |
4 |
6 |
Frank |
Marketing |
4 |
Ausgabecode:¶
Snowflake¶
Ergebnis¶
ID |
NAME |
DEPARTMENT |
MANAGER_ID |
|---|---|---|---|
4 |
David |
Marketing |
2 |
5 |
Eva |
Marketing |
4 |
6 |
Frank |
Marketing |
4 |
Rekursiv CTE¶
Eingabecode:¶
Redshift¶
Ergebnis¶
ID |
NAME |
DEPARTMENT |
MANAGER_ID |
|---|---|---|---|
1 |
Alice |
Sales |
2 |
2 |
Bob |
Sales |
1 |
3 |
Charlie |
Sales |
1 |
10 |
John |
Sales |
3 |
Ausgabecode:¶
Snowflake¶
Ergebnis¶
ID |
NAME |
DEPARTMENT |
MANAGER_ID |
|---|---|---|---|
1 |
Alice |
Sales |
2 |
2 |
Bob |
Sales |
1 |
3 |
Charlie |
Sales |
1 |
10 |
John |
Sales |
3 |
Materialisierte Ansicht löschen¶
In Redshift können Sie die Anweisung DELETE auf materialisierte Ansichten anwenden, die für Streaming-Aufnahme verwendet werden. In Snowflake werden diese Ansichten in dynamische Tabellen umgewandelt, und die DELETE-Anweisung kann nicht für dynamische Tabellen verwendet werden. Aus diesem Grund wird eine EWI hinzugefügt.
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
Bekannte Probleme ¶
Um die Funktionalität der
WITH-Klausel zu replizieren, müssen temporäre Tabellen erstellt werden, die jeden allgemeinen Tabellenausdruck (Common Table Expression, CTE) widerspiegeln. Dieser Ansatz schlägt jedoch fehl, wenn in der aktuellen Sitzung bereits eine temporäre Tabelle mit demselben Namen existiert, was einen Fehler verursacht.
Zugehörige EWIs¶
[SSC-FDM-0031](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM. md#ssc-fdm-0031): Standardmäßig festgelegte erforderliche Parameter für dynamische Tabellen.
SSC-EWI-RS0008: Materialized view is transformed into a dynamic table, and the DELETE statement cannot be used on dynamic tables in Snowflake.
EXECUTE¶
Beschreibung¶
Die Anweisung
EXECUTEIMMEDIATEerstellt und führt eine dynamische Anweisung SQL in einer einzigen Operation aus.Natives dynamisches SQL verwendet die
EXECUTEIMMEDIATE-Anweisung zum Verarbeiten der meisten dynamischen SQL-Befehle (Redshift-Sprachreferenz – EXECUTE-Anweisung)
Grammatikalische Syntax¶
Beispielhafte Quellcode-Muster¶
Verkettetes Beispiel
Eingabecode
Redshift¶
Ausgabecode
Snowflake¶
Funktionstransformation¶
Eingabecode¶
Redshift¶
Ausgabecode¶
Snowflake¶
Fehler beim Parsen von Abfragen¶
Eingabecode¶
Redshift¶
Ausgabecode¶
Snowflake¶
INTO-Klausel¶
Eingabecode¶
Redshift¶
Ausgabecode¶
Snowflake¶
Bekannte Probleme¶
1. Execution results cannot be stored in variables.¶
SnowScripting unterstützt weder INTO- noch BULK COLLECT INTO-Klauseln. Aus diesem Grund müssen die Ergebnisse auf anderem Wege übermittelt werden.
2. Dynamic SQL Execution queries may be marked incorrectly as non-runnable.¶
In einigen Szenarien kann eine Ausführungsanweisung unabhängig davon, ob sie sicher oder nicht sicher ist, kommentiert werden. Bitte berücksichtigen Sie dies:
Zugehörige EWIs¶
SSC-EWI-0027: Variable mit ungültiger Abfrage.
SSC-EWI-0030: Die folgende Anweisung enthält Verwendungen von dynamischem SQL.
INSERT¶
Beschreibung¶
Fügt neue Zeilen in eine Tabelle ein. (Redshift SQL-Referenz: INSERT-Anweisung).
Warnung
Diese Syntax wird in Snowflake teilweise unterstützt.
Grammatikalische Syntax¶
Beispielhafte Quellcode-Muster¶
Einrichtungsdaten¶
Redshift¶
Standardwerte¶
Es wird eine komplette Zeile mit ihren Standardwerten eingefügt. Wenn es Spalten gibt, die keine Standardwerte haben, werden in diese Spalten NULL-Werte eingefügt.
Diese Klausel kann keine einzelnen Spalten angeben. Sie fügt immer eine vollständige Zeile mit ihren Standardwerten ein. Außerdem können Spalten mit der NOT NULL-Einschränkung kann nicht in die Tabellendefinition aufgenommen werden. Um dieses Verhalten in Snowflake zu replizieren,fügt SnowConvert AI eine Spalte mit einemDEFAULT-Wert in die Tabelle ein. Diese Aktion fügt eine vollständige Zeile ein, wobei der Standardwert für jede Spalte verwendet wird.
Eingabecode:¶
Redshift¶
Ergebnis¶
ID |
NAME |
SALARY |
DEPARTMENT |
|---|---|---|---|
1 |
NULL |
20000 |
Marketing |
Ausgabecode:¶
Snowflake¶
Ergebnis¶
ID |
NAME |
SALARY |
DEPARTMENT |
|---|---|---|---|
1 |
NULL |
20000 |
Marketing |
Abfrage¶
Fügen Sie mit Hilfe einer Abfrage eine oder mehrere Zeilen in die Tabelle ein. Alle Zeilen, die durch die Abfrage erzeugt werden, werden in die Tabelle eingefügt. Die Abfrage muss eine Spaltenliste zurückgeben, die mit den Spalten der Tabelle kompatibel ist, obwohl die Spaltennamen nicht übereinstimmen müssen. Diese Funktionalität ist in Snowflake vollständig gleichwertig.
Eingabecode:¶
Redshift¶
Ergebnis¶
ID |
NAME |
SALARY |
DEPARTMENT |
|---|---|---|---|
1 |
Grace Lee |
32000 |
Operationen |
2 |
Hannah Gray |
26000 |
Finanzen |
Ausgabecode:¶
Snowflake¶
Ergebnis¶
ID |
NAME |
SALARY |
DEPARTMENT |
|---|---|---|---|
1 |
Grace Lee |
32000 |
Operationen |
2 |
Hannah Gray |
26000 |
Finanzen |
Bekannte Probleme ¶
Bestimmte Ausdrücke können nicht in der VALUES-Klausel in Snowflake verwendet werden. In Redshift kann zum Beispiel die Funktion [JSON_PARSE](https://docs.aws.amazon.com/redshift/latest/dg/JSON_PARSE. html) innerhalb der VALUES-Klausel verwendet werden, um einen JSON-Wert in einen SUPER-Datentyp einzufügen. In Snowflake kann die Funktion PARSE_JSON jedoch nicht in der VALUES-Klausel verwendet werden, um einen JSON-Wert in einen VARIANT-Datentyp einzufügen. Stattdessen kann eine Abfrage anstelle der VALUES-Klausel verwendet werden. Weitere Einzelheiten entnehmen Sie bitte der Snowflake-Dokumentation. Weitere Informationen finden Sie auch im folgenden Artikel.
Zugehörige EWIs¶
Es gibt keine bekannten Probleme.
MERGE¶
Grammatikalische Syntax¶
Weitere Informationen finden Sie in der Redshift MERGE-Dokumentation.
Beispielhafte Quellcode-Muster¶
UPDATE - INSERT¶
Es gibt keine Unterschiede zwischen den beiden Sprachen. Der Code wird in seiner ursprünglichen Form beibehalten.
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
DELETE - INSERT¶
Es gibt keine Unterschiede zwischen den beiden Sprachen. Der Code wird in seiner ursprünglichen Form beibehalten.
Eingabecode:¶
Redshift¶
Ausgabecode:¶
Snowflake¶
REMOVE DUPLICATES¶
Die Klausel REMOVE DUPLICATES wird in Snowflake nicht unterstützt. Es gibt jedoch einen Umgehungsmöglichkeit, mit der die ursprüngliche Verhaltensweise emuliert werden kann.
Der Ausgabecode wird drei neue Anweisungen enthalten:
Eine TEMPORARY TABLE mit den doppelten Werten aus der Quell- und Zieltabelle, die die Bedingung erfüllen
Eine INSERT-Anweisung, die die ausstehenden Werte nach der Zusammenführung zur Zieltabelle hinzufügt
Eine DROP-Anweisung, die die erzeugte temporäre Tabelle löscht.
Diese sind notwendig, da die Verhaltensweise von DROP DUPLICATES die doppelten Werte aus der Zieltabelle entfernt und dann die Werte, die der Bedingung entsprechen, aus der Quelltabelle einfügt.
Eingabecode:¶
Redshift¶
Ergebnisse¶
ID |
NAME |
|---|---|
30 |
Daisy |
22 |
Clarence |
30 |
Tony |
11 |
Alice |
23 |
David |
Ausgabecode:¶
Snowflake¶
Ergebnisse¶
ID |
NAME |
|---|---|
22 |
Clarence |
30 |
Tony |
30 |
Daisy |
11 |
Alice |
23 |
David |
Bekannte Probleme¶
Es gibt keine bekannten Probleme.
Zugehörige EWIs¶
[SSC-EWI-RS0009](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/redshiftEWI. md#ssc-ewi-rs0009): Semantische Informationen für die Quelltabelle nicht gefunden.
SSC-FDM-RS0005: Redshift MERGE rejects duplicate source rows. Snowflake allows them, which may produce different results.
UPDATE¶
Beschreibung¶
Aktualisiert Werte in einer oder mehreren Tabellenspalten, wenn eine Bedingung erfüllt ist. (Redshift SQL-Referenz: UPDATE-Anweisung).
Hinweis
Diese Syntax wird in Snowflake vollständig unterstützt.
Grammatikalische Syntax¶
Beispielhafte Quellcode-Muster¶
Einrichtungsdaten¶
Redshift¶
Alias¶
Obwohl die Grammatik von Snowflake nicht vorschreibt, dass ein Tabellenalias verwendet werden kann, ist dies in Snowflake gültiger Code.
Eingabecode:¶
Redshift¶
Ergebnis¶
ID |
NAME |
SALARY |
DEPARTMENT |
|---|---|---|---|
1 |
Alice |
505000 |
HR |
2 |
Bob |
600000 |
Engineering |
3 |
Charlie |
700000 |
Engineering |
4 |
David |
405000 |
Marketing |
5 |
Eva |
455000 |
HR |
6 |
Frank |
750000 |
Engineering |
7 |
Grace |
650000 |
Engineering |
8 |
Helen |
395000 |
Marketing |
9 |
Ivy |
485000 |
HR |
10 |
Jack |
425000 |
Engineering |
11 |
Ken |
700000 |
Marketing |
12 |
Liam |
600000 |
Engineering |
13 |
Mona |
475000 |
HR |
Ausgabecode:¶
Snowflake¶
Ergebnis¶
ID |
NAME |
SALARY |
DEPARTMENT |
|---|---|---|---|
1 |
Alice |
505000 |
HR |
2 |
Bob |
600000 |
Engineering |
3 |
Charlie |
700000 |
Engineering |
4 |
David |
405000 |
Marketing |
5 |
Eva |
455000 |
HR |
6 |
Frank |
750000 |
Engineering |
7 |
Grace |
650000 |
Engineering |
8 |
Helen |
395000 |
Marketing |
9 |
Ivy |
485000 |
HR |
10 |
Jack |
425000 |
Engineering |
11 |
Ken |
700000 |
Marketing |
12 |
Liam |
600000 |
Engineering |
13 |
Mona |
475000 |
HR |
WITH-Klausel.¶
Diese Klausel gibt einen oder mehrere allgemeine Tabellenausdrücke (CTE) an. Die Namen der Ausgabespalten sind optional für nicht-rekursive CTEs, aber obligatorisch für rekursive.
Da diese Klausel nicht in einer UPDATE-Anweisung verwendet werden kann, wird sie in temporäre Tabellen mit ihren entsprechenden Abfragen umgewandelt. Nachdem die Anweisung UPDATE ausgeführt wurde, werden diese temporären Tabellen gelöscht, um aufzuräumen, Ressourcen freizugeben und Namenskollisionen bei der Erstellung von Tabellen innerhalb derselben Sitzung zu vermeiden. Wenn außerdem eine reguläre Tabelle mit demselben Namen existiert, hat diese wieder Vorrang, da die temporäre Tabelle Vorrang vor jeder anderen Tabelle mit demselben Namen in derselben Sitzung hat.
Nicht-rekursive CTE¶
Eingabecode:¶
Redshift¶
Ergebnis¶
ID |
NAME |
SALARY |
DEPARTMENT |
|---|---|---|---|
1 |
Alice |
500000 |
HR |
2 |
Bob |
600000 |
Engineering |
3 |
Charlie |
700000 |
Engineering |
4 |
David |
546923 |
Marketing |
5 |
Eva |
546923 |
HR |
6 |
Frank |
750000 |
Engineering |
7 |
Grace |
650000 |
Engineering |
8 |
Helen |
546923 |
Marketing |
9 |
Ivy |
546923 |
HR |
10 |
Jack |
546923 |
Engineering |
11 |
Ken |
700000 |
Marketing |
12 |
Liam |
600000 |
Engineering |
13 |
Mona |
546923 |
HR |
Ausgabecode:¶
Snowflake¶
Ergebnis¶
ID |
NAME |
SALARY |
DEPARTMENT |
|---|---|---|---|
1 |
Alice |
500000 |
HR |
2 |
Bob |
600000 |
Engineering |
3 |
Charlie |
700000 |
Engineering |
4 |
David |
546923 |
Marketing |
5 |
Eva |
546923 |
HR |
6 |
Frank |
750000 |
Engineering |
7 |
Grace |
650000 |
Engineering |
8 |
Helen |
546923 |
Marketing |
9 |
Ivy |
546923 |
HR |
10 |
Jack |
546923 |
Engineering |
11 |
Ken |
700000 |
Marketing |
12 |
Liam |
600000 |
Engineering |
13 |
Mona |
546923 |
HR |
Rekursiv CTE¶
Eingabecode:¶
Redshift¶
Ergebnis¶
ID |
NAME |
SALARY |
DEPARTMENT |
|---|---|---|---|
1 |
Alice |
526666 |
HR |
2 |
Bob |
670000 |
Engineering |
3 |
Charlie |
773333 |
Engineering |
4 |
David |
433333 |
Marketing |
5 |
Eva |
475000 |
HR |
6 |
Frank |
825000 |
Engineering |
7 |
Grace |
721666 |
Engineering |
8 |
Helen |
423000 |
Marketing |
9 |
Ivy |
506000 |
HR |
10 |
Jack |
484000 |
Engineering |
11 |
Ken |
743333 |
Marketing |
12 |
Liam |
670000 |
Engineering |
13 |
Mona |
495668 |
HR |
Ausgabecode:¶
Snowflake¶
Ergebnis¶
ID |
NAME |
SALARY |
DEPARTMENT |
|---|---|---|---|
1 |
Alice |
526667 |
HR |
2 |
Bob |
670000 |
Engineering |
3 |
Charlie |
773333 |
Engineering |
4 |
David |
433333 |
Marketing |
5 |
Eva |
475000 |
HR |
6 |
Frank |
825000 |
Engineering |
7 |
Grace |
721667 |
Engineering |
8 |
Helen |
423000 |
Marketing |
9 |
Ivy |
506000 |
HR |
10 |
Jack |
484000 |
Engineering |
11 |
Ken |
743333 |
Marketing |
12 |
Liam |
670000 |
Engineering |
13 |
Mona |
495667 |
HR |
SETDEFAULT-Werte¶
Eingabecode:¶
Redshift¶
Ergebnis¶
ID |
NAME |
SALARY |
DEPARTMENT |
|---|---|---|---|
1 |
Alice |
20000 |
Sales |
2 |
Bob |
600000 |
Engineering |
3 |
Charlie |
700000 |
Engineering |
4 |
David |
400000 |
Marketing |
5 |
Eva |
20000 |
Sales |
6 |
Frank |
750000 |
Engineering |
7 |
Grace |
650000 |
Engineering |
8 |
Helen |
390000 |
Marketing |
9 |
Ivy |
20000 |
Sales |
10 |
Jack |
420000 |
Engineering |
11 |
Ken |
700000 |
Marketing |
12 |
Liam |
600000 |
Engineering |
13 |
Mona |
20000 |
Sales |
Ausgabecode:¶
Snowflake¶
Ergebnis¶
ID |
NAME |
SALARY |
DEPARTMENT |
|---|---|---|---|
1 |
Alice |
20000 |
Sales |
2 |
Bob |
600000 |
Engineering |
3 |
Charlie |
700000 |
Engineering |
4 |
David |
400000 |
Marketing |
5 |
Eva |
20000 |
Sales |
6 |
Frank |
750000 |
Engineering |
7 |
Grace |
650000 |
Engineering |
8 |
Helen |
390000 |
Marketing |
9 |
Ivy |
20000 |
Sales |
10 |
Jack |
420000 |
Engineering |
11 |
Ken |
700000 |
Marketing |
12 |
Liam |
600000 |
Engineering |
13 |
Mona |
20000 |
Sales |
SET-Klausel.¶
Sie ist für die Änderung der Werte in den Spalten verantwortlich. Ähnlich wie bei Snowflake werden Aktualisierungsabfragen mit mehreren Übereinstimmungen pro Zeile einen Fehler auslösen, wenn der Konfigurationsparameter ERROR_ON_NONDETERMINISTIC_UPDATE auf „true“ gesetzt ist. Dieses Flag funktioniert in Snowflake auf die gleiche Weise und verwendet sogar den gleichen Namen: ERROR_ON_NONDETERMINISTIC_UPDATE.
Wenn dieses Flag jedoch deaktiviert ist, wird kein Fehler zurückgegeben, und eine der übereinstimmenden Zeilen wird zur Aktualisierung der Zielzeile verwendet. Die ausgewählte verbundene Zeile ist in beiden Sprachen nicht deterministisch und willkürlich. Die Verhaltensweise ist möglicherweise bei verschiedenen Ausführungen nicht konsistent, was zu Dateninkonsistenzen führen kann.
Datenkonfiguration:¶
Redshift¶
Eingabecode:¶
Redshift¶
Ergebnis¶
K |
V |
|---|---|
0 |
16 |
Ausgabecode:¶
Snowflake¶
Ergebnis¶
K |
V |
|---|---|
0 |
14 |
Bekannte Probleme ¶
Update queries with multiple matches per row may cause data inconsistencies. Although both platforms have the flag ERROR_ON_NONDETERMINISTIC_UPDATE, these values will always be nondeterministic. Snowflake offers recommendations for handling these scenarios. See the Snowflake UPDATE examples for more details.
Um die Funktionalität der
WITH-Klausel zu replizieren, müssen temporäre Tabellen erstellt werden, die jeden allgemeinen Tabellenausdruck (Common Table Expression, CTE) widerspiegeln. Dieser Ansatz schlägt jedoch fehl, wenn in der aktuellen Sitzung bereits eine temporäre Tabelle mit demselben Namen existiert, was einen Fehler verursacht.
Zugehörige EWIs¶
Es gibt keine bekannten Probleme.