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;
Copy
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;
Copy

Best Practices

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);
Copy
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
          );
Copy

Best Practices

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);
Copy
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" }}'
;
Copy

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
);
Copy
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"}}'
;
Copy

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)
);
Copy
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"}}'
;
Copy

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;
Copy
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;
Copy

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;
Copy
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;
Copy

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 ist NUMBER(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;
Copy
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;
Copy

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
Copy
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" }}'
;
Copy

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)
);
Copy
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"}}'
;
Copy

Best Practices

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
);
Copy
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"}}'
 ;
Copy

Best Practices

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
);
Copy
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"}}'
    ;
Copy

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 
);
Copy
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" }}'
;
Copy

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;
Copy
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;
Copy
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);
Copy
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 ***/;
Copy

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 )
);
Copy
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"}}'
  ;
Copy
Eingabecode-Teradaten:
 CREATE TABLE TABLE1,
    NO FALLBACK,
    NO BEFORE JOURNAL,
    NO AFTER JOURNAL
(
    COL0 BYTEINT,
    CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
Copy
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"}}'
;
Copy
Eingabecode SqlServer:
 ALTER TABLE table_name2
ADD column_name VARCHAR(255)
CONSTRAINT constraint_name 
CHECK NOT FOR REPLICATION (column_name > 1);
Copy
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)
                                           ;
Copy

Best Practices

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
);
Copy
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"}}}'
;
Copy

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;
Copy
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;
$$;
Copy

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;
Copy
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
                      ;
Copy

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
);
Copy
Generierter Code:
 CREATE TABLE TABLE01 (
    COLNAME VARCHAR(20)
--                        --** SSC-FDM-0018 - CHARACTER SET CLAUSE IS NOT SUPPORTED BY SNOWFLAKE. **
--                        CHARACTER SET character_specification
);
Copy

Best Practices

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
);
Copy
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"}}'
;
Copy

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;
);
Copy
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;
$$;
Copy

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);
Copy
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)
                  ;
Copy

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;
Copy
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;
Copy
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;
Copy

Best Practices

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;
Copy
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;
$$;
Copy

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
);
Copy
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"}}'
    ;
Copy

Best Practices

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;
Copy
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()
Copy

Best Practices

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;
Copy
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
                        ;
Copy

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;
Copy
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;
$$;
Copy
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;
Copy
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;
$$;
Copy

Best Practices

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;
Copy
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;
$$;
Copy

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;
Copy
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;
Copy

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);
Copy
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);
Copy

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;
Copy
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);
Copy

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")>
);
Copy
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" }}';
Copy

Best Practices

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/*']
);
Copy
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);
Copy

Best Practices

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;
Copy
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;
Copy
Ergebnis
#############
Copy

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;
Copy
Generierter Code
  ----** SSC-FDM-0037 - HELP STATISTICS NOT NEEDED. SNOWFLAKE AUTOMATICALLY COLLECTS STATISTICS. **
  --HELP STATISTICS TestName
Copy

Best Practices

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 *) );
Copy
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" }}'
;
Copy

Best Practices