SnowConvert: Teradata DDL-Anweisungen¶
Tabellen¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Die TABLE-Anweisung von Teradata wird in die TABLE-Syntax von Snowflake übersetzt.
Weitere Informationen zu TABLEs in Teradata finden Sie hier.
Beispielhafte Quellcode-Muster¶
Create Table, einfach¶
Teradata
CREATE TABLE table1, no fallback,
no before journal,
no after journal (
c1 INTEGER NOT NULL,
f1 INTEGER NOT NULL,
p1 INTEGER NOT NULL,
DATE,
TIME,
FOREIGN KEY(f1) REFERENCES WITH CHECK OPTION table2 (d1)
)
UNIQUE PRIMARY INDEX(c1)
PARTITION BY COLUMN(p1);
Snowflake
CREATE OR REPLACE TABLE table1 (
c1 INTEGER NOT NULL,
f1 INTEGER NOT NULL,
p1 INTEGER NOT NULL,
DATE,
TIME,
FOREIGN KEY(f1) REFERENCES table2 (d1) ,
UNIQUE (c1)
)
--** SSC-PRF-0007 - PERFORMANCE REVIEW - CLUSTER BY **
CLUSTER BY (p1)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Tabellentyp-Klausel - SET und MULTISET¶
Die Typklausel von Teradata bestimmt, ob doppelte Zeilen erlaubt sind (MULTISET) oder nicht (SET).
Teradata¶
-- Set semantics
CREATE SET TABLE table1 (
column1 INTEGER
);
--Multiset semantics
CREATE MULTISET TABLE table2(
column1 INTEGER
);
Snowflake¶
-- Set semantics
--** SSC-FDM-TD0024 - SET TABLE FUNCTIONALITY NOT SUPPORTED. TABLE MIGHT HAVE DUPLICATE ROWS **
CREATE OR REPLACE TABLE table1 (
column1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
--Multiset semantics
CREATE OR REPLACE TABLE table2 (
column1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Flüchtige und globale temporäre Tabellen¶
Die Tabellen Volatile und Global Temporary von Teradata werden für die temporäre Speicherung von Daten verwendet. Der Unterschied besteht darin, dass die Tabellendefinition (DDL) von globalen temporären Tabellen im Data Dictionary gespeichert wird, während die Definition von flüchtigen Tabellen nicht gespeichert wird.
Teradata¶
--Global Temporary Table
CREATE MULTISET GLOBAL TEMPORARY TABLE table1 (
column1 INTEGER
);
--Volatile Table
CREATE MULTISET VOLATILE TABLE table3 (
column1 INTEGER
);
Snowflake¶
--Global Temporary Table
--** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE table1 (
column1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
--Volatile Table
CREATE OR REPLACE TEMPORARY TABLE table3 (
column1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Mit Daten und ohne Datenoption¶
Teradata
-- With data
CREATE TABLE table1 AS table2 WITH DATA
-- With no data
CREATE TABLE table1 AS table2 WITH NO DATA
Snowflake
-- With data
CREATE OR REPLACE TABLE table1 CLONE table2
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
-- With no data
--** SSC-FDM-0019 - SEMANTIC INFORMATION COULD NOT BE LOADED FOR table1. CHECK IF THE NAME IS INVALID OR DUPLICATED. **
CREATE OR REPLACE TABLE table1 LIKE table2
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Snowflake’s reservierte & eingeschränkte Schlüsselwörter¶
SnowConvert erleichtert die nahtlose Migration von SQL zu Snowflake, indem es die Herausforderungen im Zusammenhang mit reservierten Schlüsselwörtern angeht. Gemäß der Dokumentation für reservierte und eingeschränkte Schlüsselwörter in Snowflake können bestimmte Schlüsselwörter nicht als Spaltennamen, Tabellennamen oder Aliasnamen verwendet werden, ohne dass eine besondere Behandlung erfolgt. SnowConvert enthält Funktionen, die die Kompatibilität des Codes SQL in solchen Fällen sicherstellen.
Reservierte ANSI Schlüsselwörter als Spaltennamen
SnowConvert Bei Spaltennamen, die mit ANSI oder den reservierten Schlüsselwörtern von Snowflake **** übereinstimmen, wird der Spaltenname automatisch in doppelte Anführungszeichen ("
) eingeschlossen, um den Syntaxregeln von Snowflake zu entsprechen. Diese Anpassung stellt sicher, dass Abfragen mit diesen Spaltennamen in Snowflake korrekt kompiliert werden, ohne dass ein manuelles Eingreifen erforderlich ist.
Beispiel:
CREATE TABLE ReservedKeywords (
"CREATE" VARCHAR(50),
FOLLOWING VARCHAR(50),
"ILIKE" VARCHAR(50),
RLIKE VARCHAR(50)
);
Snowflake
CREATE OR REPLACE TABLE ReservedKeywords (
"CREATE" VARCHAR(50),
"FOLLOWING" VARCHAR(50),
"ILIKE" VARCHAR(50),
"RLIKE" VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "11/28/2024", "domain": "test" }}'
;
Snowflake-spezifische reservierte Schlüsselwörter
Spalten, die Snowflake-spezifischen reservierten Schlüsselwörtern (z. B. CONSTRAINT
, CURRENT_DATE
, CURRENT_TIME
) entsprechen, können immer noch Kompilierungsprobleme verursachen, selbst wenn sie in Anführungszeichen eingeschlossen sind. SnowConvert erkennt diese Instanzen und erzeugt eine Warnung mit dem Code [SSC-EWI-0045
](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0045), die den Benutzer dazu auffordert, diese Spalten zu überprüfen und möglicherweise umzubenennen, um sie kompatibel zu machen.
Beispiel:
CREATE TABLE ColumnReservedNames (
"CONSTRAINT" VARCHAR(50),
"CURRENT_DATE" VARCHAR(50),
"CURRENT_TIME" VARCHAR(50)
);
Snowflake
CREATE OR REPLACE TABLE ColumnReservedNames (
!!!RESOLVE EWI!!! /*** SSC-EWI-0045 - COLUMN NAME 'CONSTRAINT' IS A SNOWFLAKE RESERVED KEYWORD ***/!!!
"CONSTRAINT" VARCHAR(50),
!!!RESOLVE EWI!!! /*** SSC-EWI-0045 - COLUMN NAME 'CURRENT_DATE' IS A SNOWFLAKE RESERVED KEYWORD ***/!!!
"CURRENT_DATE" VARCHAR(50),
!!!RESOLVE EWI!!! /*** SSC-EWI-0045 - COLUMN NAME 'CURRENT_TIME' IS A SNOWFLAKE RESERVED KEYWORD ***/!!!
"CURRENT_TIME" VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "11/28/2024", "domain": "test" }}'
;
Bekannte Probleme¶
1. Create table options not supported¶
Wie im Beispiel „Einfaches Create Table“ gezeigt, unterstützt Snowflake die Optionen zum Erstellen von Teradata-Tabellen nicht. Sie werden entfernt.
2. Partition by performance issues¶
Im Beispiel „Einfaches Create Table“ wird die Anweisung partition by
aufgrund von Leistungserwägungen entfernt.
3. Primary Index moved¶
In Teradata wird die Primärindexeinschränkung außerhalb der Anweisung create table
deklariert, in Snowflake muss sie jedoch darin enthalten sein, wie im Beispiel „Einfaches Create Table“ gezeigt.
4. SET semantics not supported¶
Wie im Beispiel „Tabellentyp-Klausel - SET und MULTISET“ gezeigt, unterstützt Snowflake die Semantik von Teradata SET nicht. Sie werden entfernt.
5. Global Temporary table option not supported¶
Wie im Beispiel „Flüchtige und globale temporäre Tabelle“ gezeigt, unterstützt Snowflake die Option „Globale temporäre Tabelle“ von Teradata nicht. Sie wird entfernt.
6. Compress unsupported¶
COMPRESS (vaue1, value, value3)
wird entfernt, da es nicht unterstützt wird.
7. On commit unsupported¶
On Commit
wird entfernt, da es nicht unterstützt wird.
8. Block compression unsupported¶
Die Blockkomprimierung
wird entfernt, da sie nicht unterstützt wird.
9. Normalize unsupported¶
Normalisieren
wird entfernt, da es nicht unterstützt wird.
WITH DEFAULT¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Die WITH DEFAULT
-Klausel von Teradata setzt einen Systemstandardwert für Spalten, die ohne Werte eingefügt werden. Dieser Wert ist in der Regel gleich Null oder leer.
Syntax:¶
WITH DEFAULT
Die folgende Tabelle zeigt die Datentypen von Teradata, ihren entsprechenden Typ in Snowflake und den Standardwert, der eingestellt werden muss, wenn er unterstützt wird.
Teradata | Snowflake | Default Value |
---|---|---|
BLOB[(n)] | BYTE | NOT SUPPORTED |
BYTE[(n)] | BYTE | NOT SUPPORTED |
VARBYTE[(n)] | BYTE | NOT SUPPORTED |
BIGINT | BIGINT | 0 |
BYTEINT | BYTEINT | 0 |
DECIMAL [(n[,m])] | DECIMAL | 0 |
DOUBLE PRECISION | DOUBLE PRECISION | 0 |
FLOAT | FLOAT | 0 |
INTEGER | INTEGER | 0 |
NUMBER(n[,m]) | NUMBER | 0 |
NUMBER[(*[,m])] | NUMBER | 0 |
NUMERIC [(n[,m])] | NUMERIC | 0 |
REAL | REAL | 0 |
SMALLINT | SMALLINT | 0 |
DATE | DATE | CURRENT_DATE |
TIME [(n)] | TIME | CURRENT_TIME |
TIMESTAMP [(n)] | TIMESTAMP | CURRENT_TIMESTAMP |
TIMESTAMP WITH TIME ZONE | TIMESTAMP_TZ | LOCALTIMESTAMP |
INTERVAL DAY [(n)] | VARCHAR(21) | '0DAY' |
INTERVAL DAY [(n)] TO HOUR | VARCHAR(21) | '0DAY' |
INTERVAL DAY [(n)] TO MINUTE | VARCHAR(21) | '0DAY' |
INTERVAL DAY [(n)] TO SECOND | VARCHAR(21) | '0DAY' |
INTERVAL HOUR [(n)] | VARCHAR(21) | '0HOUR' |
INTERVAL HOUR [(n)] TO MINUTE | VARCHAR(21) | '0HOUR' |
INTERVAL HOUR [(n)] TO SECOND | VARCHAR(21) | '0HOUR' |
INTERVAL MINUTE [(n)] | VARCHAR(21) | '0MINUTE' |
INTERVAL MINUTE [(n)] TO SECOND [(m)] | VARCHAR(21) | '0MINUTE' |
INTERVAL MONTH | VARCHAR(21) | '0MONTH' |
INTERVAL SECOND [(n,[m])] | VARCHAR(21) | '0SECOND' |
INTERVAL YEAR [(n)] | VARCHAR(21) | '0YEAR' |
INTERVAL YEAR [(n)] TO MONTH | VARCHAR(21) | '0YEAR' |
CHAR[(n)] | CHAR | '' |
CHARACTER(n) CHARACTER SET GRAPHIC | - | NOT SUPPORTED |
CLOB | - | NOT SUPPORTED |
CHAR VARYING(n) | VARCHAR | '' |
LONG VARCHAR | - | NOT SUPPORTED |
LONG VARCHAR CHARACTER SET GRAPHIC | - | NOT SUPPORTED |
VARCHAR(n) | VARCHAR | '' |
VARCHAR(n) CHARACTER SET GRAPHIC | - | NOT SUPPORTED |
PERIOD(DATE) | VARCHAR(24) | NOT SUPPORTED |
PERIOD(TIME [(n)]) | VARCHAR(24) | NOT SUPPORTED |
PERIOD(TIMESTAMP [(n)]) | VARCHAR(24) | NOT SUPPORTED |
Beispielhafte Quellcode-Muster¶
Teradata¶
CREATE TABLE SAMPLE_TABLE
(
ID INT,
-- Numeric Types
big_integer_col BIGINT WITH DEFAULT,
byteint_col BYTEINT WITH DEFAULT,
decimal_col DECIMAL(10,2) WITH DEFAULT,
double_precision_col DOUBLE PRECISION WITH DEFAULT,
float_col FLOAT WITH DEFAULT,
integer_col INTEGER WITH DEFAULT,
number_col NUMBER WITH DEFAULT,
numeric_col NUMERIC(10,2) WITH DEFAULT,
real_col REAL WITH DEFAULT,
smallint_col SMALLINT WITH DEFAULT,
-- Character Types
char_col CHAR(50) WITH DEFAULT,
character_col CHARACTER(50) WITH DEFAULT,
--clob_col CLOB,
char_varying_col CHAR VARYING(100) WITH DEFAULT,
--long_varchar_col LONG VARCHAR WITH DEFAULT,
--long_varchar_graphic_col LONG VARCHAR CHARACTER SET GRAPHIC WITH DEFAULT,
varchar_col VARCHAR(255) WITH DEFAULT,
--varchar_graphic_col VARCHAR(255) CHARACTER SET GRAPHIC WITH DEFAULT,
-- Date and Time Types
date_col DATE WITH DEFAULT,
time_col TIME WITH DEFAULT,
time_precision_col TIME(6) WITH DEFAULT,
timestamp_col TIMESTAMP WITH DEFAULT,
timestamp_precision_col TIMESTAMP(6) WITH DEFAULT,
tz_timestamp_col TIMESTAMP WITH TIME ZONE WITH DEFAULT,
tz_timestamp_precision_col TIMESTAMP(6) WITH TIME ZONE WITH DEFAULT,
interval_col INTERVAL DAY(4) WITH DEFAULT,
interval_day_to_hour_col INTERVAL DAY(4) TO HOUR WITH DEFAULT,
interval_hour_col INTERVAL HOUR(2) WITH DEFAULT,
interval_minute_col INTERVAL MINUTE(2) WITH DEFAULT,
interval_month_col INTERVAL MONTH WITH DEFAULT,
interval_second_col INTERVAL SECOND(2) WITH DEFAULT,
interval_year_col INTERVAL YEAR(4) WITH DEFAULT,
-- Binary Types
-- blob_col BLOB(1000),
byte_col BYTE(1000) WITH DEFAULT,
varbyte_col VARBYTE(1000) WITH DEFAULT
);
Snowflake ¶
CREATE OR REPLACE TABLE SAMPLE_TABLE
(
ID INT,
-- Numeric Types
big_integer_col BIGINT DEFAULT 0,
byteint_col BYTEINT DEFAULT 0,
decimal_col DECIMAL(10,2) DEFAULT 0,
double_precision_col DOUBLE PRECISION DEFAULT 0,
float_col FLOAT DEFAULT 0,
integer_col INTEGER DEFAULT 0,
number_col NUMBER(38, 18)
-- WITH DEFAULT
-- !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'NUMBER' NOT SUPPORTED IN SNOWFLAKE ***/!!!
,
numeric_col NUMERIC(10,2) DEFAULT 0,
real_col REAL DEFAULT 0,
smallint_col SMALLINT DEFAULT 0,
-- Character Types
char_col CHAR(50) DEFAULT '',
character_col CHARACTER(50)
-- WITH DEFAULT
-- !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'CHARACTER(50)' NOT SUPPORTED IN SNOWFLAKE ***/!!!
,
--clob_col CLOB,
char_varying_col CHAR VARYING(100)
-- WITH DEFAULT
-- !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'CHAR VARYING(100)' NOT SUPPORTED IN SNOWFLAKE ***/!!!
,
--long_varchar_col LONG VARCHAR WITH DEFAULT,
--long_varchar_graphic_col LONG VARCHAR CHARACTER SET GRAPHIC WITH DEFAULT,
varchar_col VARCHAR(255) DEFAULT '',
--varchar_graphic_col VARCHAR(255) CHARACTER SET GRAPHIC WITH DEFAULT,
-- Date and Time Types
date_col DATE DEFAULT CURRENT_DATE,
time_col TIME DEFAULT CURRENT_TIME,
time_precision_col TIME(6) DEFAULT CURRENT_TIME(6),
timestamp_col TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
timestamp_precision_col TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6),
tz_timestamp_col TIMESTAMP_TZ DEFAULT LOCALTIMESTAMP,
tz_timestamp_precision_col TIMESTAMP_TZ(6) DEFAULT LOCALTIMESTAMP(6),
interval_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY(4) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0DAY',
interval_day_to_hour_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY(4) TO HOUR DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0DAY',
interval_hour_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL HOUR(2) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0HOUR',
interval_minute_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL MINUTE(2) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0MINUTE',
interval_month_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0MONTH',
interval_second_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL SECOND(2) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0SECOND',
interval_year_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR(4) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0YEAR',
-- Binary Types
-- blob_col BLOB(1000),
byte_col BINARY
-- WITH DEFAULT
-- !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'BYTE(1000)' NOT SUPPORTED IN SNOWFLAKE ***/!!!
,
varbyte_col BINARY(1000)
-- WITH DEFAULT
-- !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'VARBYTE(1000)' NOT SUPPORTED IN SNOWFLAKE ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Bekannte Probleme¶
1. Unsupported types¶
Wie aus der Tabelle in der Beschreibungstabelle hervorgeht, werden einige Typen nicht unterstützt und bei der Umwandlung der Klausel WITH DEFAULT
wird kein Standardwert gesetzt.
Zugehörige EWIs¶
[SSC-EWI-0021](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0021): Nicht unterstützt in Snowflake.
[SSC-EWI-0036](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0036): Datentyp in einen anderen Datentyp konvertiert.
Index¶
Warnung
Derzeit wird die Anweisung _ Create Index _ nicht konvertiert, aber geparst. Wenn Ihr Quellcode außerdem Create Index
-Anweisungen enthält, werden diese im _ Bewertungsbericht_ berücksichtigt.
Beispiel für Index erstellen
CREATE INDEX (col1, col2, col3) ORDER BY VALUES (col2) ON table1;
CREATE INDEX my_index_name ON my_table (column1, column2);
Bemerkung
Da Snowflake aus architektonischen Gründen keine Indizes unterstützt, wird SnowConvert den gesamten Code für die Erstellung von Indizes entfernen. Snowflake erstellt automatisch Mikropartitionen für jede Tabelle, die die Leistung von DML Operationen beschleunigen. Der Benutzer muss sich nicht um die Erstellung oder Verwaltung dieser Mikropartitionen kümmern.
Normalerweise reicht dies aus, um eine sehr gute Abfrageleistung zu erzielen. Es gibt jedoch Möglichkeiten, diese zu verbessern, indem Sie Gruppierungsschlüssel für Daten erstellen. Auf der offiziellen Seite von Snowflake finden Sie weitere Informationen über Mikropartitionen und Data Clustering.
Join Index¶
Beschreibung ¶
In Snowconvert werden Join-Indizes in Teradata in dynamische Tabellen in Snowflake umgewandelt. Um dynamische Tabellen richtig zu konfigurieren, müssen zwei wesentliche Parameter definiert werden: TARGET_LAG und WAREHOUSE. Wenn diese Parameter in den Konfigurationsoptionen nicht angegeben werden, verwendet Snowconvert während der Konvertierung die voreingestellten Werte, wie im folgenden Beispiel gezeigt.
Weitere Informationen zu Join Indexes finden Sie hier.
Einzelheiten zu den erforderlichen Parametern für dynamische Tabellen finden Sie hier.
Beispielhafte Quellcode-Muster¶
Teradata
CREATE JOIN INDEX Employee
AS
SELECT
Employee_Id,
First_Name,
Last_Name,
BirthDate,
DepartmentNo
FROM Employee
PRIMARY INDEX (First_Name);
Snowflake
CREATE OR REPLACE DYNAMIC TABLE Employee
--** SSC-FDM-0031 - DYNAMIC TABLE REQUIRED PARAMETERS SET BY DEFAULT **
TARGET_LAG='1 day'
WAREHOUSE=UPDATE_DUMMY_WAREHOUSE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
AS
SELECT
Employee_Id,
First_Name,
Last_Name,
BirthDate,
DepartmentNo
FROM
Employee;
Bekannte Probleme¶
Zur Zeit sind keine Fehler bekannt.
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
Schema¶
Beschreibung ¶
Die Übersetzung der Anweisung CREATE SCHEMA
von Teradata nach Snowflake ist einfach, da die grundlegende Syntax dieselbe bleibt.
Beispielhafte Quellcode-Muster¶
Teradata
CREATE SCHEMA IF EXISTS schema_name;
Snowflake
CREATE SCHEMA IF EXISTS schema_name
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/23/2024" }}'
;
Bekannte Probleme¶
WITH-Eigenschaften von CREATE SCHEMA¶
Die WITH
Eigenschaften, die in Teradata mit der Anweisung CREATE SCHEMA
verbunden sind, werden in Snowflake nicht unterstützt, da es keine entsprechende Funktion gibt.
Teradata
CREATE SCHEMA IF EXISTS schema_name
WITH ( PROPERTY1 = PROPERTYNAME, PROPERTY2 = PROPERTTYNAME, PROPERTY3 = PROPERTTYNAME);
Snowflake
CREATE SCHEMA IF EXISTS schema_name
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/23/2024" }}'
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'SCHEMA WITH' NODE ***/!!!
WITH ( PROPERTY1 = PROPERTYNAME, PROPERTY2 = PROPERTTYNAME, PROPERTY3 = PROPERTTYNAME);
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.
Ansichten¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung ¶
Die VIEW-Anweisung von Teradata wird in die VIEW-Syntax von Snowflake übersetzt.
Weitere Informationen zu VIEW in Teradata finden Sie hier.
Beispielhafte Quellcode-Muster¶
Transformation Create View¶
Teradata
CREATE VIEW view1 (someTable.col1, someTable.col2) AS locking row for access
SELECT
my_table.col1, my_table.col2
FROM table1 AS my_table
WHERE my_table.col1 = 'SpecificValue'
UNION ALL
SELECT other_table.col2
FROM table2 AS other_table
WHERE my_table.col2 = other_table.col2
Snowflake
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "table1", "table2" **
CREATE OR REPLACE VIEW view1
(
col1,
col2)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
AS
SELECT
my_table.col1,
my_table.col2
FROM
table1 AS my_table
WHERE my_table.col1 = 'SpecificValue'
UNION ALL
SELECT
other_table.col2
FROM
table2 AS other_table
WHERE my_table.col2 = other_table.col2;
Benutzerdefiniertes Schema-Tag¶
Das benutzerdefinierte Schema wird im Kommentarbereich vor der Spezifikation der Ansicht angegeben, und zwar mit einem XML Tag namens „sc-view“, das nur den Wert des Schemas und den Namen der Ansicht, getrennt durch einen Punkt „ .“, enthält, wie unten gezeigt: <sc-view>SCHEMANAME.VIEWNAME</sc-view>
Das benutzerdefinierte Schema wird als Qualifizierer für die Ansicht verwendet. Der Name der Ansicht und alle Objekte, auf die in den Abfragen von FROM und den inneren Abfragen verwiesen wird, verwenden dann dieses benutzerdefinierte Schema. Es kann also mehrere Ansichten mit demselben Namen, aber mit unterschiedlichen benutzerdefinierten Tags geben. Beispiel: zwei Ansichten mit demselben Namen verwenden die benutzerdefinierten Schema-Tag-Informationen, um die Übersetzung durchzuführen.
Teradata¶
/*<sc-view>RMSviews.EMPLOYEEB</sc-view>*/
REPLACE VIEW EMPLOYEEB AS
SELECT * FROM EMPLOYEE
WHERE AREA = "AREAB";
/*<sc-view>Views.EMPLOYEEB</sc-view>*/
REPLACE VIEW EMPLOYEEB AS
SELECT * FROM EMPLOYEE
WHERE AREA = "AREAB";
Snowflake¶
Die Transformation für Snowflake variiert je nach dem benutzerdefinierten Schemanamen MySchema
, dem benutzerdefinierten Datenbanknamen MyDatabase
oder der Nichtauswahl einer benutzerdefinierten Datenbank oder eines Schemas in den Konvertierungseinstellungen.
/*<sc-view>RMSviews.EMPLOYEEB</sc-view>*/
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "EMPLOYEE" **
CREATE OR REPLACE VIEW RMSviews.EMPLOYEEB
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
AS
SELECT
* FROM
RMSviews.EMPLOYEE
WHERE AREA = "AREAB";
/*<sc-view>Views.EMPLOYEEB</sc-view>*/
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "EMPLOYEE" **
--** SSC-FDM-0019 - SEMANTIC INFORMATION COULD NOT BE LOADED FOR Views.EMPLOYEEB. CHECK IF THE NAME IS INVALID OR DUPLICATED. **
CREATE OR REPLACE VIEW Views.EMPLOYEEB
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
AS
SELECT
* FROM
Views.EMPLOYEE
WHERE AREA = "AREAB";
/*<sc-view>RMSviews.EMPLOYEEB</sc-view>*/
CREATE OR REPLACE VIEW MyDatabase.RMSviews.EMPLOYEEB
AS
SELECT * FROM MyDatabase.RMSviews.EMPLOYEE
WHERE AREA = "AREAB";
/*<sc-view>Views.EMPLOYEEB</sc-view>*/
CREATE OR REPLACE VIEW MyDatabase.Views.EMPLOYEEB
AS
SELECT * FROM MyDatabase.Views.EMPLOYEE
WHERE AREA = "AREAB";
/*<sc-view>RMSviews.EMPLOYEEB</sc-view>*/
CREATE OR REPLACE VIEW RMSviews.PUBLIC.EMPLOYEEB
AS
SELECT * FROM RMSviews.PUBLIC.EMPLOYEE
WHERE AREA = "AREAB";
/*<sc-view>Views.EMPLOYEEB</sc-view>*/
CREATE OR REPLACE VIEW Views.PUBLIC.EMPLOYEEB
AS
SELECT * FROM Views.PUBLIC.EMPLOYEE
WHERE AREA = "AREAB";
Bekannte Probleme¶
1. Locking row for access logic difference¶
In Snowflake basiert der Zugriff auf Objekte und Elemente auf Benutzern und Berechtigungen.
Zugehörige EWIs¶
[SSC-FDM-0007](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM. md#ssc-fdm-0007): Element mit fehlenden Abhängigkeiten.
[SSC-FDM-0019](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM. md#ssc-fdm-0019): Die semantischen Informationen konnten nicht geladen werden.