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

Migration von Datenstrukturen und Mapping von Datentypen

13.09.2021
Serie: Migration von Oracle nach Snowflake, Teil 2

Wir haben uns über die große Resonanz auf unseren ersten Teil der Serie sehr gefreut. Im nächsten Teil beschäftigen wir uns eingehend mit der Datenmigration selbst. Wenn Sie möchten, dass wir Ihren Stack überprüfen und Ihnen bei Ihren Migrationsherausforderungen helfen, können Sie uns gerne eine Nachricht schicken. Erfahren Sie, wie man Daten von Oracle nach Snowflake migriert.

Die Cloud-Datenplattform von Snowflake unterstützt sowohl den ANSI-SQL-Standard als auch analytische Erweiterungen wie Fensterfunktionen. Das bedeutet, dass die meisten Datenbankobjekte und der Code problemlos von Oracle nach Snowflake migriert werden können.

Um die Migration vorzubereiten, müssen Sie alle Datenbankobjekte auswählen, die migriert werden sollen. Dazu können Tabellen, Ansichten, Sequenzen und Funktionen gehören. Um all diese Objekte in Snowflake zu erstellen, müssen Sie DDL-Skripte ausführen – so wie Sie es auch in Oracle tun würden. Dabei sind einige Punkte zu beachten, die in den folgenden Abschnitten näher erläutert werden.

Keine speicherbezogenen Optionen in Snowflake DDL

Snowflake kümmert sich um alles, was mit der physischen Speicherung von Daten zu tun hat, und als Benutzer müssen Sie keine Indizes, Partitionen oder Speicherklauseln wie z. B. den Tablespace-Namen definieren. Sie benötigen lediglich die grundlegende DDL, wie CREATE TABLE, CREATE VIEW usw.

Traditionelle relationale Datenbanken wie Oracle verwenden Indizes, um die Leistung zu verbessern. Snowflake führt mit seiner MPP-Architektur die parallele Verarbeitung im Hintergrund durch (es ist nicht erforderlich, einen Hinweis auf die parallele Verarbeitung zu geben, wie es in Oracle der Fall ist), sodass keine Indizes benötigt oder unterstützt werden. Da Snowflake keine Indizes verwendet, müssen Sie Ihre Indizes und Partitionen nicht in die DDL-Skripte einbeziehen.

Webinar recording

Oracle Exadata zu Snowflake

auf Englisch

Snowflake verwaltet alle Datenbankobjekte hinter den Kulissen, ohne dass Datendateien, Tabellenpartitionen oder Unterpartitionen verwendet werden müssen. Der Speicherplatz wächst und schrumpft, wenn Sie Daten hinzufügen oder löschen, ohne dass der Benutzer eingreifen muss. Das bedeutet auch, dass Snowflake kein Tablespace-Konzept hat, weshalb Sie Ihre DDL-Anweisungen, die Tabellen ohne Speicherklauseln erstellen, ausführen können.

Oracle erzwingt Primärschlüssel- und Fremdschlüssel-Beschränkungen. Snowflake unterstützt zwar die Syntax zur Definition von Primär- und Fremdschlüsseln, aber sie werden nicht erzwungen. Falls Sie Ladeprozesse haben, die sich auf Beschränkungen stützen, um doppelte Einträge und verwaiste Datensätze zu verhindern, müssen Sie diese umgestalten.

DDL-Skripte für die Migration vorbereiten

Wenn Sie bereits über DDL-Skripte zur Erstellung von Objekten in Oracle verfügen, können Sie dieselben Skripte zur Erstellung von Objekten in Snowflake verwenden. Möglicherweise müssen Sie einige Datentypen in für Snowflake optimierte Datentypen ändern. Dies wird im folgenden Abschnitt erläutert.

Wenn Sie noch keine DDL-Skripte zum Erstellen von Objekten in Oracle haben oder das vorhandene Skript veraltet ist, können Sie ein Datenmodellierungstool wie z. B. Oracle SQL Developer Data Modeler oder SqlDBM (warum wir von Letzterem wirklich überzeugt sind, können Sie hier lesen) oder ein anderes Datenmodellierungstool verwenden, um die vorhandene Oracle-Datenbank zurückzuentwickeln und dann DDL-Skripte mit ANSI SQL zu erstellen. Die meisten der generierten Skripte laufen in Snowflake, wobei einige Änderungen aufgrund von Oracle-Spezifikationen, die sich nicht in ANSI SQL übersetzen lassen, erforderlich sein können.

Wenn Sie keine DDL-Skripte und keinen Zugang zu einem Datenmodellierungstool haben, können Sie die DDL selbst generieren, indem Sie die Metadaten in den Oracle-Data-Dictionary-Tabellen lesen. Auch hier benötigen Sie nur die Objektdefinitionen ohne jegliche speicherbezogenen Informationen. Falls Sie eine Datentypkonvertierung vornehmen müssen, können Sie dies bereits bei der Erstellung der DDL-Skripte tun.

Mapping von Datentypen

Snowflake unterstützt die meisten grundlegenden SQL-Datentypen zur Verwendung in Spalten, lokalen Variablen, Ausdrücken, Parametern und an allen anderen relevanten Stellen. Datentypen werden automatisch erzwungen, wann immer dies notwendig und möglich ist.

Eine umfassende Liste der von Snowflake unterstützten Datentypen finden Sie in der Snowflake-Dokumentation. Die meisten Datentypen lassen sich ohne Weiteres von Oracle in Snowflake konvertieren. Es gibt jedoch einige Punkte, die zu beachten sind.

Numerische Datentypen

Snowflake unterstützt alle gängigen numerischen Datentypen zur Speicherung numerischer Werte, einschließlich Ganzzahl, Festkomma und Fließkomma. Bei der Konvertierung numerischer Datentypen aus Oracle ist zu beachten, dass Oracle den Datentyp NUMBER ohne Skalierung und Genauigkeit unterstützt. Wenn in solchen Fällen ein Wert eingegeben wird und die Genauigkeit nicht spezifiziert ist, speichert Oracle den Wert wie angegeben, einschließlich aller Dezimalstellen.

Wenn in Snowflake Skalierung und Genauigkeit nicht definiert sind, wird eine Genauigkeit von 0 angenommen. Dies hat zur Folge, dass bei der Konvertierung von Daten, die in einer Spalte des Datentyps NUMBER ohne Skalierung oder Genauigkeit in Oracle gespeichert sind, die Zahlen in Snowflake als ganze Zahlen ohne Dezimalstellen gespeichert werden. Im Vorfeld sind einige Datenanalysen erforderlich, um die Genauigkeit und Skalierung der Daten in Oracle zu überprüfen und den entsprechenden Datentyp zur Verwendung in Snowflake zu bestimmen. Sie sollten die DDL-Skripte, die Objekte in Snowflake erstellen, entsprechend aktualisieren.

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

Text-Datentypen

Snowflake unterstützt die üblichen String- und Binärdatentypen. Alle Zeichenketten-Datentypen werden als Strings variabler Länge gespeichert. Der in Oracle häufig verwendete Datentyp VARCHAR2 wird auch in Snowflake erkannt und intern als VARCHAR gespeichert, sodass DDL-Skripte in Bezug auf String-Datentypen unverändert bleiben können.

Datum- und Zeit-Datentypen

Der Datumstyp DATE in Snowflake enthält nur den Datumswert ohne Zeitangabe, während in Oracle der Datumstyp DATE auch die Zeitangabe enthalten kann. Bei der Migration von DATE-Werten von Oracle nach Snowflake wird empfohlen, TIMESTAMP_NTZ als Snowflake-Datentyp zu verwenden, um die Zeitkomponente zu erhalten. Andernfalls besteht die Gefahr, dass die Zeitwerte verloren gehen. Auch hier sollten Sie die DDL-Skripte entsprechend aktualisieren.

Das Datumsmodellformat RR, mit dem Sie in Oracle Daten des 20. Jahrhunderts im 21. Jahrhundert speichern können, indem Sie nur die letzten beiden Ziffern des Jahres eingeben, wird in Snowflake nicht unterstützt. Stattdessen verhält sich das YY-Modellformat in Snowflake ähnlich: Wenn eine zweistellige Jahreszahl eingegeben wird, wird sie, wenn sie zwischen 00 und 69 liegt, in eine Jahreszahl zwischen 2000 und 2069 übersetzt, andernfalls wird 19 als die ersten beiden Ziffern der Jahreszahl verwendet.

Die obigen Ausführungen sind eine Zusammenfassung von Beispielen für die häufigsten Datentypkonvertierungen zwischen Oracle und Snowflake. Bleiben Sie dran – wir werden bald noch mehr Wissen mit Ihnen teilen!

Maja Ferle, Senior Consultant