Serie: Die große Migration nach SnowflakeSerie: Von Oracle zu Snowflake Back to Series

SQL-Code migrieren

11.09.2021
Serie: Migration von Oracle nach Snowflake, Teil 3

Da die Snowflake Data Cloud aNSI-kompatible SQL verwendet, wird der Großteil Ihres in Oracle vorhandenen SQL-Codes in Snowflake ausgeführt. Aufgrund der zahlreichen Oracle-spezifischen SQL-Erweiterungen werden Sie jedoch höchstwahrscheinlich Anpassungen vornehmen müssen, wenn Sie SQL-Code von Oracle nach Snowflake migrieren.

Im Folgenden finden Sie Beispiele für einige der Änderungen, die Sie an Ihren Oracle-SQL-Abfragen und Ihrem Code vornehmen müssen, damit sie in Snowflake korrekt ausgeführt werden. Bitte beachten Sie, dass diese Liste nicht erschöpfend ist.


Funktionen, Prozeduren und Pakete migrieren

Snowflake unterstützt Funktionen und Prozeduren, aber keine Pakete. Jeder Code, der in Oracle PL/SQL geschrieben wurde, wird in Snowflake nicht ausgeführt und muss umgeschrieben werden.

SQL-Funktionen, die ANSI-SQL-Syntax verwenden, können problemlos von Oracle nach Snowflake migriert werden. Wenn jedoch Oracle-spezifischer SQL- oder PL/SQL-Code in Funktionen verwendet wurde, müssen diese in Snowflake mit JavaScript umgeschrieben werden. Ähnlich wie in Oracle kann eine Funktion in Snowflake ein skalares oder ein tabellarisches Ergebnis zurückgeben.

Gespeicherte Prozeduren, die Oracle PL/SQL verwenden, müssen in Snowflake umgeschrieben werden. In Snowflake gespeicherte Prozeduren verwenden JavaScript für die Kontrollstrukturen wie Verzweigungen und Schleifen, kombiniert mit SQL-Anweisungen, die über die JavaScript-API ausgeführt werden. Ähnlich wie in Oracle können gespeicherten Prozeduren Rechte zur Ausführung durch Benutzer gewährt werden, auch wenn die Benutzer keine Rechte für die zugrunde liegenden Objekte haben, auf die die Prozeduren zugreifen.

In Snowflake gibt es kein Paketkonzept. Wenn Sie Prozeduren und Funktionen migrieren, die Teil von Oracle-Paketen sind, müssen Sie diese als eigenständige Prozeduren und Funktionen erstellen.

Beschleunigen Sie Ihren Weg zur Snowflake

Snowflake Services

Mit wem könnte man sie besser erkunden als mit Snowflakes innovativstem Partner in der EMEA-Region

Beschränkungen und ROWID

Obwohl die Snowflake-SQL-Syntax die Erstellung von Einschränkungen wie Primärschlüsseln und Fremdschlüsseln unterstützt, werden sie nur aus Kompatibilitätsgründen verwendet und nicht physisch erzwungen. Wenn Sie SQL-Code haben, der sich auf Einschränkungen stützt, werden diese in Snowflake nicht fehlschlagen, sodass diese Logik überarbeitet und umgestaltet werden muss.

Neben dem Primärschlüssel gibt es in Oracle noch die Pseudospalte ROWID, die die Adresse der Zeile zurückgibt und auch zur eindeutigen Identifizierung eines Datensatzes verwendet werden kann. Snowflake verfügt über keine entsprechende Funktion. Bei der Migration von Oracle nach Snowflake muss jede Logik, die sich auf ROWID stützt, umgeschrieben werden, sodass ein anderes Mittel zur Adressierung einzelner Zeilen verwendet werden muss. Beispielsweise kann stattdessen eine Primärschlüsselspalte verwendet werden, sofern sie durch zusätzliche Programmierlogik erzwungen wird.

Daten über eine Ansicht aktualisieren

Oracle ermöglicht das Ausführen von Einfügungen, Aktualisierungen und Löschungen in einer Ansicht, wodurch wiederum die zugrunde liegende Tabelle aktualisiert wird. In Snowflake müssen Sie Einfügungen, Aktualisierungen und Löschungen immer über eine Tabelle und nicht über eine Ansicht ausführen. Jeder Code in Oracle, der Einfüge-, Aktualisierungs- oder Löschvorgänge über eine Ansicht ausführt – dazu gehören auch Inline-Ansichten innerhalb von Abfragen – muss in Snowflake umgeschrieben werden, damit er die erforderlichen Vorgänge in den zugrunde liegenden Tabellen ausführt.

Datumsarithmetik

Die Datumsarithmetik von Oracle ermöglicht das Addieren und Subtrahieren von Datumsangaben. Sie können zum Beispiel ein Datum von einem anderen Datum subtrahieren, um die Anzahl der Tage zwischen den Datumsangaben zu erhalten. In Snowflake müssen Sie für eine solche Datumsarithmetik die Funktion DATEDIFF verwenden, die drei Parameter und zusätzlich zu den beiden Datumsangaben auch einen Parameter benötigt, der die Einheit (z. B. Tag, Stunde usw.) der resultierenden Differenz definiert.

Oracle kann auch ganze Zahlen zu Datumsangaben addieren oder von diesen subtrahieren, wobei standardmäßig Tage zu einem bestimmten Datum addiert oder von diesem subtrahiert werden. Auch diese Syntax wird in Snowflake nicht unterstützt. Stattdessen müssen Sie die Funktion DATEADD verwenden, um Einheiten zu Datumsangaben oder Zeitstempeln in Snowflake zu addieren oder von diesen zu subtrahieren.

Da der Datentyp DATE in Oracle sowohl das Datum als auch die Zeit speichert, wird häufig die Funktion TRUNC verwendet, um nur das Datum abzurufen. Obwohl Snowflake die Funktion TRUNC auch für die Datentypen DATE und TIMESTAMP unterstützt, ist ein zusätzlicher Parameter erforderlich, der die Einheit spezifiziert (z. B. Tag, Stunde usw.), auf die das Datum oder der Zeitstempel gekürzt werden soll. Bei der Migration von Oracle nach Snowflake muss die Funktion TRUNC um den Parameter „Unit“ ergänzt werden.

Webinar recording

Oracle Exadata zu Snowflake

auf Englisch

Hinweise zur Abfrageoptimierung

Hinweise zur Abfrageoptimierung, die in Oracle häufig verwendet werden, sind in Snowflake nicht relevant, da sie für den Oracle Optimizer bestimmt sind, der sich von der Art und Weise, wie Snowflake Abfragen optimiert, unterscheidet. Technisch gesehen müssen Hinweise bei der Migration von Oracle nach Snowflake nicht entfernt werden, da sie in Snowflake als Kommentare erscheinen und daher ignoriert werden. Für eine bessere Lesbarkeit des Codes kann es jedoch hilfreich sein, alle Hinweise während der Migration zu entfernen.

Eine letzte Anmerkung: Die DUAL-Tabelle ist eine spezielle einzeilige, einspaltige Tabelle, die in Oracle häufig zur Auswahl von Pseudospalten verwendet wird. Snowflake unterstützt auch die DUAL-Tabelle, sodass jeder Code, der diese Tabelle in Oracle verwendet, auch in Snowflake läuft.

Wie aus den obigen Beispielen ersichtlich ist, gibt es neben der Einhaltung des ANSI-SQL-Standards noch eine Reihe von Unterschieden, die bei der Migration von Oracle nach Snowflake zu beachten sind. Einige dieser Unterschiede lassen sich relativ leicht beheben, vor allem mit der Funktion Suchen und Ersetzen. Andere wiederum erfordern mehr Aufwand, wenn die Programmierlogik umgeschrieben werden muss. Es gibt kein Standardrezept für die Migration von SQL-Code von Oracle nach Snowflake, da jede Migration anders abläuft, je nachdem, wie viele Oracle-Spezifikationen in der SQL verwendet wurden.

Maja Ferle, Senior Consultant

Wenn Sie Beratung zu Ihrem „Oracle nach Snowflake“-Migrationsprojekt benötigen, können Sie uns gerne kontaktieren.

Lassen Sie uns reden