SnowConvert AI – Oracle – Datentypen¶
Dieser Abschnitt zeigt Äquivalente zwischen Datentypen in Oracle und Snowflake und enthält einige Hinweise zu arithmetischen Unterschieden.
Oracle |
Snowflake |
|---|---|
*Weitere Informationen über den Link |
|
VARCHAR |
|
FLOAT |
|
FLOAT |
|
BINARY |
|
CHAR [N] |
|
VARCHAR |
|
TIMESTAMP |
|
FLOAT |
|
VARCHAR(20) |
|
VARCHAR(20) |
|
VARIANT |
|
VARCHAR |
|
BINARY |
|
NCHAR [N] |
|
VARCHAR |
|
NUMBER(p, s) |
|
VARCHAR [N] |
|
BINARY |
|
VARCHAR(18) |
|
VARCHAR [N] |
|
Wird derzeit nicht unterstützt. |
|
*noch zu definieren_ |
|
*noch zu definieren_ |
|
VARIANT |
|
*noch zu definieren_ |
|
*noch zu definieren_ |
|
TIMESTAMP |
|
TIMESTAMP_TZ |
|
TIMESTAMP_LTZ |
|
*noch zu definieren_ |
|
VARCHAR(18) |
|
VARCHAR |
|
VARCHAR |
|
VARIANT |
Anmerkungen zu den arithmetischen Operationen¶
Bitte beachten Sie, dass jede Operation, die mit numerischen Datentypen durchgeführt wird, intern als Zahl gespeichert wird. Außerdem kann es je nach der durchgeführten Operation zu einem Fehler kommen, der damit zusammenhängt, wie Zwischenwerte in Snowflake gespeichert werden. Weitere Informationen finden Sie in diesem Beitrag von Snowflake über Zwischenwerte in Snowflake.
ANSI-Datentypen¶
Beschreibung¶
SQL-Anweisungen, die Tabellen und Cluster erstellen, können auch ANSI-Datentypen und Datentypen aus den IBM-Produkten SQL/DS und DB2 verwenden. Oracle erkennt den ANSI- oder IBM-Datentypnamen, der sich vom Datentypnamen der Oracle-Datenbank unterscheidet. Es konvertiert den Datentyp in den entsprechenden Oracle Data Type, nimmt den Oracle-Datentyp als Namen des Spalten-Datentyps auf und speichert die Spaltendaten im Oracle-Datentyp auf der Grundlage der in den folgenden Tabellen aufgeführten Konvertierungen. (Oracle Language Reference ANSI, DB2, and SQL/DS Data Types).
Bei der Erstellung einer neuen Tabelle behandeln Oracle und Snowflake einige Datentypen als Synonyme und Aliasnamen und wandeln sie in den Standarddatentyp um. Wie in der nächsten Tabelle dargestellt:
ANSI |
ORACLE |
SNOWFLAKE |
|---|---|---|
CHARACTER (n) |
CHAR (n) |
VARCHAR |
CHAR (n) |
CHAR (n) |
VARCHAR |
CHARACTER VARYING (n) |
VARCHAR2 (n) |
VARCHAR |
CHAR VARYING (n) |
VARCHAR2 (n) |
VARCHAR |
NATIONAL CHARACTER (n) |
NCHAR (n) |
VARCHAR* |
NATIONAL CHAR (n) |
NCHAR (n) |
VARCHAR* |
NCHAR (n) |
NCHAR (n) |
VARCHAR |
NATIONAL CHARACTER VARYING (n) |
NVARCHAR2 (n) |
VARCHAR* |
NATIONAL CHAR VARYING (n) |
NVARCHAR2 (n) |
VARCHAR* |
NCHAR VARYING (n) |
NVARCHAR2 (n) |
NUMBER (p, s) |
NUMERIC [(p, s)] |
NUMBER (p, s) |
NUMBER (p, s) |
DECIMAL [(p, s)] |
NUMBER (p, s) |
NUMBER (38) |
INTEGER |
NUMBER (38) |
NUMBER (38) |
INT |
NUMBER (38) |
NUMBER (38) |
SMALLINT |
NUMBER (38) |
NUMBER (38) |
FLOAT |
FLOAT (126) |
DOUBLE |
DOUBLE PRECISION |
FLOAT (126) |
DOUBLE |
REAL |
FLOAT (63) |
DOUBLE |
Weitere Informationen über die Übersetzungsspezifikation der Oracle-Datentypen finden Sie unter Oracle – Integrierte Datentypen.
Bemerkung
VARCHAR*: Fast alle ANSI-Datentypen lassen sich in Snowflake kompilieren, aber die mit einem Sternchen gekennzeichneten Datentypen werden manuell in VARCHAR konvertiert.
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Datentypanpassung¶
Die Datentypkonvertierung während eines Datenbankmigrationsprozesses ist etwas, das viele Benutzende benötigen, um Präzisionswerte genauer zu personalisieren und einzurichten. Aus diesem Grund ermöglicht SnowConvert AI es der Datentypanpassung, Regeln für die Datentyptransformation unter Berücksichtigung der Datentypherkunft und des Spaltennamens festzulegen.
Unterstützte Datentypen¶
Die folgenden Datentypen werden unterstützt.
NUMBER
Struktur von JSON¶
SnowConvert AI erhält eine JSON-Datei mit der folgenden Struktur.
{
"types" : {
},
"columns": [
{
"nameExpression" : "",
"targetType" : ""
}
]
}
Das Objekt types definiert den ursprünglichen Datentyp und den Datentyp, den das Ziel haben soll. Sie können auch eine allgemeine Regel definieren, die den ursprünglichen Datentyp mit oder ohne Genauigkeit konvertiert. Beispiel:
"types" : {
"NUMBER" : "NUMBER(11, 2)",
"NUMBER(10, 0)" : "NUMBER(3, 0)"
}
Das Objekt columns ist ein Array, und jedes Objekt des Arrays definiert den Namen oder den Regex-Ausdruck der Spalten, um den Typ zu ändern.
"columns": [
{
"nameExpression" : "MONTH",
"targetType" : "NUMBER(2,0)"
}
]
Bemerkung
Wenn Sie reguläre Ausdrücke verwenden, kann die Migration beeinträchtigt werden, wenn die Regex nicht korrekt ist.
Anpassung Priorität¶
Möglicherweise gibt es Regeln für die Anpassung, die für dasselbe Objekt gelten. Es wird jedoch nur eine ausgewählt. SnowConvert AI berücksichtigt bei der Festlegung der zu befolgenden Regel die folgende Aspekte.
Die erste Regel in Spalten ist von oben nach unten angeordnet.
Die unter Typ definierte Regel unter Berücksichtigung der Genauigkeit.
Die allgemeine Regel ist für Datentyp definiert.
Die Regel ist in SnowConvert definiert.
Beispiel¶
Nehmen wir an, wir haben den folgenden Eingabecode.
Eingabecode
CREATE TABLE employees (
employee_ID NUMBER,
manager_YEAR NUMBER(10, 0),
manager_MONTH NUMBER(10, 0)
);
Und die folgenden Umbenennungsinformationen
Anpassungsdatei (.JSON)
{
"types" : {
"NUMBER" : "NUMBER(11, 2)",
"NUMBER(10, 0)" : "NUMBER(3, 0)"
},
"columns": [
{
"nameExpression" : "MONTH",
"targetType" : "NUMBER(2,0)"
}
]
}
Dies wäre der Ausgabecode mit und ohne Anpassungsdatentypen.
Snowflake-Ausgabecode¶
Ohne Umbenennung¶
CREATE OR REPLACE TABLE employees (
employee_ID NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
manager_YEAR NUMBER(10) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
manager_MONTH NUMBER(10) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
;
Mit Umbenennung¶
CREATE OR REPLACE TABLE employees (
employee_ID NUMBER(11, 2),
manager_YEAR NUMBER(3, 0),
manager_MONTH NUMBER(2, 0)
)
;
Beachten Sie, dass alle NUMBER Typen in die in der JSON-Datei angegebenen Typen migriert werden.