SnowConvert: Allgemeine funktionale Unterschiede

SSC-FDM-0001

Bemerkung

Für eine bessere Lesbarkeit haben wir die Codebeispiele vereinfacht, indem wir nur die wichtigsten Teile zeigen.

Beschreibung

Ansichten, die alle Spalten aus einer einzelnen Tabelle ohne Filterbedingungen auswählen (WHERE-Klausel), sind in Snowflake unnötig und können die Abfrageleistung negativ beeinflussen.

Codebeispiel

Eingabecode (Oracle):
 CREATE OR REPLACE VIEW simpleView1
AS
SELECT
*
FROM
simpleTable;

CREATE OR REPLACE VIEW simpleView2
AS
SELECT
*
FROM
simpleTable GROUP BY col1;
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

Beschreibung

Diese Meldung wird angezeigt, wenn eine korrelierte Unterabfrage entdeckt wird. Eine korrelierte Unterabfrage referenziert eine Spalte aus der äußeren Abfrage. Bei der Migration nach Snowflake können sich diese Unterabfragen in einigen Fällen anders verhalten. Weitere Einzelheiten finden Sie unter Verwenden von Unterabfragen.

Codebeispiel

Eingabecode:
 CREATE TABLE schema1.table1(column1 NVARCHAR(50), column2 NVARCHAR(50));
CREATE TABLE schemaA.tableA(columnA NVARCHAR(50), columnB NVARCHAR(50));

--Correlated Subquery
SELECT columnA FROM schemaA.tableA ta WHERE columnA = (SELECT SUM(column1) FROM schema1.table1 t1 WHERE t1.column1 = ta.columnA);
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

Beschreibung

Diese Warnung erscheint, wenn die Konvertierungsraten für das angegebene Beurteilungsfeld nicht übereinstimmen. SC löst diese Unstimmigkeiten automatisch auf, daher dient diese Meldung nur zu Informationszwecken.

Bemerkung

Diese Warnmeldung erscheint nur in Bewertungsdokumenten und wird nicht im Ausgabecode angezeigt.

Best Practices

SSC-FDM-0004

Beschreibung

Diese Warnung erscheint in Klauseln, die sich auf die externe Behandlung beziehen, da Snowflake den Datenspeicher anders verwaltet. Im Gegensatz zu anderen Datenbanken benötigt Snowflake keine externen Tabellen, da alle Daten innerhalb des internen Speichersystems von Snowflake gespeichert werden sollten. Weitere Informationen zu diesem Thema finden Sie unter Hinweise zur Datenspeicherung.

Codebeispiel

Eingabecode:
 CREATE OR REPLACE EXTERNAL TABLE external_table_test1
(
  col1 INTEGER
)
OPTIONS (
  format = 'CSV',
  uris = ['gs://my_bucket/file.csv']
);
Copy
Generierter Code:
 --** SSC-FDM-0004 - EXTERNAL TABLE TRANSLATED TO REGULAR TABLE **
CREATE OR REPLACE TABLE external_table_test1 (
   col1 INTEGER
 )
-- OPTIONS (
--   format = 'CSV',
--   uris = ['gs://my_bucket/file.csv']
-- )
  ;
Copy

Best Practices

  • Daten aus externen Tabellendateien müssen in Ihre Snowflake-Datenbank importiert werden.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-0005

Beschreibung

Der Datentyp TIME in Snowflake speichert nur die Zeitkomponente ohne jegliche Zeitzoneninformationen.

TIME speichert Uhrzeitwerte und führt alle Operationen ohne Berücksichtigung von Zeitzonen durch. Weitere Einzelheiten finden Sie unter TIME.

Beispielcode

Eingabecode:
 CREATE TABLE TABLE_TIME_TYPE (
    COLNAME TIME (9) WITH TIME ZONE
);
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

  • Von den Benutzern ist keine Aktion erforderlich.

  • Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-0006

Beschreibung

Diese Meldung erscheint, wenn Sie eine Spalte mit dem Datentyp NUMBER in einer Tabelle erstellen. Sie warnt vor möglichen arithmetischen Unterschieden in Snowflake, wenn Sie bei Zwischenberechnungen mit Dezimalstellen arbeiten. Diese Unterschiede können dazu führen, dass einige Operationen fehlschlagen. Weitere Einzelheiten finden Sie im Beitrag von Snowflake zu Zwischenergebnissen in Snowflake und zum Fehler Number out of representable range.

Um Probleme bei der arithmetischen Berechnung zu vermeiden, empfehlen wir, zunächst Stichprobentests durchzuführen. Dies wird Ihnen helfen, die richtigen Werte für die Präzision und Dezimalstellen zu bestimmen, die Sie für Ihre Operationen benötigen.

Beispielcodes

Einfache Tabelle mit Zahlenspalten

Eingabecode (Oracle):
 CREATE TABLE table1
(
column1 NUMBER,
column2 NUMBER (20, 4)
);
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 folgenden Beispiele zeigen, wie arithmetische Operationen bei der Arbeit mit Spalten vom Typ Number zu unerwarteten Ergebnissen führen können:

Snowflake-Code mit Divisionsfehler:
 CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 19) );

INSERT INTO number_table VALUES (1);

SELECT column1 / column1 FROM number_table;
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 in Snowflake wird eine Fehlermeldung angezeigt.

Number exceeds the allowed range for data type FIXEDSB16 (nullable). The value 1.0000000000000000000 cannot be stored in this data type.

Dieser Fehler tritt auf, wenn das Berechnungsergebnis die maximale Speicherkapazität von Snowflake überschreitet. Um dieses Problem zu lösen, reduzieren Sie in jedem Beispiel die Anzahl der Dezimalstellen um 1. Dadurch kann die Operation erfolgreich abgeschlossen werden.

Snowflake-Code mit Division:
 CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 18) );

INSERT INTO number_table VALUES (1);

SELECT column1 / column1 FROM number_table;
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

FehlerUm Migrationsfehler zu minimieren, setzt SnowConvert die Standardanzahl der Dezimalstellen automatisch auf 18.

Best Practices

  • Vergewissern Sie sich, dass die Zwischenwerte in Ihren Operationen die maximale Anzahl der Dezimalstellen von Snowflake von 37 nicht überschreiten.

  • Analysieren Sie Beispieldaten, um die erforderlichen Einstellungen für Präzision und Dezimalstellenanzahl zu überprüfen, bevor Sie Operationen durchführen.

  • Oft stellen Sie nach dem Sampling von Daten oder nach Gesprächen im Unternehmen fest, dass andere Präzisionseinstellungen besser geeignet sind. Zum Beispiel wird für MONEY-Spalten in der Regel NUMBER(20,4) verwendet. Da das Ändern von Spaltendatentypen in Snowflake nicht ganz einfach ist, finden Sie in diesem Beitrag in unserem Forum eine Anleitung zum Ändern von Spaltendatentypen unter Beibehaltung der Daten.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com

SSC-FDM-0007

Bemerkung

Die Codeausschnitte wurden vereinfacht, um sich auf die wichtigsten Konzepte zu konzentrieren

Beschreibung

Ein Bereitstellungsfehler kann auftreten, wenn SnowConvert eine erforderliche Abhängigkeit nicht finden oder bestimmte Datentypen nicht auflösen kann. Dies kann passieren, wenn das abhängige Objekt im Quellcode fehlt.

Beispielcode

Eingabecode:
 CREATE VIEW VIEW01 AS SELECT * FROM TABLE1;
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

Die Definition von TABLE1 wurde in diesem Beispiel nicht angegeben.

Best Practices

  • Überprüfen Sie, ob alle Objektabhängigkeiten in Ihrem Quellcode enthalten sind.

  • Überprüfen Sie alle Objektreferenzen im Code, um sicherzustellen, dass sie richtig behandelt werden.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com

SSC-FDM-0008

Bemerkung

Zur besseren Lesbarkeit haben wir einige Abschnitte des Codes in diesem Beispiel vereinfacht.

Beschreibung

Bei der Erstellung von Tabellen in Snowflake kann die ON-Klausel COMMIT nur für temporäre Tabellen verwendet werden. Wenn Sie eine ON COMMIT-Klausel in eine nicht temporäre Tabellendefinition einfügen, wird sie im konvertierten Code auskommentiert. Da Snowflake ON COMMIT DELETE nicht unterstützt, wird auch diese Option bei der Konvertierung auskommentiert.

Beispielcode

Eingabecode
 CREATE TABLE TABLE01 (COLNAME VARCHAR(20)) ON COMMIT PRESERVE ROWS
CREATE TEMPORARY TABLE TABLE02 (COLNAME VARCHAR(20)) ON COMMIT DELETE ROWS
Copy
Generierter Code
 CREATE OR REPLACE TABLE TABLE01 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT PRESERVE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;

CREATE OR REPLACE TEMPORARY TABLE TABLE02 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT DELETE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Copy

Best Practices

SSC-FDM-0009

Beschreibung

Globale temporäre Tabellen sind komplex, da sie auf verschiedene Arten erstellt werden können, wie in der Snowflake-Dokumentation beschrieben.

Beispielcode

Eingabecode
 CREATE OR REPLACE GLOBAL TEMPORARY TABLE GLOBAL_TEMP_TABLE
(
    col3 INTEGER,
    col4 VARCHAR(50)
);
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

Beschreibung

Diese Meldung erscheint, wenn SnowConvert eine DEFAULT SYSDATE-Klausel entdeckt, wobei der Datentyp der Spalte nicht DATE oder TIMESTAMP ist. In solchen Fällen konvertiert SnowConvert den Datentyp automatisch in DATE.

Beispielcode

Eingabecode
 CREATE TABLE "SYSDATE_DEFAULT_TEST_TABLE_1"( 
 "COLUMN1" VARCHAR2(30 BYTE) DEFAULT SYSDATE
);
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

Bemerkung

Diese FDM wird nicht mehr unterstützt. Weitere Informationen finden Sie unter SSC-EWI-0045.

Beschreibung

Spaltennamen, die in Snowflake reservierte Schlüsselwörter sind, aber in der Quelldatenbank gültig sind.

Beispielcode

Eingabecode (Oracle):
 CREATE TABLE T1
(
    LOCALTIME VARCHAR,
    CURRENT_USER VARCHAR
);
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

  • Benennen Sie alle Spalten um, die in Snowflake nicht unterstützte Namen haben.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-0012

Beschreibung

Diese Warnung erscheint, wenn ein Constraint constraintName in einem Standardausdruck einer Spalte verwendet wird. Da Snowflake keine Beschränkungen in Standardausdrücken unterstützt, werden die Einschränkung und ihr constraintName automatisch entfernt, und es wird eine Warnmeldung generiert.

Beispielcode

Eingabecode
 CREATE TABLE TABLE1 ( 
COL1 VARCHAR (10) CONSTRAINT constraintName DEFAULT ('0') NOT NULL 
);
Copy
Generierter Code
 CREATE OR REPLACE TABLE TABLE1 (
COL1 VARCHAR(10)
                 --** SSC-FDM-0012 - CONSTRAINT IN DEFAULT EXPRESSION IS NOT SUPPORTED IN SNOWFLAKE **
                 DEFAULT ('0') NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Copy

Best Practices

  • Von den Benutzern ist keine Aktion erforderlich.

  • Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-0013

Beschreibung

Es wurde eine Warnmeldung hinzugefügt, um auf Fälle hinzuweisen, in denen Zeitzonenausdrücke während der Konvertierung nicht ausgewertet werden können. SnowConvert kann zwar literale Zeitzonen-Zeichenfolgen erfolgreich ihren Snowflake-Entsprechungen zuordnen, aber es kann keine Zeitzonenwerte ermitteln, die durch Ausdrücke angegeben werden. Diese Beschränkung bedeutet, dass die Laufzeitergebnisse in Snowflake vom Quellsystem abweichen können, wenn dynamische Zeitzonenausdrücke verwendet werden.

Beispielcode

Eingabecode (Oracle)
 SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE SESSIONTIMEZONE FROM DUAL;
SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE Expression FROM DUAL;
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
Quellcode (Teradata)
 select TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE SESSIONTIMEZONE;
select current_timestamp at time zone CONCAT(' America ', ' Pacific'); 
select current_timestamp at time zone (SELECT COL1 FROM TABLE1 WHERE COL2 = 2);
Copy
Ausgabecode
 SELECT
CONVERT_TIMEZONE(SESSIONTIMEZONE, TIMESTAMP '1998-12-25 09:26:50.12') /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;

SELECT
CONVERT_TIMEZONE(CONCAT(' America ', ' Pacific'), CURRENT_TIMESTAMP) /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;

SELECT
CONVERT_TIMEZONE((
SELECT
COL1 FROM
TABLE1
WHERE COL2 = 2), CURRENT_TIMESTAMP) /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
Copy

Zeitzonenkompatibilität mit Oracle

Die meisten Oracle-Zeitzonennamen sind direkt mit Snowflake kompatibel, was eine reibungslose Migration ermöglicht. Einige Zeitzonenausdrücke werden jedoch derzeit in Snowflake nicht unterstützt und generieren bei der Migration eine FDM (Functional Difference Message).

  • Africa/Douala

  • Asia/Ulaanbaatar

  • Asia/Yekaterinburg

  • Canada/Saskatchewan

  • Central Standard Time (CST)

  • Pacific Standard Time (PST)

  • US/Pacific

Best Practices

  • Von den Benutzern ist keine Aktion erforderlich.

  • Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-0014

Bemerkung

Diese FDM wird nicht mehr unterstützt. Weitere Informationen finden Sie unter SSC-EWI-0035.

Beschreibung

Die _ CHECK _-Einschränkung wird in Snowflake nicht unterstützt, aber diese Beschränkung hat keinen Einfluss auf die Funktionalität Ihrer Datenbank.

Beispielcode

Eingabecode Oracle:
 CREATE TABLE "Schema"."BaseTable"(
  "COLUMN1" VARCHAR2(255),
  CHECK ( COLUMN1 IS NOT NULL )
);
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 Teradata:
 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

Beschreibung

Dieser Fehler tritt auf, wenn SnowConvert keines von beidem finden kann:

  • Eine benutzerdefinierte Definition eines benutzerdefinierten Typs

  • Ein bekannter integrierter Oracle-Datentyp

Beispielcode

Eingabecode (Oracle):
 --Type was never defined
--CREATE TYPE type1;

CREATE TABLE table1
(
column1 type1
);
Copy
Generierter Code:
 --Type was never defined
--CREATE TYPE type1;

CREATE OR REPLACE TABLE table1
(
column1 VARIANT /*** SSC-FDM-TS0015 - DATA TYPE TYPE1 IS NOT SUPPORTED IN SNOWFLAKE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Copy

Best Practices

  • Vergewissern Sie sich, dass der Datentyp in Ihrem Quellcode richtig definiert wurde.

  • Lesen Sie die Dokumentation zu Snowflake-Datentypen, um einen passenden Datentyp zu finden.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com

SSC-FDM-0016

Beschreibung

Snowflake Scripting unterstützt keine konstanten Werte. Wenn das Feature Snowflake Scripting aktiviert ist, werden alle Konstanten innerhalb von Prozeduren automatisch in Variablen konvertiert.

Beispielcode

Oracle:
 CREATE OR REPLACE PROCEDURE p_constants
AS
my_const1 CONSTANT NUMBER := 40;
my_const2 CONSTANT NUMBER NOT NULL := 40;
BEGIN
NULL;
END;
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

  • Von den Benutzern ist keine Aktion erforderlich.

  • Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-0017

Beschreibung

Die Systemversionierung, die durch die WITH SYSTEM VERSIONING-Klausel in ANSI SQL aktiviert wird, verfolgt historische Änderungen an Tabellendaten. Allerdings ist dieses Feature in Snowflake derzeit nicht verfügbar.

Codebeispiel

Eingabecode:
 CREATE TABLE t1 (
    ID INT PRIMARY KEY,
    Name VARCHAR(50),
    SysStartTime TIMESTAMP,
    SysEndTime TIMESTAMP
) WITH SYSTEM VERSIONING;
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

  • Mit dem Feature Time Travel von Snowflake können Sie auf historische Daten, einschließlich geänderter oder gelöschter Daten, innerhalb eines bestimmten Zeitraums zugreifen. Mit diesem Feature können Sie:

    • Versehentlich oder absichtlich gelöschte Datenobjekte (Tabellen, Schemas und Datenbanken) wiederherstellen

    • Kopien und Sicherungen von Daten zu bestimmten Zeitpunkten erstellen

    • Verfolgen und analysieren, wie die Daten im Laufe der Zeit verwendet oder geändert wurden

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-0018

Beschreibung

Die CHARACTER SET-Spaltenoption, die die zulässigen Zeichen definiert, die in einer Spalte gespeichert werden können, wird in Snowflake nicht unterstützt.

Codebeispiel

Eingabecode:
 CREATE TABLE TABLE01(
    COLNAME VARCHAR(20) CHARACTER SET character_specification
);
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

Beschreibung

Diese Warnung zeigt an, dass SnowConvert nicht auf die semantischen Informationen für ein bestimmtes Objekt zugreifen konnte. Dies tritt in der Regel auf, wenn es in Ihrem Code mehrere Objekte mit identischen Namen gibt. Wenn dies geschieht, kann SnowConvert die semantischen Informationen des Objekts nicht richtig analysieren.

Beispielcode

Eingabecode:
 CREATE TABLE T1
(
    COL1 INTEGER
);


CREATE TABLE T1
(
    COL2 INTEGER
);
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

  • Überprüfen Sie Ihren Eingabecode auf doppelte Objekte, da diese das ordnungsgemäße Laden der semantischen Informationen beeinträchtigen können.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-0020

Beschreibung

Eine Snowflake Scripting-Prozedur kann bei der Ausführung nur ein Resultset zurückgeben.

Wenn eine Prozedur mehrere Resultsets zurückgeben muss (ähnlich dem Verhalten von Teradata), werden die Ergebnisse in temporären Tabellen gespeichert. Die Snowflake Scripting-Prozedur gibt ein Array mit den Namen dieser temporären Tabellen zurück.

Beispielcode

Eingabecode (Teradata):
 REPLACE MACRO sampleMacro AS 
(
    SELECT CURRENT_DATE AS DT;
    SELECT CURRENT_DATE AS DT_TWO;
);
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

  • Führen Sie eine SELECT-Abfrage mit den von der Prozedur zurückgegebenen Namen temporärer Tabellen aus, um die Ergebnisse zu sehen.

  • Halten Sie die Prozeduren einfach, indem Sie sie ein einziges Resultset zurückgeben lassen, anstatt in mehrere. Dies erleichtert die Handhabung der Ergebnisse.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com.

SSC-FDM-0021

Beschreibung

Snowflake verwendet keine herkömmlichen Datenbankindizes. Stattdessen erstellt und verwaltet es automatisch Mikropartitionen für alle Tabellen, um die Abfrageleistung zu optimieren. Wenn Sie SnowConvert verwenden, wird jeglicher Code, der mit der Indexerstellung zusammenhängt, auskommentiert, da er in Snowflake nicht benötigt wird. Diese Mikropartitionen verbessern automatisch die Geschwindigkeit der DML-Operationen, ohne dass eine manuelle Verwaltung erforderlich ist.

Obwohl diese Konfiguration in der Regel eine gute Abfrageleistung bietet, können Sie sie weiter optimieren, indem Sie Datengruppierungsschlüssel implementieren. Weitere Einzelheiten über Mikropartitionen und Daten-Clustering finden Sie unter Mikropartitionen und Daten-Clustering.

Beispielcode

Eingabecode (Oracle):
 CREATE INDEX index1
ON table1(column1);
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 kann die Abfrageleistung verbessern, indem Daten in Tabellen effizienter organisiert werden.

  • Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-0022

Schweregrad

Schlecht

Beschreibung

Eine Warnung erscheint, wenn eine nicht unterstützte Fensterrahmeneinheit in Zeilen konvertiert wurde, was zu Unterschieden in der Ausgabe führen kann. Snowflake unterstützt z. B. die Einheit GROUPS nicht, sodass sie in Zeilen konvertiert werden muss.

Bitte beachten Sie, dass diese Meldung erscheint, wenn eine Fensterrahmeneinheit entweder nicht vollständig unterstützt wird oder geändert werden muss. Dies gilt auch für Fälle, in denen die Einheit RANGE Änderungen erfordert.

Beispielcode

Hier ist ein Beispieldatenset, mit dem wir das Konzept erläutern.

C_NAME

C_BIRTH_DAY

USA

1

USA

4

Polen

9

Kanada

10

USA

5

Kanada

12

Costa Rica

3

Polen

4

USA

2

Costa Rica

7

Costa Rica

10

Oracle:
SELECT
    C_NAME,
    SUM(C_BIRTH_DAY)
    OVER (ORDER BY C_BIRTH_DAY
    RANGE BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MAX1
FROM WINDOW_TABLE;
Copy

C_NAME

MAX1

USA

-

USA

1

Costa Rica

3

USA

6

Polen

6

USA

14

Costa Rica

19

Polen

26

Kanada

35

Costa Rica

35

Kanada

55

Snowflake:
 SELECT
    C_NAME,
    SUM(C_BIRTH_DAY)
    OVER (ORDER BY C_BIRTH_DAY ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING /*** SSC-FDM-0022 - WINDOW FRAME UNIT 'RANGE' WAS CHANGED TO ROWS ***/) AS MAX1
    FROM
WINDOW_TABLE;
Copy

C_NAME

MAX1

USA

-

USA

1

Costa Rica

3

USA

6

Polen

10

USA

14

Costa Rica

19

Polen

26

Kanada

35

Costa Rica

45

Kanada

55

Empfehlungen

  • Fügen Sie eine ORDER BY-Klausel zu Ihren Abfragen hinzu, um eine konsistente Zeilenreihenfolge bei der Ausführung in Snowflake zu gewährleisten.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-0023

Schweregrad

Mittel

Beschreibung

SnowConvert konvertiert globale temporäre Tabellen in standardmäßige CREATE TABLE-Anweisungen. Bitte beachten Sie, dass Referenzen auf diese umgewandelten Tabellen möglicherweise nicht wie ursprünglich vorgesehen funktionieren.

Codebeispiel

Eingabe
 create global temporary table t1 
    (col1 varchar); 
create view view1 as 
    select col1 from t1;
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

Empfehlungen

SSC-FDM-0024

Bemerkung

Dieses FDM-Feature wird nicht mehr unterstützt. Weitere Informationen finden Sie unter SSC-EWI-0058.

Beschreibung

Dieser Fehler tritt auf, wenn Sie versuchen, eine nicht unterstützte Anweisung innerhalb eines CREATE PROCEDURE-Befehls in Snowflake Scripting zu verwenden.

Beispielcode

Eingabecode (Oracle):
 CREATE OR REPLACE PROCEDURE PROC01
IS
  number_variable INTEGER;
BEGIN
  EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL' INTO number_variable;
END;
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

Empfehlungen

  • Von den Benutzern ist keine Aktion erforderlich.

  • Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-0026

Bemerkung

Dieses FDM-Feature wird nicht mehr unterstützt. Weitere Informationen finden Sie unter SSC-EWI-0028.

Beschreibung

Dieser Fehler tritt auf, wenn Sie versuchen, einen Datentyp zu verwenden, der nicht mit Snowflake kompatibel ist.

Beispiel

Eingabecode (Oracle):
 CREATE TABLE MYTABLE
(
    COL1 SYS.ANYDATASET
);
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

Empfehlungen

SSC-FDM-0027

Bemerkung

Für eine bessere Lesbarkeit haben wir einige Abschnitte des Ausgabecodes vereinfacht.

Beschreibung

Diese Meldung zeigt an, dass eine Anweisung aus dem Quellcode nicht in Snowflake konvertiert werden kann, da es in Snowflake keine entsprechende Funktionalität gibt. Die Anweisung ist nicht mehr erforderlich und wird aus dem konvertierten Code entfernt. SC behält jedoch zur Referenzzecken die ursprüngliche Anweisung als Kommentar bei.

Beispielcode

Eingabecode:
 .LOGTABLE tduser.Employee_log;  
   .BEGIN MLOAD TABLES Employee_Stg;  
      .LAYOUT Employee;  
      .FIELD in_EmployeeNo * VARCHAR(10);  
      .FIELD in_FirstName * VARCHAR(30); 
      .FIELD in_LastName * VARCHAR(30);  
      .FIELD in_BirthDate * VARCHAR(10); 
      .FIELD in_JoinedDate * VARCHAR(10);  
      .FIELD in_DepartmentNo * VARCHAR(02);

      .dml label EmpLabel
  IGNORE DUPLICATE INSERT ROWS; 
      INSERT INTO Employee_Stg (
         EmployeeNo,
         FirstName,
         LastName,
         BirthDate,
         JoinedDate,
         DepartmentNo
      )  
      VALUES (
         :in_EmployeeNo,
         :in_FirstName,
         :in_Lastname,
         :in_BirthDate,
         :in_JoinedDate,
         :in_DepartmentNo
      );
      .IMPORT INFILE employee.txt  
      FORMAT VARTEXT ','
      LAYOUT Employee
      APPLY EmpLabel;  
   .END MLOAD;  
LOGOFF;
Copy
Generierter Code:
 #*** Generated code is based on the SnowConvert Python Helpers version 2.0.6 ***
// SnowConvert Helpers Code section is omitted.
 
import os
import sys
import snowconvert.helpers
from snowconvert.helpers import Export
from snowconvert.helpers import exec
from snowconvert.helpers import BeginLoading
con = None
def main():
  snowconvert.helpers.configure_log()
  con = snowconvert.helpers.log_on()
  #** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE.  **
  #.LOGTABLE tduser.Employee_log
   
  #** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE.  **
  #.BEGIN MLOAD TABLES Employee_Stg
   
  Employee_TableName = "Employee_TEMP_TABLE"
  Employee_Columns = """in_EmployeeNo VARCHAR(10), 
in_FirstName VARCHAR(30), 
in_LastName VARCHAR(30), 
in_BirthDate VARCHAR(10), 
in_JoinedDate VARCHAR(10), 
in_DepartmentNo VARCHAR(02)"""
  Employee_Conditions = """in_EmployeeNo AS in_EmployeeNo, in_FirstName AS in_FirstName, in_LastName AS in_LastName, in_BirthDate AS in_BirthDate, in_JoinedDate AS in_JoinedDate, in_DepartmentNo AS in_DepartmentNo"""
  def EmpLabel(tempTableName, queryConditions = ""):
    exec(f"""INSERT INTO Employee_Stg (EmployeeNo, FirstName, LastName, BirthDate, JoinedDate, DepartmentNo)
SELECT
   SRC.in_EmployeeNo,
   SRC.in_FirstName,
   :in_Lastname,
   SRC.in_BirthDate,
   SRC.in_JoinedDate,
   SRC.in_DepartmentNo
FROM {tempTableName} SRC {queryConditions}""")
  #** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW **
  #.IMPORT INFILE employee.txt FORMAT VARTEXT ',' LAYOUT Employee APPLY EmpLabel
   
  snowconvert.helpers.import_file_to_temptable(fr"employee.txt", Employee_TableName, Employee_Columns, Employee_Conditions, ',')
  EmpLabel(Employee_TableName)
  exec(f"""DROP TABLE {Employee_TableName}""")

  if con is not None:
    con.close()
    con = None
  snowconvert.helpers.quit_application()

if __name__ == "__main__":
  main()
Copy

Empfehlungen

SSC-FDM-0028

Bemerkung

Dieses FDM-Feature wird nicht mehr unterstützt. Weitere Informationen finden Sie unter SSC-EWI-0021.

Beschreibung

Dieser Fehler tritt auf, wenn Ihr Quellcode einen Knoten oder eine Anweisung enthält, die nicht mit der Funktionalität von Snowflake kompatibel ist.

Beispielcode

Eingabecode:
 WITH my_av ANALYTIC VIEW AS
(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 )))) 
SELECT aValue from my_av;
Copy
Ausgabecode:
 ----** SSC-FDM-0028 - SubavFactoring NOT SUPPORTED IN SNOWFLAKE **
--WITH my_av ANALYTIC VIEW AS
--(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 ))))
--SELECT aValue from my_av
                        ;
Copy

Empfehlungen

  • Dieser Fehler tritt auf, wenn es für den zu konvertierenden Quellcode keine entsprechende Snowflake-Funktionalität gibt.

  • Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-0029

Schweregrad

Minimal

Beschreibung

Die benutzerdefinierten Funktionen von Snowflake unterscheiden sich von den entsprechenden Funktionen in Oracle oder SQL Server. Bei der Migration dieser Funktionen nach Snowflake werden sie in gespeicherte Prozeduren umgewandelt, um die gleiche Funktionalität beizubehalten. Diese Konvertierung ändert die Art und Weise, wie Sie sie in Ihren Abfragen verwenden.

Beispielcode

SQL Server:
 CREATE OR ALTER FUNCTION PURCHASING.FOO()
RETURNS INT
AS
BEGIN
    DECLARE @i int = 0, @p int;
    Select @p = COUNT(*) FROM PURCHASING.VENDOR
    
    WHILE (@p < 1000)
    BEGIN
        SET @i = @i + 1
        SET @p = @p + @i
    END
        
    IF (@i = 6)
        RETURN 1
    
    RETURN @p
END;
Copy
 --** 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:
 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
 --** 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

  • Zerlegen Sie komplexe Abfragen in kleinere, individuelle Abfragen unter Beibehaltung der ursprünglichen Logik.

  • Strukturieren Sie den Quellcode neu, um ihn an den Ansatz der benutzerdefinierten Funktionen von Snowflake anzupassen.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com

SSC-FDM-0030

Beschreibung

Der Bezeichner enthält Zeichen, die in der Ausgabesprache nicht unterstützt werden. Diese Zeichen wurden durch ihre entsprechenden UTF-8-Codes ersetzt.

Beispielcode

Eingabecode (Oracle):
 CREATE PROCEDURE PROC1
AS
    "VAR0" INT;
    "VAR`/1ͷ" VARCHAR(20);
    "o*/o" FLOAT;
    " . " INT;
    ". ." INT;
    "123Name" INT;
    "return" INT;
    yield INT;
    ident#10 INT;
BEGIN
    NULL;
END;
Copy
Ausgabecode:
 CREATE OR REPLACE PROCEDURE PROC1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        "VAR0" INT;
        --** SSC-FDM-0030 - IDENTIFIER '"VAR`/1ͷ"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
        VAR_u60_u2F1_uCD_B7 VARCHAR(20);
        --** SSC-FDM-0030 - IDENTIFIER '"o*/o"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
        o_u2A_u2Fo FLOAT;
        --** SSC-FDM-0030 - IDENTIFIER '" . "' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
        _u20_u2E_u20 INT;
        --** SSC-FDM-0030 - IDENTIFIER '". ."' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
        _u2E_u20_u2E INT;
        "123Name" INT;
        "return" INT;
        yield INT;
        IDENT_HASHTAG_10 INT;
    BEGIN
        NULL;
    END;
$$;
Copy

Empfehlungen

  • Von den Benutzern ist keine Aktion erforderlich.

  • Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-0031

Beschreibung

Snowflake konvertiert materialisierte Ansichten (und die Join-Indizes von Teradata) in dynamische Tabellen. Wenn Sie dynamische Tabellen in Snowflake erstellen, müssen Sie zwei erforderliche Parameter angeben:

  • TARGET_LAG: Definiert die maximal zulässige Verzögerungszeit

  • WAREHOUSE: Gibt an, welches virtuelle Warehouse verwendet werden soll

Wenn Sie diese Parameter in den Konfigurationsoptionen nicht angeben, wendet das System während des Konvertierungsprozesses automatisch Standardwerte an.

Weitere Informationen zu den erforderlichen Parametern für dynamische Tabellen finden Sie hier.

Beispielcode

Eingabecode (Oracle):
 CREATE MATERIALIZED VIEW mv1
AS SELECT * FROM table1;
Copy
Ausgabecode:
 CREATE OR REPLACE DYNAMIC TABLE mv1
--** SSC-FDM-0031 - DYNAMIC TABLE REQUIRED PARAMETERS SET BY DEFAULT **
TARGET_LAG='1 day'
WAREHOUSE=UPDATE_DUMMY_WAREHOUSE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT * FROM
table1;
Copy

Empfehlungen

  • Richten Sie die Parameter für dynamische Tabellen nach Ihren spezifischen Anforderungen ein.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com

SSC-FDM-0032

Beschreibung

Wenn Sie mehrere Transformationen durchführen, muss SnowConvert die Parameterwerte überprüfen. Dieser Überprüfungsprozess kann nur abgeschlossen werden, wenn die Parameter tatsächliche Werte (Literale) und keine Variablen oder Ausdrücke enthalten.

Diese Warnung erscheint, wenn SnowConvert den Wert eines Parameters nicht ermitteln kann, weil er per Referenz übergeben wurde. Infolgedessen kann die Funktion oder Anweisung nicht vollständig transformiert werden.

Beispielcode

Eingabecode (Redshift):
 SELECT TO_CHAR(DATE '2001-01-01', 'YYY/MM/DD'),
TO_CHAR(DATE '2001-01-01', f)
FROM (SELECT 'YYY/MM/DD' as f);
Copy
Ausgabecode:
 SELECT
PUBLIC.YEAR_PART_UDF(DATE '2001-01-01', 3) || TO_CHAR(DATE '2001-01-01', '/MM/DD'),
--** SSC-FDM-0032 - PARAMETER 'format_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
TO_CHAR(DATE '2001-01-01', f)
FROM (SELECT 'YYY/MM/DD' as f);
Copy

Empfehlungen

  • Verwenden Sie, wann immer möglich, einen Literalwert für den angegebenen Parameter.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com

SSC-FDM-0033

Beschreibung

Diese Meldung erklärt die Unterschiede im Verhalten von Teradata und Snowflake beim Zeilensampling. Teradata gibt beim nicht deterministischen Sampling eine konstante Anzahl von Zeilen zurück, Snowflake kann jedoch eine geringfügig höhere oder geringere Anzahl von Zeilen zurückgeben. Diese Schwankung in der Zeilenzahl ist normal und wird in Snowflake aufgrund des wahrscheinlichkeitsbasierten Samplingverfahrens erwartet.

Um konsistente und reproduzierbare Ergebnisse beim Abrufen von Daten aus Snowflake zu gewährleisten, empfiehlt es sich, einen Startwert in Ihrer Abfrage zu verwenden. Dadurch wird eine deterministische Ausgabe erzeugt, d. h., Sie erhalten bei jeder Ausführung der Abfrage dieselben Werte und dieselbe Menge an Ergebnissen.

Beispielcode

Eingabecode (Teradata):
 SELECT * FROM Employee SAMPLE 2;
SELECT * FROM Employee SAMPLE 0.25;
Copy
Ausgabecode:
 SELECT
    * FROM
    Employee
--** SSC-FDM-0033 - SAMPLE CLAUSE BEHAVES DIFFERENTLY IN SNOWFLAKE **
SAMPLE(2 ROWS);

SELECT
    * FROM
    Employee
--** SSC-FDM-0033 - SAMPLE CLAUSE BEHAVES DIFFERENTLY IN SNOWFLAKE **
SAMPLE(25);
Copy

Empfehlungen

  • Für deterministische Ergebnisse fügen Sie den Teil für den Startwert der Abfrage hinzu.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com