SnowConvert AI – Allgemeine Funktionsunterschiede¶
SSC-FDM-0001¶
Ansichten, die alle Spalten einer einzelnen Tabelle auswählen, sind in Snowflake nicht erforderlich.
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Ansichten, die nur alle Spalten einer einzelnen Tabelle auswählen und keine Filterklausel enthalten, sind in Snowflake nicht erforderlich und können die Leistung beeinträchtigen.
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 weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0002¶
Korrelierte Unterabfrage kann Funktionsunterschiede aufweisen
Beschreibung¶
Diese Nachricht wird gemeldet, wenn eine Korrelierte Unterabfrage (Unterabfrage, die auf eine Spalte aus der äußeren Abfrage verweist) gefunden wird. Diese Art von Unterabfragen kann in einigen Fällen einige Funktionsunterschiede in Snowflake aufweisen (Arbeiten mit 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 weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0003¶
Inkonsistenz beim Konvertierungssatz
Beschreibung¶
Diese Meldung wird ausgegeben, wenn im angegebenen Bewertungsfeld eine Unstimmigkeit bei der Umwandlungsrate festgestellt wird. Diese Situationen werden automatisch von SnowConvert AI gelöst, sodass dies nur eine informative Warnung ist.
Bemerkung
Diese informative Warnung ist nur in den Bewertungsdokumenten sichtbar und erscheint nicht im Ausgabecode.
Best Practices¶
Trotz der Fähigkeit von SnowConvert AI, das Problem automatisch zu beheben, können Sie das Support-Team weiterhin per E-Mail unter snowconvert-support@snowflake.com kontaktieren und das Problem dort melden.
SSC-FDM-0004¶
Externe Tabelle in reguläre Tabelle übersetzt
Beschreibung¶
Diese Warnung wird zu Klauseln hinzugefügt, die sich auf die externe Handhabung beziehen. Dies liegt daran, dass in Snowflake die Datenspeicherung kein Problem darstellt und keine externen Tabellen benötigt werden. Stattdessen sollten alle Daten innerhalb des Snowflake-Datenspeichers verwaltet werden. Weitere Informationen zu diesem Thema finden Sie hier in den Snowflake-Hinweisen zur Datenspeicherung.
Codebeispiel¶
Eingabecode:¶
CREATE EXTERNAL TABLE ext_csv_file (
id INT,
name TEXT,
age INT,
city TEXT
)
LOCATION (
'gpfdist://192.168.1.100:8080/data/my_data.csv'
)
FORMAT 'CSV' (DELIMITER ',' HEADER);
Generierter Code:¶
--** SSC-FDM-0004 - EXTERNAL TABLE TRANSLATED TO REGULAR TABLE **
CREATE TABLE ext_csv_file (
id INT,
name TEXT,
age INT,
city TEXT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "greenplum", "convertedOn": "07/09/2025", "domain": "no-domain-provided" }}'
;
Best Practices¶
Die Daten, die in den Dateien der externen Tabellen gespeichert sind, müssen in die Snowflake-Datenbank verschoben werden.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0005¶
TIME ZONE wird für Zeitdatentypen nicht unterstützt
Beschreibung¶
Der Datentyp Zeit in Snowflake speichert keine Zeitzonenwerte.
TIME speichert intern die lokale Zeit vor Ort, d. h. alle Vorgänge für TIME-Werte werden ohne jegliche Berücksichtigung von Zeitzonen durchgeführt. Weitere Informationen finden Sie hier.
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¶
Es ist keine Aktion des Endbenutzers erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0006¶
Spalte vom Typ Nummer verhält sich in Snowflake möglicherweise nicht ähnlich.
Beschreibung¶
Diese Functional-Difference-Meldung erscheint, wenn innerhalb einer Tabelle eine Spalte vom NUMBER-Typ erstellt wird. Der Grund dafür sind arithmetische Unterschiede bei der Ausführung von Vorgängen im Zusammenhang mit der Skalierung von Zwischenwerten in Snowflake, die dazu führen können, dass einige Vorgänge fehlschlagen. Weitere Informationen finden Sie in Snowflakes Beitrag zu „Intermediate Numbers in Snowflake“ sowie im Artikel „Number out of representable range“.
Um diese arithmetischen Probleme zu vermeiden, können Sie Datenbeispiele durchführen, um die erforderliche Genauigkeit und Skalierung für diese Vorgänge zu überprüfen.
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 nächsten Beispiele zeigen, wie die arithmetischen Probleme bei der Verwendung von Zahlenspalten auftreten 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 gibt Snowflake einen Fehler zurück:
Zahl außerhalb des darstellbaren Bereichs: Typ FIXEDSB16{nullable}, Wert 1,0000000000000000000
Dies ist darauf zurückzuführen, dass das Ergebnis des Zwischenvorgangs die maximale Kapazität von Snowflake überschreitet. Wenn Sie die Anzahl der Dezimalstellenzahlen um 1 bei jedem Beispiel reduzieren, wird der Fehler behoben und alles funktioniert normal:
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;
Aus diesem Grund legt SnowConvert AI die Standardskalierung von Zahlen auf 18 fest, wodurch die Anzahl der Fehler bei der Migration minimiert wird.
Best Practices¶
Stellen Sie sicher, dass die Zwischenwerte des Vorgangs eine Skalierung von 37 nicht überschreiten, da dies das Maximum von Snowflake ist.
Führen Sie Data Sampling an Ihren Daten aus, um sicherzustellen, dass Sie die erforderliche Genauigkeit und Skalierung haben, bevor Sie Vorgänge ausführen.
In den meisten Fällen werden Sie nach einigen Datensampling oder Diskussionen mit dem Unternehmen zu dem Schluss kommen, dass die Genauigkeit unterschiedlich sein kann. Beispiel: für
MONEY-Spalten istNUMBER(20,4)eine typische Genauigkeit. In Snowflake können Sie den Datentyp einer Spalte nicht einfach ändern. Sie können diesen Beitrag auf unserem Forum lesen. Hier finden Sie einige Hinweise, wie Sie die Datentypen Ihrer Spalten ändern und die Daten erhalten bleiben.Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0007¶
Element mit fehlenden Abhängigkeiten
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Es fehlt eine Abhängigkeit für ein Objekt. Snow Container konnte einige Datentypen nicht auflösen. Außerdem besteht die Möglichkeit eines Bereitstellungsfehlers, wenn die Abhängigkeit nicht im Quellcode enthalten ist.
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
Beachten Sie, dass die TABLE1-Definition fehlt.
Best Practices¶
Stellen Sie sicher, dass alle Abhängigkeiten der Objekte im Quellcode enthalten sind.
Wenn nicht, suchen Sie die Verweise auf das Objekt im Code und prüfen Sie, ob die Vorgänge gut verwaltet werden.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0008¶
On Commit nicht unterstützt
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung ¶
Die ON COMMIT-Klauseln in Ihrer CREATE TABLE-Anweisung wurde auskommentarisiert. Snowflake unterstützt die ON COMMIT-Klausel nicht, da sie typischerweise für temporäre Tabellen in anderen SQL-Dialekten verwendet wird. Wenn Sie transaktionsspezifisches Verhalten steuern müssen, sollten Sie stattdessen die Transaktionsfunktionen von Snowflake oder temporäre Tabellen mit expliziten TRUNCATE- oder DROP-Anweisungen verwenden.
Beispielcode¶
Eingabecode¶
CREATE TEMPORARY TABLE TABLE02 (COLNAME VARCHAR(20)) ON COMMIT DELETE ROWS
Generierter Code¶
CREATE OR REPLACE TEMPORARY TABLE TABLE02 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT (DELETE ROWS) IS NOT SUPPORTED **
--ON COMMIT DELETE ROWS
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "09/22/2025", "domain": "no-domain-provided" }}'
;
SSC-FDM-0009¶
GLOBAL TEMPORARY TABLE-Funktionalität nicht unterstützt.
Beschreibung ¶
Globale temporäre Tabellen werden als komplexes Muster betrachtet, da sie in mehreren Varianten vorkommen können, wie in der Snowflake-Dokumentation.
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 weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0010¶
Typ wurde in Datum geändert.
Beschreibung ¶
Diese Nachricht wird angezeigt, wenn SnowConvert AI ein DEFAULT SYSDATE findet und der Datentyp NOT ein DATE oder TIMESTAMP ist. In diesem Fall wird der Datentyp in DATE geändert.
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 weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0011¶
Spaltenname ist ein von Snowflake reserviertes Schlüsselwort.
Bemerkung
Dieses FDM ist veraltet; bitte lesen Sie die Dokumentation unter SSC-EWI-0045.
Beschreibung ¶
Spaltennamen, die in der Quellsprache gültig sind, aber in Snowflake reservierte Schlüsselwörter darstellen.
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¶
Ziehen Sie in Erwägung, die Spalten umzubenennen, die Namen verwenden, die in Snowflake nicht unterstützt werden.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0012¶
Constraint Name wird in einigen Einschränkungen nicht unterstützt.
Beschreibung ¶
Diese Meldung wird hinzugefügt, wenn eine Einschränkung vom Typ „Null“, „Not Null“ oder „Standard“ ist und mit einem Namen definiert wurde. Snowflake unterstützt die Namen in diesen Einschränkungen nicht. Deshalb entfernt SnowConvert AI sie und fügt einen Kommentar hinzu.
Beispielcode¶
Eingabecode¶
CREATE TABLE TABLE1 (
COL1 VARCHAR (10) CONSTRAINT constraintName DEFAULT ('0') NOT NULL
);
Generierter Code¶
CREATE OR REPLACE TABLE TABLE1 (
COL1 VARCHAR(10) DEFAULT ('0') /*** SSC-FDM-0012 - CONSTRAINT NAME 'constraintName' IN DEFAULT EXPRESSION CONSTRAINT IS NOT SUPPORTED IN SNOWFLAKE ***/ NOT NULL
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/02/2025", "domain": "no-domain-provided" }}'
;
Best Practices¶
Es ist keine Aktion des Endbenutzers erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0013¶
Zeitzonenausdruck konnte nicht zugeordnet werden
Beschreibung ¶
Diese FMD-Nachricht wird hinzugefügt, um auf Szenarien hinzuweisen, in denen der tatsächliche Wert eines Zeitzonenausdrucks nicht bestimmt werden kann und daher die übersetzten Ergebnisse unterschiedlich sein können. Wenn der verwendete Zeitzonenwert eine literale Zeichenfolge ist, kann SnowConvert AI ihn annehmen und ihn dem entsprechenden Zeitzonenwert in Snowflake zuordnen. Wenn dieser Wert jedoch durch einen Ausdruck angegeben wird, kann SnowConvert AI den Wert der Zeitzone, die zur Laufzeit verwendet wird, nicht ermitteln und ihn daher nicht dem entsprechenden Snowflake-Äquivalent zuordnen.
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;
Eingabecode (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);
Generierter Code¶
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 ***/;
¶
Bemerkung
Zeitzonenkompatibilität in Oracle
Die meisten Ausdrücke von Zeitzonennamen in Oracle werden direkt in Snowflake unterstützt. Wenn dies der Fall ist, wird die Migration ohne Probleme ausgeführt. Außerdem finden Sie hier eine Liste der Anbieter, die derzeit nicht von Snowflake unterstützt werden, und daher die Meldung „Funktionsunterschied“ enthalten.
Afrika/Doula
Asien/Ulaanbaator
Asien/Jekaterinburg
Kanada/East-Saskatchewan
CST
PST
US/Pacific-New
Best Practices¶
Es ist keine Aktion des Endbenutzers erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0014¶
Check-Anweisung nicht unterstützt.
Bemerkung
Diese FDM ist veraltet. Weitere Informationen finden Sie unter SSC-EWI-0035 documentation.
Beschreibung¶
CHECK-Einschränkung wird von Snowflake nicht unterstützt, hat aber keine Auswirkungen auf die Funktionalität.
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-Teradaten: ¶
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 weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0015¶
Referenzierter kundenspezifischer Typ in der Abfrage nicht gefunden.
Beschreibung ¶
Dieser Fehler tritt auf, wenn die Definition für einen kundenspezifischen Typ nicht gefunden wurde oder ein in Oracle integrierter Datentyp von SnowConvert nicht erkannt wurde.
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 !!!RESOLVE EWI!!! /*** SSC-EWI-TS0015 - DATA TYPE TYPE1 IS NOT SUPPORTED IN SNOWFLAKE ***/!!! NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}}'
;
Best Practices¶
Überprüfen Sie, ob der Typ, der den referenzierten Datentyp hat, im Eingabecode definiert wurde.
Prüfen Sie die Snowflake-Datentypen Dokumentation, um eine Entsprechung für den Datentyp zu finden.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0016¶
Konstanten werden von Snowflake Scripting nicht unterstützt. Sie wurde in eine Variable umgewandelt.
Beschreibung ¶
Snowflake Scripting unterstützt keine Konstanten. Daher werden alle Konstanten innerhalb von Prozeduren in Variablen umgewandelt, wenn das Snowflake Scripting-Flag aktiviert ist.
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¶
Es sind keine Aktionen des Endbenutzers erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0017¶
WITH SYSTEM VERSIONING-Klausel wird von Snowflake nicht unterstützt.
Beschreibung¶
Die WITH SYSTEM VERSIONING-Klausel in ANSI SQL wird verwendet,wird verwendet, um die Systemversionierung für eine Tabelle zu aktivieren, sodass Sie einen Änderungsverlauf an den Tabellendaten im Zeitverlauf beibehalten können. Diese Klausel wird von Snowflake nicht unterstützt.
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¶
Sie können Time Travel in Snowflake verwenden. Time Travel ermöglicht den Zugriff auf Verlaufsdaten (d. h. Daten, die geändert oder gelöscht wurden) zu einem beliebigen Zeitpunkt innerhalb eines definierten Zeitraums. Es dient als leistungsstarkes Tool zur Ausführung der folgenden Aufgaben:
Wiederherstellen von datenbezogenen Objekten (Tabellen, Schemas und Datenbanken), die versehentlich oder absichtlich gelöscht wurden.
Duplizieren und Sichern von Daten zu wichtigen Zeitpunkten der Vergangenheit.
Analyse der Datennutzung/Datenmanipulation über einen spezifizierten Zeitraum.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0018¶
CHARACTER SET-Klausel wird von Snowflake nicht unterstützt.
Beschreibung¶
Die Spaltenoption CHARACTER SET bestimmt die zulässige Menge von Zeichen, die in der Spalte gespeichert werden können. Diese Klausel wird von 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 weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0019¶
Semantische Informationen konnten nicht geladen werden.
Beschreibung¶
Diese Warnung informiert den Benutzer darüber, dass SnowConvert AI keine semantischen Informationen für ein bestimmtes Objekt laden konnte. Dies wird höchstwahrscheinlich verursacht, weil es ein doppeltes Objekt mit demselben Namen gibt: SnowConvert AI konnte die semantischen Informationen dieses Objekts nicht laden und die Analyse abschließen.
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¶
Prüfen Sie auf doppelte Objekte im Eingabecode, da dies das Laden von semantischen Informationen beeinträchtigen kann.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0020¶
Mehrere Resultsets werden in temporären Tabellen zurückgegeben
Beschreibung¶
In Snowflake Scripting-Prozeduren kann nur ein Resultset pro Prozedur zurückgegeben werden.
Um das Verhalten von Teradata zu replizieren, werden, wenn zwei oder mehr Resultsets zurückgegeben werden sollen, diese in temporären Tabellen gespeichert. Die Snowflake Scripting-Prozedur gibt ein Array zurück, das den Namen der temporären Tabellen enthält.
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¶
Um die Resultsets zu erhalten, muss eine SELECT Abfrage mit den Namen der temporären Tabellen ausgeführt werden, die von der Prozedur zurückgegeben werden.
Vermeiden Sie so weit wie möglich Prozeduren, die mehrere Resultsets zurückgeben. Überlassen Sie sie stattdessen der Verantwortung für direktere Ergebnisse.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0021¶
Index erstellen wird nicht unterstützt.
Beschreibung¶
Aus architektonischen Gründen unterstützt Snowflake keine Indizes, sodass SnowConvert AI den gesamten Code auskommentiert, der mit der Erstellung von Indizes zusammenhängt. Snowflake erstellt automatisch Mikropartitionen für jede Tabelle, um die Leistung von DML-Operationen zu beschleunigen. Benutzende müssen sich so nicht um die Erstellung oder Verwaltung dieser Mikropartitionen kümmern.
In der Regel reicht dies aus, um eine sehr gute Abfrageleistung zu erzielen. Es gibt jedoch Möglichkeiten, diese durch das Erstellen von Datengruppierungsschlüsseln zu verbessern. Die offiziellen Seite von Snowflake bietet weitere Informationen zu 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 könnte eine Möglichkeit sein, die Abfrageleistung von Tabellen zu beschleunigen.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0022¶
Die Fensterrahmeneinheit wurde in Zeilen geändert.
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung wird hinzugefügt, wenn eine nicht unterstützte Fensterrahmeneinheit in Zeilen geändert wurde, was zu Unterschieden in der Ausgabe führte. Ein Beispiel hierfür ist die GROUPS-Einheit, die von Snowflake nicht unterstützt wird.
Bitte beachten Sie, dass diese Meldung auch in Fällen verwendet wird, in denen eine Fensterrahmeneinheit teilweise nicht unterstützt wird und daher geändert werden muss, wie beispielsweise die RANGE-Einheit.
Beispielcode¶
Nehmen wir die folgenden Daten als Beispiel, um dies zu erklären.
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:¶
Code¶
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;
Ergebnis¶
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:¶
Code¶
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;
Ergebnis¶
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 |
Best Practices¶
Stellen Sie eine deterministische Reihenfolge für Zeilen sicher, um deterministische Ausgaben bei der Ausführung in Snowflake zu gewährleisten.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0023¶
Es wird eine globale temporäre Tabelle referenziert.
Schweregrad¶
Medium
Beschreibung¶
SnowConvert AI wandelt globale temporäre Tabellen in reguläre CREATE TABLE-Anweisungen um. Verweise auf diese Tabellen verhalten sich möglicherweise anders als erwartet.
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;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0024¶
Die Funktion wird derzeit nicht von Snowflake Scripting unterstützt.
Bemerkung
Diese FDM ist veraltet. Weitere Informationen finden Sie unter [SSC-EWI-0058.
Beschreibung¶
Dieser Fehler tritt auf, wenn eine Anweisung, die in einer Erstellungsprozedur verwendet wird, derzeit nicht von Snowflake Scripting unterstützt wird.
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;
$$;
Best Practices¶
Es sind keine Aktionen des Endbenutzers erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0026¶
Typ, der von Snowflake nicht unterstützt wird.
Bemerkung
Diese FDM ist veraltet. Weitere Informationen finden Sie unter SSC-EWI-0028.
Beschreibung¶
Diese Nachricht wird angezeigt, wenn ein Typ in Snowflake nicht unterstützt wird.
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"}}'
;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0027¶
Nächste Anweisung entfernt, da sie in SnowFlake nicht anwendbar ist.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese Meldung wird angezeigt, wenn eine bestimmte Anweisung in Snowflake nicht anwendbar ist. Dies bedeutet, dass es kein Snowflake-Äquivalent für diese Anweisung gibt und sie nicht mehr benötigt wird. Aus diesem Grund wird sie aus dem Quellcode entfernt. Allerdings behält SnowConvert AI die ursprüngliche Anweisung als Teil des Kommentars am Ende 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 AI Python Helpers version 2.0.6 ***
// SnowConvert AI 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()
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0028¶
Nicht unterstützt.
Bemerkung
Diese FDM ist veraltet. Weitere Informationen finden Sie unterSSC-EWI-0021
Beschreibung¶
Diese Meldung wird angezeigt, wenn ein bestimmter Knoten oder eine Anweisung aus dem Quellcode von Snowflake nicht unterstützt wird.
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;
Generierter Code:¶
----** 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
;
Best Practices¶
Wenn dieser Fehler auftritt, liegt es daran, dass es kein Snowflake-Äquivalent für den zu konvertierenden Knoten gibt.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0029¶
Die benutzerdefinierte Funktion wurde in eine Snowflake-Prozedur umgewandelt.
Warnung
Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-EWI-0068.
Schweregrad¶
Niedrig
Beschreibung¶
Benutzerdefinierte Funktionen von Snowflake unterstützen nicht die gleichen Features wie Oracle oder SQL Server. Um die funktionalen Äquivalenz aufrechtzuerhalten, wird die Funktion in eine gespeicherte Snowflake-Prozedur umgewandelt. Dies wird sich auf deren Verwendung in Abfragen auswirken.
Beispielcode¶
SQL Server:¶
Eingabecode¶
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;
Generierter Code¶
--** 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:¶
Eingabecode¶
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;
Generierter Code¶
--** 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¶
Trennen Sie die internen Abfragen, um die gleiche Logik beizubehalten.
Der Quellcode muss möglicherweise umstrukturiert werden, um dem Ansatz von Snowflake für benutzerdefinierte Funktionen zu entsprechen.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0030¶
Ungültige Zeichen für neuen Bezeichner ersetzt
Beschreibung¶
Der angegebene Bezeichner enthält ungültige Zeichen für die Ausgabesprache. Diese Zeichen wurden durch 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;
Generierter Code:¶
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;
$$;
Best Practices¶
Es sind keine Aktionen des Endbenutzers erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0031¶
Erforderliche Parameter für dynamische Tabelle standardmäßig festgelegt
Beschreibung¶
Materialisierte Ansichten (und Join-Indizes im Fall von Teradata) werden in dynamische Tabellen in Snowflake migriert. Für dynamische Tabellen müssen zwei Parameter festgelegt werden: TARGET_LAG und WAREHOUSE.
Wenn diese Parameter nicht in den -Konfigurationsoptionen eingestellt sind, werden sie bei der Konvertierung standardmäßig eingestellt.
Lesen Sie hier mehr über die erforderlichen Parameter für dynamische Tabellen.
Beispielcode¶
Eingabecode (Oracle):¶
CREATE MATERIALIZED VIEW mv1
AS SELECT * FROM table1;
Generierter Code:¶
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;
Best Practices¶
Konfigurieren Sie die erforderlichen Parameter für die dynamische Tabelle entsprechend Ihren Anforderungen.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0032¶
Parameter ist kein literaler Wert, die Transformation konnte nicht vollständig angewendet werden
Beschreibung¶
Für mehrere Transformationen: SnowConvert AI erfordert manchmal, den Inhalt eines Parameters zu überprüfen. Dies ist nur möglich, wenn der Parameter ein Literalwert ist.
Diese Meldung wird generiert, um den Benutzer darüber zu warnen, dass SnowConvert AI den Wert des Parameters nicht abrufen konnte, da er per Referenz übergeben wurde. Dadurch konnte die Transformation der Funktion oder Anweisung nicht abgeschlossen 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);
Generierter Code:¶
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);
Best Practices¶
Versuchen Sie, den angegebenen Parameter als Literalwert anzugeben.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0033¶
Die Beispielklausel verhält sich in Snowflake anders.
Beschreibung¶
Diese Nachricht wird generiert, um den funktionalen Unterschied beim Sampling von Zeilen in Snowflake zu verdeutlichen. Der Unterschied hängt mit der Menge der abgerufenen Zeilen zusammen. Wenn in Teradata die gleiche Anzahl von Zeilen in der nicht deterministischen Ausgabe vorhanden ist, kann sich die Ausgabe in Snowflake ändern und einige Zeilen mehr oder weniger zurückgeben. Dies ist erforderlich, da es sich um ein Wahrscheinlichkeitsthema handelt und erwartet wird, dass sich in Snowflake so verhält.
Wenn Sie bei einer deterministischen Ausgabe dieselben Werte und dieselbe Menge abrufen müssen, wird empfohlen, einen Startwert in der Snowflake-Abfrage zu verwenden.
Beispielcode¶
Eingabecode (Teradata):¶
SELECT * FROM Employee SAMPLE 2;
SELECT * FROM Employee SAMPLE 0.25;
Generierter Code:¶
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);
Best Practices¶
Versuchen Sie, den Startwert-Teil der Abfrage zu verwenden, wenn diese eine deterministische Ausgabe erfordert.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0034¶
Struktur, die in VARIANT konvertiert wurde. Einige der Verwendungen können funktionale Unterschiede aufweisen.
Beschreibung¶
Snowflake bietet keine native Unterstützung des Datentyps STRUCT. SnowConvert AI konvertiert STRUCT automatisch zu VARIANT. Bei Verwendung in INSERT-Anweisungen werden STRUCT-Daten mit OBJECT_CONSTRUCT verarbeitet. Beachten Sie, dass diese Konvertierung in einigen Anwendungsfällen zu funktionalen Unterschieden führen kann.
Codebeispiel¶
Eingabecode:¶
BigQuery¶
CREATE OR REPLACE TABLE test.structTypes
(
COL1 STRUCT<sc1 INT64>,
COL2 STRUCT<sc2 STRING(10)>,
COL3 STRUCT<sc3 STRUCT<sc31 INT64, sc32 INT64>>,
COL4 STRUCT<sc4 ARRAY<INT64>>,
COL5 STRUCT<sc5 INT64, sc51 INT64>,
COL7 STRUCT<sc7 INT64 OPTIONS(description = "A repeated STRING field"), sc71 BOOL>,
COL8 STRUCT<sc8 INT64 NOT NULL, sc81 BOOL NOT NULL OPTIONS(description = "A repeated STRING field")>
);
Generierter Code:¶
Snowflake¶
CREATE OR REPLACE TABLE test.structTypes
(
COL1 VARIANT /*** SSC-FDM-0034 - STRUCT<INT64> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL2 VARIANT /*** SSC-FDM-0034 - STRUCT<STRING(10)> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL3 VARIANT /*** SSC-FDM-0034 - STRUCT<STRUCT<INT64, INT64>> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL4 VARIANT /*** SSC-FDM-0034 - STRUCT<ARRAY<INT64>> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL5 VARIANT /*** SSC-FDM-0034 - STRUCT<INT64, INT64> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL7 VARIANT /*** SSC-FDM-0034 - STRUCT<INT, BOOL> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL8 VARIANT /*** SSC-FDM-0034 - STRUCT<INT64, BOOLEAN> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "bigquery", "convertedOn": "05/30/2025", "domain": "no-domain-provided" }}';
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0035¶
Die INFER_SCHEMA-Funktion erfordert einen Dateipfad ohne Platzhalter, um die Tabellenvorlage zu generieren und den FILE_PATH-Platzhalter damit zu ersetzen.
Beschreibung¶
Die Funktion INFER_SCHEMA-wird in Snowflake verwendet, um die Spaltendefinition einer Tabelle basierend auf der Struktur einer Datei zu generieren. Sie erfordert einen LOCATION-Parameter, der den Pfad zu einer Datei oder einem Ordner angibt, aus dem die Tabellenspalten erstellt werden. Dieser Pfad unterstützt jedoch keine regulären Ausdrücke, das heißt, das Platzhalterzeichen * wird nicht unterstützt.
Wenn die Tabelle keine Spalten enthält, prüft SnowConvert AI alle URIS, um eine zu finden, die keine Platzhalter verwendet, und nutzt diese in der INFER_SCHEMA-Funktion. Wenn keine URI diesen Kriterien entspricht, werden diese FDM und ein FILE_PATH-Platzhalter generiert. Der Platzhalter muss anschließend durch den Pfad einer der von der externen Tabelle referenzierten Dateien ersetzt werden, um die Tabellenspalten zu erzeugen.
Codebeispiel¶
Eingabecode:¶
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_json2
OPTIONS(
FORMAT='JSON',
URIS=['gs://sc_external_table_bucket/folder_with_json/*']
);
Generierter Code:¶
Snowflake¶
CREATE OR REPLACE TEMPORARY FILE FORMAT SC_TEST_MY_EXTERNAL_TABLE_JSON2_FORMAT
TYPE = JSON;
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_json2 USING TEMPLATE (
SELECT
ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME', COLUMN_NAME, 'TYPE', TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION', EXPRESSION))
FROM
--** SSC-FDM-0035 - THE INFER_SCHEMA FUNCTION REQUIRES A FILE PATH WITHOUT WILDCARDS TO GENERATE THE TABLE TEMPLATE, REPLACE THE FILE_PATH PLACEHOLDER WITH IT **
TABLE(INFER_SCHEMA(LOCATION => '@EXTERNAL_STAGE/FILE_PATH', FILE_FORMAT => 'SC_TEST_MY_EXTERNAL_TABLE_JSON2_FORMAT'))
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://sc_external_table_bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = 'folder_with_json/.*'
FILE_FORMAT = (TYPE = JSON);
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0036¶
Das transformierte Zahlen-/Datumsformat kann in Snowflake ein anderes Verhalten aufweisen.
Beschreibung¶
Die in Snowflake umgewandelten numerischen Formate verwenden feste Positionsformate. Das transformierte Format kann fehlschlagen und eine andere Ausgabe generieren, wenn der ganzzahlige Teil der Zahl mehr Ziffern enthält als Ziffernpositionen im Format. Alle Ziffern werden als # ausgegeben, um einen Überlauf anzuzeigen.
Codebeispiel¶
Eingabecode:¶
SQL Server¶
SELECT
FORMAT(value, '00.00') as formatted,
FORMAT(value, '#,##0') as formatSource
FROM MY_TABLE;
Generierter Code:¶
Snowflake¶
SELECT
TO_CHAR(value, 'FM9999999999900.00') /*** SSC-FDM-0036 - TRANSFORMATION OF '00.00' FORMAT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/ as formatted,
TO_CHAR(value, 'FM9,999,999,999,990') /*** SSC-FDM-0036 - TRANSFORMATION OF '#,##0' FORMAT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/ as formatSource
FROM
MY_TABLE;
Ergebnis¶
#############
Best Practices¶
Wenn die numerische Ziffer nicht in das Format passt, aktualisieren Sie das Format, indem Sie weitere Ziffern basierend auf den möglichen Eingabedatenwerten hinzufügen.
SSC-FDM-0037¶
Statistikfunktion wird in Snowflake nicht benötigt.
Beschreibung¶
DROP, COLLECT oder HELP-Statistiken werden in Snowflake nicht benötigt. Snowflake sammelt bereits Statistiken, die zur automatischen Abfrageoptimierung verwendet werden.
Beispielcode¶
Eingabecode:¶
HELP STATISTICS TestName;
Generierter Code¶
----** SSC-FDM-0037 - HELP STATISTICS NOT NEEDED. SNOWFLAKE AUTOMATICALLY COLLECTS STATISTICS. **
--HELP STATISTICS TestName
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-0038¶
Die Mikropartitionierung wird automatisch für alle Snowflake-Tabellen durchgeführt.
Beschreibung¶
Diese Meldung wird der CREATE TABLE-Anweisung hinzugefügt, wenn eine PARTITION BY-Klausel vorhanden ist. Die PARTITION BY-Klausel, die die Tabellenpartitionierung in einigen Datenbanken steuert, wird in Snowflake nicht unterstützt.
In Snowflake werden alle Tabellen automatisch in Mikropartitionen unterteilt, d. h. zusammenhängende Speichereinheiten reichen von 50 MB bis 500 MB unkomprimierter Daten. Diese Architektur ermöglicht ein hochgranulares Verkürzen großer Tabellen, die aus Millionen von Mikropartitionen bestehen können.
Snowflake speichert automatisch Metadaten für jede Mikropartition, einschließlich:
Wertebereich jeder Spalte in der Mikropartition.
Anzahl unterschiedlicher Werte.
Zusätzliche Eigenschaften, die sowohl für die Optimierung als auch für die effiziente Abfrageverarbeitung verwendet werden.
Tabellen werden transparent in der Reihenfolge partitioniert, in der die Daten eingefügt oder geladen werden. Weitere Informationen dazu finden Sie unter Vorteile der Mikropartitionierung.
Beispielcode¶
Eingabecode:¶
CREATE TABLE orders
(
storeid INTEGER NOT NULL,
productid INTEGER NOT NULL,
orderdate DATE FORMAT 'yyyy-mm-dd' NOT NULL,
totalorders INTEGER NOT NULL)
PRIMARY INDEX (storeid, productid)
PARTITION BY (RANGE_N(totalorders BETWEEN *, 100, 1000 AND *),RANGE_N(orderdate BETWEEN *, '2005-12-31' AND *) );
Generierter Code¶
CREATE OR REPLACE TABLE orders
(
storeid INTEGER NOT NULL,
productid INTEGER NOT NULL,
orderdate DATE NOT NULL,
totalorders INTEGER NOT NULL)
-- --** SSC-FDM-0038 - MICRO-PARTITIONING IS AUTOMATICALLY HANDLED ON ALL SNOWFLAKE TABLES **
-- PARTITION BY (RANGE_N(totalorders BETWEEN *, 100, 1000 AND *)
-- ,RANGE_N(orderdate BETWEEN *, '2005-12-31' AND *) )
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "09/17/2025", "domain": "no-domain-provided" }}'
;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.