SnowConvert: Allgemeine funktionale Unterschiede¶
SSC-FDM-0001¶
Bemerkung
Für eine bessere Lesbarkeit haben wir die Codebeispiele vereinfacht, indem wir nur die wichtigsten Teile zeigen.
Beschreibung¶
Ansichten, die alle Spalten aus einer einzelnen Tabelle ohne Filterbedingungen auswählen (WHERE-Klausel), sind in Snowflake unnötig und können die Abfrageleistung negativ beeinflussen.
Codebeispiel¶
Eingabecode (Oracle):¶
CREATE OR REPLACE VIEW simpleView1
AS
SELECT
*
FROM
simpleTable;
CREATE OR REPLACE VIEW simpleView2
AS
SELECT
*
FROM
simpleTable GROUP BY col1;
Generierter Code:¶
CREATE OR REPLACE VIEW simpleView1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
*
FROM
simpleTable;
CREATE OR REPLACE VIEW simpleView2
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
*
FROM
simpleTable
GROUP BY col1;
Best Practices¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0002¶
Beschreibung¶
Diese Meldung wird angezeigt, wenn eine korrelierte Unterabfrage
entdeckt wird. Eine korrelierte Unterabfrage referenziert eine Spalte aus der äußeren Abfrage. Bei der Migration nach Snowflake können sich diese Unterabfragen in einigen Fällen anders verhalten. Weitere Einzelheiten finden Sie unter Verwenden von Unterabfragen.
Codebeispiel¶
Eingabecode:¶
CREATE TABLE schema1.table1(column1 NVARCHAR(50), column2 NVARCHAR(50));
CREATE TABLE schemaA.tableA(columnA NVARCHAR(50), columnB NVARCHAR(50));
--Correlated Subquery
SELECT columnA FROM schemaA.tableA ta WHERE columnA = (SELECT SUM(column1) FROM schema1.table1 t1 WHERE t1.column1 = ta.columnA);
Generierter Code:¶
CREATE OR REPLACE TABLE schema1.table1 (
column1 VARCHAR(50),
column2 VARCHAR(50))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/11/2024", "domain": "test" }}'
;
CREATE OR REPLACE TABLE schemaA.tableA (
columnA VARCHAR(50),
columnB VARCHAR(50))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/11/2024", "domain": "test" }}'
;
--Correlated Subquery
SELECT
columnA
FROM
schemaA.tableA ta
WHERE
columnA =
--** SSC-FDM-0002 - CORRELATED SUBQUERIES MAY HAVE SOME FUNCTIONAL DIFFERENCES. **
(SELECT
SUM(column1) FROM
schema1.table1 t1
WHERE
t1.column1 = ta.columnA
);
Best Practices¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0003¶
Beschreibung¶
Diese Warnung erscheint, wenn die Konvertierungsraten für das angegebene Beurteilungsfeld nicht übereinstimmen. SC löst diese Unstimmigkeiten automatisch auf, daher dient diese Meldung nur zu Informationszwecken.
Bemerkung
Diese Warnmeldung erscheint nur in Bewertungsdokumenten und wird nicht im Ausgabecode angezeigt.
Best Practices¶
SnowConvert kann Probleme automatisch beheben. Sie können jedoch das SnowConvert-Support-Team unter snowconvert-support@snowflake.com um Hilfe bitten.
SSC-FDM-0004¶
Beschreibung¶
Diese Warnung erscheint in Klauseln, die sich auf die externe Behandlung beziehen, da Snowflake den Datenspeicher anders verwaltet. Im Gegensatz zu anderen Datenbanken benötigt Snowflake keine externen Tabellen, da alle Daten innerhalb des internen Speichersystems von Snowflake gespeichert werden sollten. Weitere Informationen zu diesem Thema finden Sie unter Hinweise zur Datenspeicherung.
Codebeispiel¶
Eingabecode:¶
CREATE OR REPLACE EXTERNAL TABLE external_table_test1
(
col1 INTEGER
)
OPTIONS (
format = 'CSV',
uris = ['gs://my_bucket/file.csv']
);
Generierter Code:¶
--** SSC-FDM-0004 - EXTERNAL TABLE TRANSLATED TO REGULAR TABLE **
CREATE OR REPLACE TABLE external_table_test1 (
col1 INTEGER
)
-- OPTIONS (
-- format = 'CSV',
-- uris = ['gs://my_bucket/file.csv']
-- )
;
Best Practices¶
Daten aus externen Tabellendateien müssen in Ihre Snowflake-Datenbank importiert werden.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0005¶
Beschreibung¶
Der Datentyp TIME in Snowflake speichert nur die Zeitkomponente ohne jegliche Zeitzoneninformationen.
TIME speichert Uhrzeitwerte und führt alle Operationen ohne Berücksichtigung von Zeitzonen durch. Weitere Einzelheiten finden Sie unter TIME.
Beispielcode¶
Eingabecode:¶
CREATE TABLE TABLE_TIME_TYPE (
COLNAME TIME (9) WITH TIME ZONE
);
Generierter Code:¶
CREATE OR REPLACE TABLE TABLE_TIME_TYPE (
COLNAME TIME(9) /*** SSC-FDM-0005 - TIME ZONE NOT SUPPORTED FOR TIME DATA TYPE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Best Practices¶
Von den Benutzern ist keine Aktion erforderlich.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0006¶
Beschreibung¶
Diese Meldung erscheint, wenn Sie eine Spalte mit dem Datentyp NUMBER
in einer Tabelle erstellen. Sie warnt vor möglichen arithmetischen Unterschieden in Snowflake, wenn Sie bei Zwischenberechnungen mit Dezimalstellen arbeiten. Diese Unterschiede können dazu führen, dass einige Operationen fehlschlagen. Weitere Einzelheiten finden Sie im Beitrag von Snowflake zu Zwischenergebnissen in Snowflake und zum Fehler Number out of representable range.
Um Probleme bei der arithmetischen Berechnung zu vermeiden, empfehlen wir, zunächst Stichprobentests durchzuführen. Dies wird Ihnen helfen, die richtigen Werte für die Präzision und Dezimalstellen zu bestimmen, die Sie für Ihre Operationen benötigen.
Beispielcodes¶
Einfache Tabelle mit Zahlenspalten¶
Eingabecode (Oracle):¶
CREATE TABLE table1
(
column1 NUMBER,
column2 NUMBER (20, 4)
);
Generierter Code:¶
CREATE OR REPLACE TABLE table1
(
column1 NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
column2 NUMBER(20, 4) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Beispiele für arithmetische Probleme¶
Die folgenden Beispiele zeigen, wie arithmetische Operationen bei der Arbeit mit Spalten vom Typ Number zu unerwarteten Ergebnissen führen können:
Snowflake-Code mit Divisionsfehler:¶
CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 19) );
INSERT INTO number_table VALUES (1);
SELECT column1 / column1 FROM number_table;
Snowflake-Code mit Multiplikationsfehler:¶
CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 20) );
INSERT INTO number_table VALUES (1);
SELECT column1 * column1 FROM number_table;
Beim Ausführen von SELECT
-Anweisungen in Snowflake wird eine Fehlermeldung angezeigt.
Number exceeds the allowed range for data type FIXEDSB16 (nullable). The value 1.0000000000000000000 cannot be stored in this data type.
Dieser Fehler tritt auf, wenn das Berechnungsergebnis die maximale Speicherkapazität von Snowflake überschreitet. Um dieses Problem zu lösen, reduzieren Sie in jedem Beispiel die Anzahl der Dezimalstellen um 1. Dadurch kann die Operation erfolgreich abgeschlossen werden.
Snowflake-Code mit Division:¶
CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 18) );
INSERT INTO number_table VALUES (1);
SELECT column1 / column1 FROM number_table;
Snowflake-Code mit Multiplikation:¶
CREATE OR REPLACE TABLE numbertable( column1 NUMBER(38, 19) );
INSERT INTO number_table VALUES (1);
SELECT column1 * column1 FROM number_table;
FehlerUm Migrationsfehler zu minimieren, setzt SnowConvert die Standardanzahl der Dezimalstellen automatisch auf 18.
Best Practices¶
Vergewissern Sie sich, dass die Zwischenwerte in Ihren Operationen die maximale Anzahl der Dezimalstellen von Snowflake von 37 nicht überschreiten.
Analysieren Sie Beispieldaten, um die erforderlichen Einstellungen für Präzision und Dezimalstellenanzahl zu überprüfen, bevor Sie Operationen durchführen.
Oft stellen Sie nach dem Sampling von Daten oder nach Gesprächen im Unternehmen fest, dass andere Präzisionseinstellungen besser geeignet sind. Zum Beispiel wird für
MONEY
-Spalten in der RegelNUMBER(20,4)
verwendet. Da das Ändern von Spaltendatentypen in Snowflake nicht ganz einfach ist, finden Sie in diesem Beitrag in unserem Forum eine Anleitung zum Ändern von Spaltendatentypen unter Beibehaltung der Daten.Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-FDM-0007¶
Bemerkung
Die Codeausschnitte wurden vereinfacht, um sich auf die wichtigsten Konzepte zu konzentrieren
Beschreibung¶
Ein Bereitstellungsfehler kann auftreten, wenn SnowConvert eine erforderliche Abhängigkeit nicht finden oder bestimmte Datentypen nicht auflösen kann. Dies kann passieren, wenn das abhängige Objekt im Quellcode fehlt.
Beispielcode¶
Eingabecode:¶
CREATE VIEW VIEW01 AS SELECT * FROM TABLE1;
Generierter Code:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
CREATE OR REPLACE VIEW VIEW01
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
* FROM
TABLE1;
Bemerkung
Die Definition von TABLE1 wurde in diesem Beispiel nicht angegeben.
Best Practices¶
Überprüfen Sie, ob alle Objektabhängigkeiten in Ihrem Quellcode enthalten sind.
Überprüfen Sie alle Objektreferenzen im Code, um sicherzustellen, dass sie richtig behandelt werden.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-FDM-0008¶
Bemerkung
Zur besseren Lesbarkeit haben wir einige Abschnitte des Codes in diesem Beispiel vereinfacht.
Beschreibung ¶
Bei der Erstellung von Tabellen in Snowflake kann die ON-Klausel COMMIT nur für temporäre Tabellen verwendet werden. Wenn Sie eine ON COMMIT-Klausel in eine nicht temporäre Tabellendefinition einfügen, wird sie im konvertierten Code auskommentiert. Da Snowflake ON COMMIT DELETE nicht unterstützt, wird auch diese Option bei der Konvertierung auskommentiert.
Beispielcode¶
Eingabecode¶
CREATE TABLE TABLE01 (COLNAME VARCHAR(20)) ON COMMIT PRESERVE ROWS
CREATE TEMPORARY TABLE TABLE02 (COLNAME VARCHAR(20)) ON COMMIT DELETE ROWS
Generierter Code¶
CREATE OR REPLACE TABLE TABLE01 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT PRESERVE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
CREATE OR REPLACE TEMPORARY TABLE TABLE02 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT DELETE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Best Practices¶
Sie müssen nichts unternehmen.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0009¶
Beschreibung ¶
Globale temporäre Tabellen sind komplex, da sie auf verschiedene Arten erstellt werden können, wie in der Snowflake-Dokumentation beschrieben.
Beispielcode¶
Eingabecode¶
CREATE OR REPLACE GLOBAL TEMPORARY TABLE GLOBAL_TEMP_TABLE
(
col3 INTEGER,
col4 VARCHAR(50)
);
Generierter Code¶
--** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE GLOBAL_TEMP_TABLE
(
col3 INTEGER,
col4 VARCHAR(50)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Best Practices¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0010¶
Beschreibung ¶
Diese Meldung erscheint, wenn SnowConvert eine DEFAULT SYSDATE-Klausel entdeckt, wobei der Datentyp der Spalte nicht DATE oder TIMESTAMP ist. In solchen Fällen konvertiert SnowConvert den Datentyp automatisch in DATE.
Beispielcode¶
Eingabecode¶
CREATE TABLE "SYSDATE_DEFAULT_TEST_TABLE_1"(
"COLUMN1" VARCHAR2(30 BYTE) DEFAULT SYSDATE
);
Generierter Code¶
CREATE OR REPLACE TABLE "SYSDATE_DEFAULT_TEST_TABLE_1" (
"COLUMN1" TIMESTAMP DEFAULT CURRENT_TIMESTAMP() /*** SSC-FDM-0010 - CONVERTED FROM VARCHAR2 TO DATE FOR CURRENT_DATE DEFAULT ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Best Practices¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0011¶
Bemerkung
Diese FDM wird nicht mehr unterstützt. Weitere Informationen finden Sie unter SSC-EWI-0045.
Beschreibung ¶
Spaltennamen, die in Snowflake reservierte Schlüsselwörter sind, aber in der Quelldatenbank gültig sind.
Beispielcode¶
Eingabecode (Oracle):¶
CREATE TABLE T1
(
LOCALTIME VARCHAR,
CURRENT_USER VARCHAR
);
Generierter Code:¶
CREATE OR REPLACE TABLE T1
(
--** SSC-FDM-0011 - COLUMN NAME 'LOCALTIME' IS A SNOWFLAKE RESERVED KEYWORD **
"LOCALTIME" VARCHAR,
--** SSC-FDM-0011 - COLUMN NAME 'CURRENT_USER' IS A SNOWFLAKE RESERVED KEYWORD **
"CURRENT_USER" VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Best Practices¶
Benennen Sie alle Spalten um, die in Snowflake nicht unterstützte Namen haben.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0012¶
Beschreibung ¶
Diese Warnung erscheint, wenn ein Constraint constraintName in einem Standardausdruck einer Spalte verwendet wird. Da Snowflake keine Beschränkungen in Standardausdrücken unterstützt, werden die Einschränkung und ihr constraintName automatisch entfernt, und es wird eine Warnmeldung generiert.
Beispielcode¶
Eingabecode¶
CREATE TABLE TABLE1 (
COL1 VARCHAR (10) CONSTRAINT constraintName DEFAULT ('0') NOT NULL
);
Generierter Code¶
CREATE OR REPLACE TABLE TABLE1 (
COL1 VARCHAR(10)
--** SSC-FDM-0012 - CONSTRAINT IN DEFAULT EXPRESSION IS NOT SUPPORTED IN SNOWFLAKE **
DEFAULT ('0') NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Best Practices¶
Von den Benutzern ist keine Aktion erforderlich.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0013¶
Beschreibung ¶
Es wurde eine Warnmeldung hinzugefügt, um auf Fälle hinzuweisen, in denen Zeitzonenausdrücke während der Konvertierung nicht ausgewertet werden können. SnowConvert kann zwar literale Zeitzonen-Zeichenfolgen erfolgreich ihren Snowflake-Entsprechungen zuordnen, aber es kann keine Zeitzonenwerte ermitteln, die durch Ausdrücke angegeben werden. Diese Beschränkung bedeutet, dass die Laufzeitergebnisse in Snowflake vom Quellsystem abweichen können, wenn dynamische Zeitzonenausdrücke verwendet werden.
Beispielcode¶
Eingabecode (Oracle)¶
SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE SESSIONTIMEZONE FROM DUAL;
SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE Expression FROM DUAL;
Generierter Code¶
SELECT
--** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT **
TO_TIMESTAMP_LTZ( TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;
SELECT
--** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT **
CONVERT_TIMEZONE(Expression, TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;
Quellcode (Teradata)¶
select TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE SESSIONTIMEZONE;
select current_timestamp at time zone CONCAT(' America ', ' Pacific');
select current_timestamp at time zone (SELECT COL1 FROM TABLE1 WHERE COL2 = 2);
Ausgabecode¶
SELECT
CONVERT_TIMEZONE(SESSIONTIMEZONE, TIMESTAMP '1998-12-25 09:26:50.12') /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
SELECT
CONVERT_TIMEZONE(CONCAT(' America ', ' Pacific'), CURRENT_TIMESTAMP) /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
SELECT
CONVERT_TIMEZONE((
SELECT
COL1 FROM
TABLE1
WHERE COL2 = 2), CURRENT_TIMESTAMP) /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
Zeitzonenkompatibilität mit Oracle¶
Die meisten Oracle-Zeitzonennamen sind direkt mit Snowflake kompatibel, was eine reibungslose Migration ermöglicht. Einige Zeitzonenausdrücke werden jedoch derzeit in Snowflake nicht unterstützt und generieren bei der Migration eine FDM (Functional Difference Message).
Africa/Douala
Asia/Ulaanbaatar
Asia/Yekaterinburg
Canada/Saskatchewan
Central Standard Time (CST)
Pacific Standard Time (PST)
US/Pacific
Best Practices¶
Von den Benutzern ist keine Aktion erforderlich.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0014¶
Bemerkung
Diese FDM wird nicht mehr unterstützt. Weitere Informationen finden Sie unter SSC-EWI-0035.
Beschreibung¶
Die _ CHECK _-Einschränkung wird in Snowflake nicht unterstützt, aber diese Beschränkung hat keinen Einfluss auf die Funktionalität Ihrer Datenbank.
Beispielcode¶
Eingabecode Oracle:¶
CREATE TABLE "Schema"."BaseTable"(
"COLUMN1" VARCHAR2(255),
CHECK ( COLUMN1 IS NOT NULL )
);
Generierter Code:¶
CREATE OR REPLACE TABLE "Schema"."BaseTable" (
"COLUMN1" VARCHAR(255)
-- ,
-- --** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
-- CHECK ( COLUMN1 IS NOT NULL )
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
Eingabecode Teradata:¶
CREATE TABLE TABLE1,
NO FALLBACK,
NO BEFORE JOURNAL,
NO AFTER JOURNAL
(
COL0 BYTEINT,
CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
Generierter Code:¶
CREATE TABLE TABLE1
(
COL0 BYTEINT
-- ,
-- --** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
-- CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Eingabecode SqlServer:¶
ALTER TABLE table_name2
ADD column_name VARCHAR(255)
CONSTRAINT constraint_name
CHECK NOT FOR REPLICATION (column_name > 1);
Generierter Code:¶
ALTER TABLE IF EXISTS table_name2
ADD column_name VARCHAR(255)
----** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
--CONSTRAINT constraint_name
--CHECK NOT FOR REPLICATION (column_name > 1)
;
Best Practices¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0015¶
Beschreibung ¶
Dieser Fehler tritt auf, wenn SnowConvert keines von beidem finden kann:
Eine benutzerdefinierte Definition eines benutzerdefinierten Typs
Ein bekannter integrierter Oracle-Datentyp
Beispielcode¶
Eingabecode (Oracle):¶
--Type was never defined
--CREATE TYPE type1;
CREATE TABLE table1
(
column1 type1
);
Generierter Code:¶
--Type was never defined
--CREATE TYPE type1;
CREATE OR REPLACE TABLE table1
(
column1 VARIANT /*** SSC-FDM-TS0015 - DATA TYPE TYPE1 IS NOT SUPPORTED IN SNOWFLAKE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Best Practices¶
Vergewissern Sie sich, dass der Datentyp in Ihrem Quellcode richtig definiert wurde.
Lesen Sie die Dokumentation zu Snowflake-Datentypen, um einen passenden Datentyp zu finden.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-FDM-0016¶
Beschreibung ¶
Snowflake Scripting unterstützt keine konstanten Werte. Wenn das Feature Snowflake Scripting aktiviert ist, werden alle Konstanten innerhalb von Prozeduren automatisch in Variablen konvertiert.
Beispielcode¶
Oracle:¶
CREATE OR REPLACE PROCEDURE p_constants
AS
my_const1 CONSTANT NUMBER := 40;
my_const2 CONSTANT NUMBER NOT NULL := 40;
BEGIN
NULL;
END;
Snowflake Scripting¶
CREATE OR REPLACE PROCEDURE p_constants ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
--** SSC-FDM-0016 - CONSTANTS ARE NOT SUPPORTED BY SNOWFLAKE SCRIPTING. IT WAS TRANSFORMED TO A VARIABLE **
my_const1 NUMBER(38, 18) := 40;
--** SSC-FDM-0016 - CONSTANTS ARE NOT SUPPORTED BY SNOWFLAKE SCRIPTING. IT WAS TRANSFORMED TO A VARIABLE **
--** SSC-FDM-OR0025 - NOT NULL CONSTRAINT IS NOT SUPPORTED BY SNOWFLAKE **
my_const2 NUMBER(38, 18) := 40;
BEGIN
NULL;
END;
$$;
Best Practices¶
Von den Benutzern ist keine Aktion erforderlich.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0017¶
Beschreibung¶
Die Systemversionierung, die durch die WITH SYSTEM VERSIONING
-Klausel in ANSI SQL aktiviert wird, verfolgt historische Änderungen an Tabellendaten. Allerdings ist dieses Feature in Snowflake derzeit nicht verfügbar.
Codebeispiel¶
Eingabecode:¶
CREATE TABLE t1 (
ID INT PRIMARY KEY,
Name VARCHAR(50),
SysStartTime TIMESTAMP,
SysEndTime TIMESTAMP
) WITH SYSTEM VERSIONING;
Generierter Code:¶
CREATE TABLE t1 (
ID INT PRIMARY KEY,
Name VARCHAR(50),
SysStartTime TIMESTAMP,
SysEndTime TIMESTAMP
)
----** SSC-FDM-0017 - WITH SYSTEM VERSIONING CLAUSE IS NOT SUPPORTED BY SNOWFLAKE. **
--WITH SYSTEM VERSIONING
;
Best Practices¶
Mit dem Feature Time Travel von Snowflake können Sie auf historische Daten, einschließlich geänderter oder gelöschter Daten, innerhalb eines bestimmten Zeitraums zugreifen. Mit diesem Feature können Sie:
Versehentlich oder absichtlich gelöschte Datenobjekte (Tabellen, Schemas und Datenbanken) wiederherstellen
Kopien und Sicherungen von Daten zu bestimmten Zeitpunkten erstellen
Verfolgen und analysieren, wie die Daten im Laufe der Zeit verwendet oder geändert wurden
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0018¶
Beschreibung¶
Die CHARACTER SET-Spaltenoption, die die zulässigen Zeichen definiert, die in einer Spalte gespeichert werden können, wird in Snowflake nicht unterstützt.
Codebeispiel¶
Eingabecode:¶
CREATE TABLE TABLE01(
COLNAME VARCHAR(20) CHARACTER SET character_specification
);
Generierter Code:¶
CREATE TABLE TABLE01 (
COLNAME VARCHAR(20)
-- --** SSC-FDM-0018 - CHARACTER SET CLAUSE IS NOT SUPPORTED BY SNOWFLAKE. **
-- CHARACTER SET character_specification
);
Best Practices¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0019¶
Beschreibung¶
Diese Warnung zeigt an, dass SnowConvert nicht auf die semantischen Informationen für ein bestimmtes Objekt zugreifen konnte. Dies tritt in der Regel auf, wenn es in Ihrem Code mehrere Objekte mit identischen Namen gibt. Wenn dies geschieht, kann SnowConvert die semantischen Informationen des Objekts nicht richtig analysieren.
Beispielcode¶
Eingabecode:¶
CREATE TABLE T1
(
COL1 INTEGER
);
CREATE TABLE T1
(
COL2 INTEGER
);
Generierter Code:¶
CREATE OR REPLACE TABLE T1
(
COL1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
--** SSC-FDM-0019 - SEMANTIC INFORMATION COULD NOT BE LOADED FOR T1. CHECK IF THE NAME IS INVALID OR DUPLICATED. **
CREATE TABLE T1
(
COL2 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Best Practices¶
Überprüfen Sie Ihren Eingabecode auf doppelte Objekte, da diese das ordnungsgemäße Laden der semantischen Informationen beeinträchtigen können.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0020¶
Beschreibung¶
Eine Snowflake Scripting-Prozedur kann bei der Ausführung nur ein Resultset zurückgeben.
Wenn eine Prozedur mehrere Resultsets zurückgeben muss (ähnlich dem Verhalten von Teradata), werden die Ergebnisse in temporären Tabellen gespeichert. Die Snowflake Scripting-Prozedur gibt ein Array mit den Namen dieser temporären Tabellen zurück.
Beispielcode¶
Eingabecode (Teradata):¶
REPLACE MACRO sampleMacro AS
(
SELECT CURRENT_DATE AS DT;
SELECT CURRENT_DATE AS DT_TWO;
);
Generierter Code:¶
CREATE OR REPLACE PROCEDURE sampleMacro ()
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
return_arr ARRAY := array_construct();
tbl_nm VARCHAR;
BEGIN
tbl_nm := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_nm) AS
SELECT
CURRENT_DATE() AS DT;
return_arr := array_append(return_arr, :tbl_nm);
tbl_nm := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_nm) AS
SELECT
CURRENT_DATE() AS DT_TWO;
return_arr := array_append(return_arr, :tbl_nm);
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
END;
$$;
Best Practices¶
Führen Sie eine SELECT-Abfrage mit den von der Prozedur zurückgegebenen Namen temporärer Tabellen aus, um die Ergebnisse zu sehen.
Halten Sie die Prozeduren einfach, indem Sie sie ein einziges Resultset zurückgeben lassen, anstatt in mehrere. Dies erleichtert die Handhabung der Ergebnisse.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com.
SSC-FDM-0021¶
Beschreibung¶
Snowflake verwendet keine herkömmlichen Datenbankindizes. Stattdessen erstellt und verwaltet es automatisch Mikropartitionen für alle Tabellen, um die Abfrageleistung zu optimieren. Wenn Sie SnowConvert verwenden, wird jeglicher Code, der mit der Indexerstellung zusammenhängt, auskommentiert, da er in Snowflake nicht benötigt wird. Diese Mikropartitionen verbessern automatisch die Geschwindigkeit der DML-Operationen, ohne dass eine manuelle Verwaltung erforderlich ist.
Obwohl diese Konfiguration in der Regel eine gute Abfrageleistung bietet, können Sie sie weiter optimieren, indem Sie Datengruppierungsschlüssel implementieren. Weitere Einzelheiten über Mikropartitionen und Daten-Clustering finden Sie unter Mikropartitionen und Daten-Clustering.
Beispielcode¶
Eingabecode (Oracle):¶
CREATE INDEX index1
ON table1(column1);
Generierter Code:¶
----** SSC-FDM-0021 - CREATE INDEX IS NOT SUPPORTED BY SNOWFLAKE **
----** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
--CREATE INDEX index1
--ON table1(column1)
;
Best Practices¶
Daten-Clustering kann die Abfrageleistung verbessern, indem Daten in Tabellen effizienter organisiert werden.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0022¶
Schweregrad¶
Schlecht
Beschreibung¶
Eine Warnung erscheint, wenn eine nicht unterstützte Fensterrahmeneinheit in Zeilen konvertiert wurde, was zu Unterschieden in der Ausgabe führen kann. Snowflake unterstützt z. B. die Einheit GROUPS nicht, sodass sie in Zeilen konvertiert werden muss.
Bitte beachten Sie, dass diese Meldung erscheint, wenn eine Fensterrahmeneinheit entweder nicht vollständig unterstützt wird oder geändert werden muss. Dies gilt auch für Fälle, in denen die Einheit RANGE Änderungen erfordert.
Beispielcode¶
Hier ist ein Beispieldatenset, mit dem wir das Konzept erläutern.
C_NAME |
C_BIRTH_DAY |
---|---|
USA |
1 |
USA |
4 |
Polen |
9 |
Kanada |
10 |
USA |
5 |
Kanada |
12 |
Costa Rica |
3 |
Polen |
4 |
USA |
2 |
Costa Rica |
7 |
Costa Rica |
10 |
Oracle:¶
SELECT
C_NAME,
SUM(C_BIRTH_DAY)
OVER (ORDER BY C_BIRTH_DAY
RANGE BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MAX1
FROM WINDOW_TABLE;
C_NAME |
MAX1 |
---|---|
USA |
- |
USA |
1 |
Costa Rica |
3 |
USA |
6 |
Polen |
6 |
USA |
14 |
Costa Rica |
19 |
Polen |
26 |
Kanada |
35 |
Costa Rica |
35 |
Kanada |
55 |
Snowflake:¶
SELECT
C_NAME,
SUM(C_BIRTH_DAY)
OVER (ORDER BY C_BIRTH_DAY ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING /*** SSC-FDM-0022 - WINDOW FRAME UNIT 'RANGE' WAS CHANGED TO ROWS ***/) AS MAX1
FROM
WINDOW_TABLE;
C_NAME |
MAX1 |
---|---|
USA |
- |
USA |
1 |
Costa Rica |
3 |
USA |
6 |
Polen |
10 |
USA |
14 |
Costa Rica |
19 |
Polen |
26 |
Kanada |
35 |
Costa Rica |
45 |
Kanada |
55 |
Empfehlungen¶
Fügen Sie eine ORDER BY-Klausel zu Ihren Abfragen hinzu, um eine konsistente Zeilenreihenfolge bei der Ausführung in Snowflake zu gewährleisten.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0023¶
Schweregrad¶
Mittel
Beschreibung¶
SnowConvert konvertiert globale temporäre Tabellen in standardmäßige CREATE TABLE-Anweisungen. Bitte beachten Sie, dass Referenzen auf diese umgewandelten Tabellen möglicherweise nicht wie ursprünglich vorgesehen funktionieren.
Codebeispiel¶
Eingabe¶
create global temporary table t1
(col1 varchar);
create view view1 as
select col1 from t1;
Ausgabe¶
--** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE t1
(col1 varchar)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE VIEW view1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
AS
select col1 from
--** SSC-FDM-0023 - A Global Temporary Table is being referenced **
t1;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0024¶
Bemerkung
Dieses FDM
-Feature wird nicht mehr unterstützt. Weitere Informationen finden Sie unter SSC-EWI-0058.
Beschreibung¶
Dieser Fehler tritt auf, wenn Sie versuchen, eine nicht unterstützte Anweisung innerhalb eines CREATE PROCEDURE-Befehls in Snowflake Scripting zu verwenden.
Beispielcode¶
Eingabecode (Oracle):¶
CREATE OR REPLACE PROCEDURE PROC01
IS
number_variable INTEGER;
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL' INTO number_variable;
END;
Generierter Code:¶
CREATE OR REPLACE PROCEDURE PROC01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
number_variable INTEGER;
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL'
-- --** SSC-FDM-0024 - FUNCTIONALITY FOR 'EXECUTE IMMEDIATE RETURNING CLAUSE' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING **
-- INTO number_variable
;
END;
$$;
Empfehlungen¶
Von den Benutzern ist keine Aktion erforderlich.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0026¶
Bemerkung
Dieses FDM
-Feature wird nicht mehr unterstützt. Weitere Informationen finden Sie unter SSC-EWI-0028.
Beschreibung¶
Dieser Fehler tritt auf, wenn Sie versuchen, einen Datentyp zu verwenden, der nicht mit Snowflake kompatibel ist.
Beispiel¶
Eingabecode (Oracle):¶
CREATE TABLE MYTABLE
(
COL1 SYS.ANYDATASET
);
Generierter Code:¶
CREATE OR REPLACE TABLE MYTABLE
(
--** SSC-FDM-0026 - TYPE NOT SUPPORTED BY SNOWFLAKE **
COL1 SYS.ANYDATASET
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0027¶
Bemerkung
Für eine bessere Lesbarkeit haben wir einige Abschnitte des Ausgabecodes vereinfacht.
Beschreibung¶
Diese Meldung zeigt an, dass eine Anweisung aus dem Quellcode nicht in Snowflake konvertiert werden kann, da es in Snowflake keine entsprechende Funktionalität gibt. Die Anweisung ist nicht mehr erforderlich und wird aus dem konvertierten Code entfernt. SC behält jedoch zur Referenzzecken die ursprüngliche Anweisung als Kommentar bei.
Beispielcode¶
Eingabecode:¶
.LOGTABLE tduser.Employee_log;
.BEGIN MLOAD TABLES Employee_Stg;
.LAYOUT Employee;
.FIELD in_EmployeeNo * VARCHAR(10);
.FIELD in_FirstName * VARCHAR(30);
.FIELD in_LastName * VARCHAR(30);
.FIELD in_BirthDate * VARCHAR(10);
.FIELD in_JoinedDate * VARCHAR(10);
.FIELD in_DepartmentNo * VARCHAR(02);
.dml label EmpLabel
IGNORE DUPLICATE INSERT ROWS;
INSERT INTO Employee_Stg (
EmployeeNo,
FirstName,
LastName,
BirthDate,
JoinedDate,
DepartmentNo
)
VALUES (
:in_EmployeeNo,
:in_FirstName,
:in_Lastname,
:in_BirthDate,
:in_JoinedDate,
:in_DepartmentNo
);
.IMPORT INFILE employee.txt
FORMAT VARTEXT ','
LAYOUT Employee
APPLY EmpLabel;
.END MLOAD;
LOGOFF;
Generierter Code:¶
#*** Generated code is based on the SnowConvert Python Helpers version 2.0.6 ***
// SnowConvert Helpers Code section is omitted.
import os
import sys
import snowconvert.helpers
from snowconvert.helpers import Export
from snowconvert.helpers import exec
from snowconvert.helpers import BeginLoading
con = None
def main():
snowconvert.helpers.configure_log()
con = snowconvert.helpers.log_on()
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
#.LOGTABLE tduser.Employee_log
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
#.BEGIN MLOAD TABLES Employee_Stg
Employee_TableName = "Employee_TEMP_TABLE"
Employee_Columns = """in_EmployeeNo VARCHAR(10),
in_FirstName VARCHAR(30),
in_LastName VARCHAR(30),
in_BirthDate VARCHAR(10),
in_JoinedDate VARCHAR(10),
in_DepartmentNo VARCHAR(02)"""
Employee_Conditions = """in_EmployeeNo AS in_EmployeeNo, in_FirstName AS in_FirstName, in_LastName AS in_LastName, in_BirthDate AS in_BirthDate, in_JoinedDate AS in_JoinedDate, in_DepartmentNo AS in_DepartmentNo"""
def EmpLabel(tempTableName, queryConditions = ""):
exec(f"""INSERT INTO Employee_Stg (EmployeeNo, FirstName, LastName, BirthDate, JoinedDate, DepartmentNo)
SELECT
SRC.in_EmployeeNo,
SRC.in_FirstName,
:in_Lastname,
SRC.in_BirthDate,
SRC.in_JoinedDate,
SRC.in_DepartmentNo
FROM {tempTableName} SRC {queryConditions}""")
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW **
#.IMPORT INFILE employee.txt FORMAT VARTEXT ',' LAYOUT Employee APPLY EmpLabel
snowconvert.helpers.import_file_to_temptable(fr"employee.txt", Employee_TableName, Employee_Columns, Employee_Conditions, ',')
EmpLabel(Employee_TableName)
exec(f"""DROP TABLE {Employee_TableName}""")
if con is not None:
con.close()
con = None
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-FDM-0028¶
Bemerkung
Dieses FDM
-Feature wird nicht mehr unterstützt. Weitere Informationen finden Sie unter SSC-EWI-0021.
Beschreibung¶
Dieser Fehler tritt auf, wenn Ihr Quellcode einen Knoten oder eine Anweisung enthält, die nicht mit der Funktionalität von Snowflake kompatibel ist.
Beispielcode¶
Eingabecode:¶
WITH my_av ANALYTIC VIEW AS
(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 ))))
SELECT aValue from my_av;
Ausgabecode:¶
----** SSC-FDM-0028 - SubavFactoring NOT SUPPORTED IN SNOWFLAKE **
--WITH my_av ANALYTIC VIEW AS
--(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 ))))
--SELECT aValue from my_av
;
Empfehlungen¶
Dieser Fehler tritt auf, wenn es für den zu konvertierenden Quellcode keine entsprechende Snowflake-Funktionalität gibt.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0029¶
Schweregrad¶
Minimal
Beschreibung¶
Die benutzerdefinierten Funktionen von Snowflake unterscheiden sich von den entsprechenden Funktionen in Oracle oder SQL Server. Bei der Migration dieser Funktionen nach Snowflake werden sie in gespeicherte Prozeduren umgewandelt, um die gleiche Funktionalität beizubehalten. Diese Konvertierung ändert die Art und Weise, wie Sie sie in Ihren Abfragen verwenden.
Beispielcode¶
SQL Server:¶
CREATE OR ALTER FUNCTION PURCHASING.FOO()
RETURNS INT
AS
BEGIN
DECLARE @i int = 0, @p int;
Select @p = COUNT(*) FROM PURCHASING.VENDOR
WHILE (@p < 1000)
BEGIN
SET @i = @i + 1
SET @p = @p + @i
END
IF (@i = 6)
RETURN 1
RETURN @p
END;
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE PURCHASING.FOO ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
I INT := 0;
P INT;
BEGIN
Select
COUNT(*)
INTO
:P
FROM
PURCHASING.VENDOR;
WHILE (:P < 1000) LOOP
I := :I + 1;
P := :P + :I;
END LOOP;
IF ((:I = 6)) THEN
RETURN 1;
END IF;
RETURN :P;
END;
$$;
Oracle:¶
CREATE FUNCTION employee_function (param1 in NUMBER) RETURN NUMBER is
var1 employees.employee_ID%TYPE;
var2 employees.manager_ID%TYPE;
var3 employees.title%TYPE;
BEGIN
SELECT employee_ID, manager_ID, title
INTO var1, var2, var3
FROM employees
START WITH manager_ID = param1
CONNECT BY manager_ID = PRIOR employee_id;
RETURN var1;
EXCEPTION
WHEN no_data_found THEN RETURN param1;
END employee_function;
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE employee_function (param1 NUMBER(38, 18))
RETURNS NUMBER(38, 18)
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "11/14/2024", "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 employees.employee_ID%TYPE;
var2 employees.manager_ID%TYPE;
var3 employees.title%TYPE;
BEGIN
SELECT employee_ID, manager_ID, title
INTO
:var1,
:var2,
:var3
FROM
employees
START WITH manager_ID = :param1
CONNECT BY
manager_ID = PRIOR employee_id;
RETURN :var1;
EXCEPTION
WHEN no_data_found THEN
RETURN :param1;
END;
$$;
Best Practices¶
Zerlegen Sie komplexe Abfragen in kleinere, individuelle Abfragen unter Beibehaltung der ursprünglichen Logik.
Strukturieren Sie den Quellcode neu, um ihn an den Ansatz der benutzerdefinierten Funktionen von Snowflake anzupassen.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-FDM-0030¶
Beschreibung¶
Der Bezeichner enthält Zeichen, die in der Ausgabesprache nicht unterstützt werden. Diese Zeichen wurden durch ihre entsprechenden UTF-8-Codes ersetzt.
Beispielcode¶
Eingabecode (Oracle):¶
CREATE PROCEDURE PROC1
AS
"VAR0" INT;
"VAR`/1ͷ" VARCHAR(20);
"o*/o" FLOAT;
" . " INT;
". ." INT;
"123Name" INT;
"return" INT;
yield INT;
ident#10 INT;
BEGIN
NULL;
END;
Ausgabecode:¶
CREATE OR REPLACE PROCEDURE PROC1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
"VAR0" INT;
--** SSC-FDM-0030 - IDENTIFIER '"VAR`/1ͷ"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
VAR_u60_u2F1_uCD_B7 VARCHAR(20);
--** SSC-FDM-0030 - IDENTIFIER '"o*/o"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
o_u2A_u2Fo FLOAT;
--** SSC-FDM-0030 - IDENTIFIER '" . "' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
_u20_u2E_u20 INT;
--** SSC-FDM-0030 - IDENTIFIER '". ."' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
_u2E_u20_u2E INT;
"123Name" INT;
"return" INT;
yield INT;
IDENT_HASHTAG_10 INT;
BEGIN
NULL;
END;
$$;
Empfehlungen¶
Von den Benutzern ist keine Aktion erforderlich.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-FDM-0031¶
Beschreibung¶
Snowflake konvertiert materialisierte Ansichten (und die Join-Indizes von Teradata) in dynamische Tabellen. Wenn Sie dynamische Tabellen in Snowflake erstellen, müssen Sie zwei erforderliche Parameter angeben:
TARGET_LAG: Definiert die maximal zulässige Verzögerungszeit
WAREHOUSE: Gibt an, welches virtuelle Warehouse verwendet werden soll
Wenn Sie diese Parameter in den Konfigurationsoptionen nicht angeben, wendet das System während des Konvertierungsprozesses automatisch Standardwerte an.
Weitere Informationen zu den erforderlichen Parametern für dynamische Tabellen finden Sie hier.
Beispielcode¶
Eingabecode (Oracle):¶
CREATE MATERIALIZED VIEW mv1
AS SELECT * FROM table1;
Ausgabecode:¶
CREATE OR REPLACE DYNAMIC TABLE mv1
--** 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":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT * FROM
table1;
Empfehlungen¶
Richten Sie die Parameter für dynamische Tabellen nach Ihren spezifischen Anforderungen ein.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-FDM-0032¶
Beschreibung¶
Wenn Sie mehrere Transformationen durchführen, muss SnowConvert die Parameterwerte überprüfen. Dieser Überprüfungsprozess kann nur abgeschlossen werden, wenn die Parameter tatsächliche Werte (Literale) und keine Variablen oder Ausdrücke enthalten.
Diese Warnung erscheint, wenn SnowConvert den Wert eines Parameters nicht ermitteln kann, weil er per Referenz übergeben wurde. Infolgedessen kann die Funktion oder Anweisung nicht vollständig transformiert werden.
Beispielcode¶
Eingabecode (Redshift):¶
SELECT TO_CHAR(DATE '2001-01-01', 'YYY/MM/DD'),
TO_CHAR(DATE '2001-01-01', f)
FROM (SELECT 'YYY/MM/DD' as f);
Ausgabecode:¶
SELECT
PUBLIC.YEAR_PART_UDF(DATE '2001-01-01', 3) || TO_CHAR(DATE '2001-01-01', '/MM/DD'),
--** SSC-FDM-0032 - PARAMETER 'format_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
TO_CHAR(DATE '2001-01-01', f)
FROM (SELECT 'YYY/MM/DD' as f);
Empfehlungen¶
Verwenden Sie, wann immer möglich, einen Literalwert für den angegebenen Parameter.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-FDM-0033¶
Beschreibung¶
Diese Meldung erklärt die Unterschiede im Verhalten von Teradata und Snowflake beim Zeilensampling. Teradata gibt beim nicht deterministischen Sampling eine konstante Anzahl von Zeilen zurück, Snowflake kann jedoch eine geringfügig höhere oder geringere Anzahl von Zeilen zurückgeben. Diese Schwankung in der Zeilenzahl ist normal und wird in Snowflake aufgrund des wahrscheinlichkeitsbasierten Samplingverfahrens erwartet.
Um konsistente und reproduzierbare Ergebnisse beim Abrufen von Daten aus Snowflake zu gewährleisten, empfiehlt es sich, einen Startwert in Ihrer Abfrage zu verwenden. Dadurch wird eine deterministische Ausgabe erzeugt, d. h., Sie erhalten bei jeder Ausführung der Abfrage dieselben Werte und dieselbe Menge an Ergebnissen.
Beispielcode¶
Eingabecode (Teradata):¶
SELECT * FROM Employee SAMPLE 2;
SELECT * FROM Employee SAMPLE 0.25;
Ausgabecode:¶
SELECT
* FROM
Employee
--** SSC-FDM-0033 - SAMPLE CLAUSE BEHAVES DIFFERENTLY IN SNOWFLAKE **
SAMPLE(2 ROWS);
SELECT
* FROM
Employee
--** SSC-FDM-0033 - SAMPLE CLAUSE BEHAVES DIFFERENTLY IN SNOWFLAKE **
SAMPLE(25);
Empfehlungen¶
Für deterministische Ergebnisse fügen Sie den Teil für den Startwert der Abfrage hinzu.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com