SnowConvert AI – Probleme mit Teradata

SSC-EWI-TD0001

Fehler bei rekursivem Vorwärtsalias.

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Schweregrad

Niedrig

Beschreibung

Diese EWI wird angezeigt, wenn SnowConvert AI eine Rekursion innerhalb aliasierter Ausdrücke erkennt und daher die Forward-Alias-Transformation, die für die korrekte Funktionsweise von Aliassen in der Snowflake-Umgebung erforderlich ist, nicht ausführen kann.

Ein rekursiver Alias tritt auf, wenn ein Ausdruck mit Alias einen anderen Alias enthält und der zweite Ausdruck mit Alias den ersten Alias enthält. Dies muss möglicherweise nicht so unbedeutend sein, wie das Beispiel zeigt, da die Rekursion im weiteren Verlauf mit transitive erfolgen kann.

Beispielcode

Hinweis: Rekursive Aliasse werden in Snowflake nicht unterstützt, einige einfache Instanzen jedoch schon.

Bemerkung

Beachten Sie, dass rekursiver Alias in Snowflake nicht unterstützt wird, einige einfache Instanzen jedoch schon. Siehe die Beispiele unten.

Der folgende Beispielcode funktioniert in Snowflake nach der Migration:

Teradata:
 SELECT
    COL1 AS COL2,
    COL2 AS COL1
FROM
    TABLE_EXAMPLE;
Copy
Snowflake Scripting:
 // SnowConvert AI Helpers Code section is omitted.
SELECT
    COL1 AS COL2,
    !!!RESOLVE EWI!!! /*** SSC-EWI-TD0001 - 'COL1' HAS RECURSIVE REFERENCES. FORWARD ALIAS CONVERSION COULD NOT BE COMPLETED ***/!!!
    COL2 AS COL1
FROM
    TABLE_EXAMPLE;
Copy

Der folgende Beispielcode funktioniert jedoch nicht:

Teradata:
 SELECT
    A + B as C,
    COL2 + C AS A,
    COL3 AS B
FROM
    TABLE_EXAMPLE;
Copy
Snowflake Scripting:
 // SnowConvert AI Helpers Code section is omitted.
SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-TD0001 - 'A' HAS RECURSIVE REFERENCES. FORWARD ALIAS CONVERSION COULD NOT BE COMPLETED ***/!!!
    COL2 + C AS A,
    COL3 AS B,
    A + B as C
FROM
    TABLE_EXAMPLE;
Copy

Best Practices

  • Überprüfen Sie Ihren Code, und stellen Sie sicher, dass keine rekursiven Vorwärts-Aliasse vorhanden sind. Die EWI zeigt den Namen der ersten Instanz eines Alias an, der rekursive Referenzen enthält. Das bedeutet jedoch nicht, dass dies die einzige Instanz ist, die diese Referenzen in Ihrem Code enthält.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0002

Intervalltyp nicht unterstützt.

Diese EWI ist veraltet seit der SnowConvert AI-Version 28.1.100

Severity

Hoch

Description

Wenn der Selektor einer Spalte in einer SQL-Anweisung vom Typ INTERVAL ist, wird die EWI hinzugefügt und es wird ebenfalls eine Stub-Funktion erstellt. Dies ist ein Typ, der in SnowFlake nicht unterstützt wird und daher nach Abschluss von SnowConvert AI zusätzliche Nacharbeit erfordert.

Example Code

Teradata:
 SELECT
     CAST('07:00' AS INTERVAL HOUR(2) TO MINUTE),
     CAST('08:00' AS INTERVAL HOUR(2) TO MINUTE) As Test_Interval;
Copy
Snowflake Scripting:
 SELECT
     !!!RESOLVE EWI!!! /*** SSC-EWI-TD0002 - INTERVAL TYPE NOT SUPPORTED IN SNOWFLAKE ***/!!!
     INTERVAL '07 hour, 00 min',
     !!!RESOLVE EWI!!! /*** SSC-EWI-TD0002 - INTERVAL TYPE NOT SUPPORTED IN SNOWFLAKE ***/!!!
     INTERVAL '08 hour, 00 min' As Test_Interval;
Copy

Best Practices

SSC-EWI-TD0003

Collation wird in Trim-Funktionen nicht unterstützt; Fügen Sie die ursprüngliche Collation zum Funktionsresultat hinzu, um sie zu erhalten.

Severity

Niedrig

Description

In Snowflake unterstützen Trim-Funktionen (LTRIM, RTRIM oder TRIM) keine Collation, es sei denn, die zu entfernenden Zeichen sind leer oder Leerzeichen.

Wenn SnowConvert AI eine LTRIM, RTRIM oder TRIM LEADING, TRAILING-Funktion oder beide Funktionen in dem oben genannten Szenario erkennt, wird die ``COLLATE-Funktion automatisch erzeugt, um eine Kopie der Eingabespalte ohne Collation zu erstellen. Diese EWI wird erzeugt, um darauf hinzuweisen, dass die Collation der Spalte vor der Trim-Funktion entfernt wurde. Das bedeutet, dass das Ergebnis der Funktion keine Collation besitzt und dies die Ergebnisse späterer Vergleiche beeinflussen kann.

Example Code

Teradata:
 CREATE TABLE collateTable (
	col1 VARCHAR(50) CHARACTER SET LATIN NOT CASESPECIFIC
);

SELECT
    TRIM(BOTH '0' FROM col1),
    TRIM(LEADING '  ' FROM col1),
    TRIM(TRAILING '0' FROM col1),
    LTRIM(col1, '0'),
    RTRIM(col1)
FROM
    collateTable;
Copy
Snowflake Scripting:
 CREATE OR REPLACE TABLE collateTable (
	col1 VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
;

SELECT
	TRIM(COLLATE(col1, ''), '0') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0003 - COLLATION NOT SUPPORTED IN TRIM FUNCTIONS, ADD ORIGINAL COLLATION TO FUNCTION RESULT TO PRESERVE IT ***/!!!,
	LTRIM(col1, '  '),
	RTRIM(COLLATE(col1, ''), '0') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0003 - COLLATION NOT SUPPORTED IN TRIM FUNCTIONS, ADD ORIGINAL COLLATION TO FUNCTION RESULT TO PRESERVE IT ***/!!!,
	LTRIM(COLLATE(col1, ''), '0') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0003 - COLLATION NOT SUPPORTED IN TRIM FUNCTIONS, ADD ORIGINAL COLLATION TO FUNCTION RESULT TO PRESERVE IT ***/!!!,
	RTRIM(col1)
	FROM
	collateTable;
Copy

Best Practices

  • Um funktionale Unterschiede bei Vergleichen zu vermeiden, fügen Sie bitte die ursprüngliche Collation der Spalte zum Ergebnis der TRIM-Funktion hinzu. Dies kann erreicht werden, indem Sie die COLLATE-Funktion verwenden und die ursprüngliche Spalten-Collation als zweites Argument angeben. Dieses Argument muss ein Literal-String mit dem Collation-Wert sein.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0004

Nicht unterstützte SQL-Ausnahme im Continue-Handler.

Severity

Niedrig

Description

In Snowflake-Prozeduren gibt es keine gleichwertige Transformation für TeradataContinue Handler. Für einige unterstützte Ausnahmecodes führt SnowConvert AI eine Behandlung durch, um dieses Verhalten zu emulieren. Diese EWI wird zu Continue-Handler-Anweisungen hinzugefügt, wenn ein Ausnahmecode verwendet wird, der nicht unterstützt wird.

Example Code

Teradata:
 REPLACE PROCEDURE PURGING_ADD_TABLE
( 
 IN inDatabaseName     	VARCHAR(30), 
 IN inTableName    		VARCHAR(30)
)
BEGIN
 DECLARE vCHAR_SQLSTATE CHAR(5);
 DECLARE vSUCCESS       CHAR(5);

  DECLARE CONTINUE HANDLER FOR SQLSTATE 'UNSUPPORTED'
  BEGIN
     SET vCHAR_SQLSTATE = SQLCODE;
     SET vSUCCESS    = SQLCODE;
  END;

  SELECT 1;
 
END;
Copy
Snowflake Scripting:
 CREATE OR REPLACE PROCEDURE PURGING_ADD_TABLE
(INDATABASENAME VARCHAR(30), INTABLENAME VARCHAR(30)
)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/04/2024" }}'
EXECUTE AS CALLER
AS
$$
 DECLARE
  vCHAR_SQLSTATE CHAR(5);
  vSUCCESS       CHAR(5);
 BEGIN
   
   
  !!!RESOLVE EWI!!! /*** SSC-EWI-TD0004 - NOT SUPPORTED SQL EXCEPTION ON CONTINUE HANDLER ***/!!!

  DECLARE CONTINUE HANDLER FOR SQLSTATE 'UNSUPPORTED'
  BEGIN
   vCHAR_SQLSTATE := SQLCODE;
   vSUCCESS := SQLCODE;
  END;
  SELECT
   1;
 END;
$$;
Copy

Best Practices

SSC-EWI-TD0005

Die Anweisung wurde konvertiert, aber ihre Funktion ist noch nicht implementiert.

Severity

Kritisch

Description

Die Anweisung wurde erkannt und konvertiert, aber der konvertierte Code wird nicht die erwartete Funktion haben, da die Implementierung noch nicht abgeschlossen ist.

Die Warnung wurde hinzugefügt, damit dem Benutzer bewusst ist, dass das Skript bei Verwendung dieser Anweisung nicht die erwartete funktional gleichwertige Anweisung hat.

Beispielquellcode

BTEQ-Eingabecode:
 .SET SIDETITLES ON
Copy
Python-Ausgabecode:
 #*** Generated code is based on the SnowConvert AI Python Helpers version 2.0.6 ***
 
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-EWI-TD0005 - THE STATEMENT WAS CONVERTED BUT ITS FUNCTIONALITY IS NOT IMPLEMENTED YET **
  Export.side_titles(True)
  snowconvert.helpers.quit_application()

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

Best Practices

SSC-EWI-TD0006

Ungültiger Standardwert.

Severity

Niedrig

Description

Die Spaltenspezifikationen DEFAULT TIME / DEFAULT DATE / DEFAULT CURREN_DATE / DEFAULT DEFAULT CURRENT_TIME / DEFAULT CURRENT_TIMESTAMP werden für den Datentyp FLOAT nicht unterstützt.

Example Code

Teradata:
CREATE TABLE T_2004
(
    -- In the output code all of these columns will be FLOAT type
    -- and will include the SSC-EWI-TD0006 message.
    COL1 FLOAT DEFAULT TIME,
    COL2 FLOAT DEFAULT DATE,
    COL3 FLOAT DEFAULT CURRENT_DATE,
    COL4 FLOAT DEFAULT CURRENT_TIME,
    COL5 FLOAT DEFAULT CURRENT_TIMESTAMP
);
Snowflake Scripting:
 CREATE OR REPLACE TABLE T_2004
(
    -- In the output code all of these columns will be FLOAT type
    -- and will include the SSC-EWI-TD0006 message.
    COL1 FLOAT DEFAULT TIME !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_TIME NOT VALID FOR DATA TYPE ***/!!!,
    COL2 FLOAT DEFAULT DATE !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_DATE NOT VALID FOR DATA TYPE ***/!!!,
    COL3 FLOAT DEFAULT CURRENT_DATE !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_DATE NOT VALID FOR DATA TYPE ***/!!!,
    COL4 FLOAT DEFAULT CURRENT_TIME !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_TIME NOT VALID FOR DATA TYPE ***/!!!,
    COL5 FLOAT DEFAULT CURRENT_TIMESTAMP !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_TIMESTAMP NOT VALID FOR DATA TYPE ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Copy

Best Practices

  • Es sind keine weiteren Aktionen des Benutzers erforderlich.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0007

GROUP BY-Klausel, die im Teradata-Modus für den Zeichenfolgenvergleich nicht unterstützt wird

Severity

Niedrig

Description

Diese Fehlermeldung weist auf ein mögliches Problem bei der Migration von Teradata SQL-Abfragen nach Snowflake hin, insbesondere im Zusammenhang mit Unterschieden darin, wie die GROUP BY-Klausel die Empfindlichkeit von Zeichenfolgenvergleichen im Teradata-Modus behandelt.

Im Teradata-Modus unterscheiden Zeichenfolgenvergleiche in GROUP BY-Klauseln standardmäßig nicht zwischen Groß- und Kleinschreibung (NOT CASESPECIFIC), während Snowflake-Vergleiche als groß-/kleinschreibungssensitiv behandelt werden, sofern Spalten nicht ausdrücklich mit einer COLLATE-Klausel (Groß-/Kleinschreibung nicht berücksichtigt) definiert wurden. Dieser Unterschied kann dazu führen, dass Abfragen, die auf einer Gruppierung ohne Berücksichtigung der Groß-/Kleinschreibung in Teradata basieren, in Snowflake unterschiedliche Ergebnisse liefern.

Example Code

Teradata:
CREATE TABLE employees (
    employee_id INTEGER,
    first_name VARCHAR(50) NOT CASESPECIFIC,
    department VARCHAR(50)
);

INSERT INTO employees VALUES (1, 'John', 'Sales');
INSERT INTO employees VALUES (2, 'JOHN', 'sales'); 
INSERT INTO employees VALUES (3, 'john', 'SALES');

SELECT first_name, COUNT(*) 
FROM employees 
GROUP BY first_name;
Copy
Snowflake Scripting:
CREATE OR REPLACE TABLE employees (
    employee_id INTEGER,
    first_name VARCHAR(50),
    department VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "10/20/2025",  "domain": "no-domain-provided",  "migrationid": "kwOaAavBVnCx8OhdxEITfg==" }}'
;

INSERT INTO employees
VALUES (1, 'John', 'Sales');

INSERT INTO employees
VALUES (2, 'JOHN', 'sales');

INSERT INTO employees
VALUES (3, 'john', 'SALES');

SELECT
    first_name,
    COUNT(*)
FROM
    employees
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0007 - GROUP BY IS NOT EQUIVALENT IN TERADATA MODE ***/!!!
GROUP BY first_name;
Copy

Erwartete Verhaltensunterschiede

Plattform

Gruppierungsverhalten

Beispiel für Ergebniszeilen

Teradata-Modus

Gruppiert ‚John‘, ‚JOHN‘ und ‚john‘ zusammen

John (oder JOHN/john), 3

Snowflake

Behandelt ‚John‘, ‚JOHN‘ und ‚john‘ separat

John, 1
JOHN, 1
john, 1

Best Practices

  • Prüfen Sie GROUP BY-Klauseln mit Zeichenfolgenspalten bei der Migration vom Teradata-Modus, um das erwartete Gruppierungsverhalten sicherzustellen.

Hinweis: Wenn Sie Ausdrücke wie RTRIM(UPPER(first_name)) oder RTRIM(first_name) in der GROUP BY-Klausel verwenden, um eine gruppierende Auswertung unabhängig von Groß- und Kleinschreibung oder ohne führende und nachfolgende Leerzeichen zu erreichen, müssen Sie denselben Ausdruck konsequent in allen Teilen der Abfrage anwenden, in denen die Spalte verwendet wird. Beispiel:

SELECT RTRIM(UPPER(first_name))
FROM employees
WHERE RTRIM(UPPER(first_name)) = 'JOHN'
GROUP BY RTRIM(UPPER(first_name));
Copy

Dies stellt sicher, dass Filtern, Auswählen und Gruppieren derselben Logik folgen und keine Abweichungen oder unerwarteten Ergebnisse auftreten.

  • Definieren Sie Spalten während der Tabellenerstellung mit COLLATE, wenn ein durchgehend groß-/kleinschreibungsunabhängiges Verhalten erforderlich ist.

    CREATE TABLE employees (
        first_name VARCHAR(50) COLLATE 'en-cs'
    );
    
    Copy
  • **Aktivieren Sie die UseCollateForCaseSpecification CLI-Markierung oder die entsprechende Konvertierungseinstellung, um COLLATE für die Festlegung der Groß- und Kleinschreibung während der Konvertierung zu verwenden. Diese Option stellt sicher, dass die Festlegung der Groß- und Kleinschreibung (beispielsweise CASESPECIFIC oder NOT CASESPECIFIC) mithilfe von COLLATE-Funktionen anstelle von UPPER-Funktionen erfolgt. Weitere Informationen erhalten Sie unter CLI documentation oder conversion settings.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0008

Die Funktion zum Vergleichen von Zeichenfolgen wird nicht unterstützt

Severity

Niedrig

Description

Derzeit gibt es in Snowflake keine Äquivalenz für einige Zeichenfolgen-Vergleichsfunktionen.

Diese EWI wird jeweils bei folgenden Vergleichstypen hinzugefügt: jaro, n_gram, LD, LDWS, OSA, DL, hamming, LCS, jaccard, cosine und soundexcode.

Example Code

Teradata:
 SELECT * FROM StringSimilarity (
  ON (
    SELECT CAST(a AS VARCHAR(200)) AS a, CAST(b AS VARCHAR(200)) AS b
    FROM table_1
  ) PARTITION BY ANY
  USING
  ComparisonColumnPairs ('ld(a,b) AS sim_fn')
) AS dt ORDER BY 1;
Copy
Snowflake Scripting:
 SELECT
  * FROM
  !!!RESOLVE EWI!!! /*** SSC-EWI-TD0008 - FUNCTION FOR COMPARING STRINGS IS NOT SUPPORTED ***/!!! StringSimilarity (
   ON (
     SELECT CAST(a AS VARCHAR(200)) AS a, CAST(b AS VARCHAR(200)) AS b
     FROM table_1
   ) PARTITION BY ANY
   USING
   ComparisonColumnPairs ('ld(a,b) AS sim_fn')
 ) AS dt ORDER BY 1;
Copy

Best Practices

SSC-EWI-TD0009

TEMPORAL-Spalte nicht unterstützt.

Severity

Niedrig

Description

Teradata bietet Unterstützung für zeitliche Tabellen auf Spaltenebene unter Verwendung von abgeleiteten Zeitraumspalten. Diese Spalten werden in Snowflake nicht unterstützt.

Example Code

Teradata:
 CREATE MULTISET TABLE Policy(
      Policy_ID INTEGER,
      Customer_ID INTEGER,
      Policy_Type CHAR(2) NOT NULL,
      Policy_Details CHAR(40),
      Policy_Start DATE NOT NULL,
      Policy_End DATE NOT NULL,
      PERIOD FOR Validity(Policy_Start,Policy_End) AS VALIDTIME
      )
   PRIMARY INDEX(Policy_ID);
Copy
Snowflake Scripting:
 CREATE OR REPLACE TABLE Policy (
   Policy_ID INTEGER,
   Customer_ID INTEGER,
   Policy_Type CHAR(2) NOT NULL,
   Policy_Details CHAR(40),
   Policy_Start DATE NOT NULL,
   Policy_End DATE NOT NULL,
   !!!RESOLVE EWI!!! /*** SSC-EWI-TD0009 - TEMPORAL COLUMN NOT SUPPORTED ***/!!!
         PERIOD FOR Validity(Policy_Start,Policy_End) AS VALIDTIME
         )
         COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
         ;
Copy

Best Practices

SSC-EWI-TD0010

UPPERCASE wird von Snowflake nicht unterstützt

Severity

Niedrig

Description

Dieses UPPERCASE-Spaltenattribut wird in Snowflake nicht unterstützt.

Example Code

Teradata:
 CREATE TABLE T_2010
(
    col1 VARCHAR(1) UPPERCASE
);
Copy
Snowflake Scripting:
 CREATE OR REPLACE TABLE T_2010 (
    col1 VARCHAR(1)
                    !!!RESOLVE EWI!!! /*** SSC-EWI-TD0010 - UPPERCASE NOT SUPPORTED BY SNOWFLAKE ***/!!!
 UPPERCASE
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Copy

Best Practices

  • Da die UPPERCASE-Klausel angibt, dass Zeichen, die als ‚aaa‘ eingegeben werden, als AAA gespeichert werden, kann eine mögliche Problemumgehung darin bestehen, bei allen Insert-Verweisen die UPPER-Funktion hinzuzufügen. Das Laden externer Daten durch ETL-Prozesse müsste ebenfalls geändert werden.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0012

Binärwerte unterstützen keine Standardwerte.

Severity

Niedrig

Description

Diese EWI wird angezeigt, wenn SnowConvert AI den Datentyp BINARY zusammen mit einer DEFAULT-Wertspezifikation findet. Da Standardwerte in BINARY-Spalten nicht erlaubt sind, werden sie entfernt.

Example Code

Teradata:
 CREATE TABLE TableExample
(
ColumnExample BINARY DEFAULT '00000000'XB NOT NULL
)
Copy
Snowflake Scripting:
 CREATE OR REPLACE TABLE TableExample (
ColumnExample BINARY DEFAULT NOT TO_BINARY('00000000') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0012 - BINARY DOES NOT SUPPORT DEFAULT NOT TO_BINARY('00000000') ***/!!! NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Copy

Best Practices

SSC-EWI-TD0017

Globale Funktionalität zur Ablaufverfolgung temporärer Tabellen wird nicht unterstützt.

Severity

Niedrig

Description

Diese EWI wird angezeigt, wenn SnowConvert AI Create Table mit der GLOBAL TEMPORARY TRACE-Option findet. Lesen Sie die folgende Teradata-Dokumentation über die TRACE-Funktion. Da sie in Snowflake nicht unterstützt wird, wird sie entfernt.

Example Code

Teradata:
 CREATE GLOBAL TEMPORARY TRACE TABLE TableExample
(
ColumnExample Number
)
Copy
Snowflake Scripting:
 !!!RESOLVE EWI!!! /*** SSC-EWI-TD0017 - GLOBAL TEMPORARY TABLE TRACE FUNCTIONALITY NOT SUPPORTED ***/!!!
CREATE OR REPLACE TABLE TableExample (
ColumnExample NUMBER(38, 18)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Copy

Best Practices

SSC-EWI-TD0020

Die Funktion Regexp_Substr unterstützt nur reguläre POSIX-Ausdrücke.

Bemerkung

Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-EWI-0009.

Schweregrad

Niedrig

Beschreibung

Derzeit gibt es in Snowflake keine Unterstützung für erweiterte reguläre Ausdrücke über die POSIX-Basic-Regular-Expression-Syntax hinaus.

Diese EWI wird jedes Mal hinzugefügt, wenn ein Funktionsaufruf zu REGEX_SUBSTR, REGEX_REPLACE, oder REGEX_INSTR in SnowFlake transformiert wird, um den Benutzer vor möglicherweise nicht unterstützten regulären Ausdrücken zu warnen. Einige der nicht unterstützten Funktionen sind Lookahead, Lookbehind und nicht erfassende Gruppen.

Beispielcode

Teradata:
 SELECT REGEXP_SUBSTR('qaqequ','q(?=u)', 1, 1);
Copy
Snowflake Scripting:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0009 - REGEXP_SUBSTR FUNCTION ONLY SUPPORTS POSIX REGULAR EXPRESSIONS ***/!!!
REGEXP_SUBSTR('qaqequ','q(?=u)', 1, 1);
Copy

Best Practices

  • Überprüfen Sie den jeweils verwendeten regulären Ausdruck, um festzustellen, ob er ein manuelles Eingreifen erforderlich ist. Weitere Informationen über erweiterten Regex-Support und Alternativen in SnowFlake finden Sie hier.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0023

ACTIVITY_COUNT innerhalb von SELECT/SET INTO VARIABLE erfordert eine manuelle Korrektur

Schweregrad

Niedrig

Beschreibung

Die ACTIVITY_COUNT-Statusvariable gibt die Anzahl der Zeilen zurück, die von einer SQL DML-Anweisung in einer eingebetteten SQL- oder Stored-Procedure-Anwendung betroffen sind. Weitere Informationen erhalten Sie hier.

Wie in der Übersetzungsspezifikation erläutert, gibt es eine Problemumgehung, um das Verhalten von ACTIVITY_COUNT zu emulieren.

 SELECT $1 FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()));
Copy

Bei Verwendung von ACTIVITY_COUNT in einer SELECT/SET INTO VARIABLE-Anweisung, kann es nicht einfach durch die oben genannte Problemumgehung ersetzt werden.

Beispielcode

Teradata

REPLACE PROCEDURE InsertEmployeeSalaryAndLog_4 ()
BEGIN
    DECLARE rowCount INT;
    DECLARE message VARCHAR(100);

    INSERT INTO employees (employee_id, first_name, last_name, department_id, salary)
    VALUES (101, 'Alice', 'Smith', 10, 70000.00);

    SELECT ACTIVITY_COUNT INTO rowCount;
    SET message = 'ROWS INSERTED: ' || rowCount;

    -- Insert the ACTIVITY_COUNT into the activity_log table
    INSERT INTO activity_log (operation, row_count)
    VALUES (message, rowCount);
END;

Snowflake

 CREATE OR REPLACE PROCEDURE InsertEmployeeSalaryAndLog_4 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/15/2024" }}'
EXECUTE AS CALLER
AS
$$
    DECLARE
               rowCount INT;
               message VARCHAR(100);
    BEGIN
                
                
               INSERT INTO employees (employee_id, first_name, last_name, department_id, salary)
               VALUES (101, 'Alice', 'Smith', 10, 70000.00);
               SELECT
            ACTIVITY_COUNT !!!RESOLVE EWI!!! /*** SSC-EWI-TD0023 - ACTIVITY_COUNT INSIDE SELECT/SET INTO VARIABLE REQUIRES MANUAL FIX ***/!!! INTO
            :rowCount;
            message := 'ROWS INSERTED: ' || rowCount;

            -- Insert the ACTIVITY_COUNT into the activity_log table
            INSERT INTO activity_log (operation, row_count)
            VALUES (:message, :rowCount);
    END;
$$;
Copy

Manuelle Korrektur

Ein Teil der oben vorgestellten Problemumgehung kann verwendet werden, um weiterhin die Anzahl der eingefügten/aktualisierten/gelöschten Zeilen wie folgt zu erhalten:

 CREATE OR REPLACE PROCEDURE InsertEmployeeSalaryAndLog_4 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/15/2024" }}'
EXECUTE AS CALLER
AS
$$
    DECLARE
               rowCount INT;
               message VARCHAR(100);
    BEGIN
                
                
               INSERT INTO employees (employee_id, first_name, last_name, department_id, salary)
               VALUES (101, 'Alice', 'Smith', 10, 70000.00);
               SELECT $1 INTO :rowCount FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()));
            message := 'ROWS INSERTED: ' || rowCount;

            -- Insert the ACTIVITY_COUNT into the activity_log table
            INSERT INTO activity_log (operation, row_count)
            VALUES (:message, :rowCount);
    END;
$$;
Copy

Anstatt die vollständige Abfrage zu verwenden, muss diese manuell an die Snowflake-SELECT INTO VARIABLE-Syntax angepasst werden.

Sollten RESULT_SCAN(LAST_QUERY_ID()) oder ähnliche Ausdrücke falsche Ergebnisse liefern, überprüfen Sie SSC-FDM-TD0033(../functional-difference/teradataFDM.md#ssc-fdm-td0033), um zu erfahren, wie mögliche Einschränkungen bei der Verwendung von LAST_QUERY_ID gehandhabt werden können.

Best Practices

  • Passen Sie die vorgeschlagene Problemumgehung manuell an.

  • Überprüfen Sie SSC-FDM-TD0033(../functional-difference/teradataFDM.md#ssc-fdm-td0033), um mit möglichen Einschränkungen bei der Verwendung von LAST_QUERY_ID umzugehen.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0024

Die Abbruchanweisung wird aufgrund einer Aggregatfunktion nicht unterstützt.

Schweregrad

Niedrig

Beschreibung

Diese EWI wird angezeigt, wenn eine AGGREGATE-Funktion Teil einer ABORT-Anweisung in einer gespeicherten Prozedur ist. Die Anweisung wird auskommentiert.

Beispielcode

Teradata:
 REPLACE PROCEDURE ABORT_SAMPLE()
BEGIN 
    ABORT WHERE SUM(TABLE1.COL1) < 2;
END;
Copy
Snowflake Scripting:
 CREATE OR REPLACE PROCEDURE ABORT_SAMPLE()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        !!!RESOLVE EWI!!! /*** SSC-EWI-TD0024 - ABORT STATEMENT IS NOT SUPPORTED DUE TO AN AGGREGATE FUNCTION ***/!!!
        ABORT WHERE SUM(TABLE1.COL1) < 2;
    END;
$$;
Copy

Best Practices

SSC-EWI-TD0025

Ausgabeformat nicht unterstützt.

Schweregrad

Niedrig

Beschreibung

Diese EWI wird angezeigt, wenn eine CAST-Funktion ein Ausgabeformat angibt, das von Snowflake Scripting nicht unterstützt wird.

Codebeispiel

Teradata:
 CREATE TABLE SAMPLE_TABLE
(
    VARCHAR_TYPE VARCHAR
);

REPLACE VIEW SAMPLE_VIEW 
AS
SELECT
CAST(VARCHAR_TYPE AS FLOAT FORMAT 'ZZZ.ZZZZZ'),
CAST('01:02.030405' AS TIME(1) WITH TIME ZONE FORMAT 'MI:SS.S(6)')
FROM SAMPLE_TABLE;
Copy
Snowflake Scripting:
 CREATE OR REPLACE TABLE SAMPLE_TABLE
(
    VARCHAR_TYPE VARCHAR
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "03/03/2025",  "domain": "test" }}'
;

CREATE OR REPLACE VIEW SAMPLE_VIEW
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "03/03/2025",  "domain": "test" }}'
AS
SELECT
    TO_NUMBER(VARCHAR_TYPE, '999.00000', 38, 10) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0025 - OUTPUT FORMAT 'ZZZ.ZZZZZ' NOT SUPPORTED. ***/!!!,
    TO_TIME('01:02.030405', 'MI:SS.FF6') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0025 - OUTPUT FORMAT 'MI:SS.S(6)' NOT SUPPORTED. ***/!!!
    FROM
    SAMPLE_TABLE;
Copy

Best Practices

  • Prüfen Sie, ob der Ausgabecode funktional mit dem Originalcode übereinstimmt.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0027

Snowflake unterstützt keine in Teradata integrierten Zeitdimensionen

Schweregrad

Niedrig

Beschreibung

Diese EWI wird generiert, da Snowflake die in Teradata integrierten Zeitdimensionsattribute wie VALIDTIME oder TRANSACTIONTIME nicht unterstützt.

Beispielcode

Teradata-Eingabe:
 CREATE MULTISET TABLE SAMPLE_TABLE   
(
    COL1 PERIOD(TIMESTAMP(6) WITH TIME ZONE) NOT NULL AS TRANSACTIONTIME
);  
Copy
Snowflake-Ausgabe:
 CREATE OR REPLACE TABLE SAMPLE_TABLE (
       COL1 VARCHAR(68) NOT NULL !!!RESOLVE EWI!!! /*** SSC-EWI-TD0027 - SNOWFLAKE DOES NOT SUPPORT 'TRANSACTIONTIME' COLUMN OPTION ***/!!! /*** SSC-FDM-TD0036 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/
   )
   COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Copy

Best Practices

  • Erstellen Sie TIMESTAMP-Spalten mit Standardwerten wie CURRENT_TIMESTAMP manuell.

  • Nutzen Sie den Einsatz von Table Streams. Diese können Datenänderungen an Tabellen sowie Metadaten zu jeder Änderung aufzeichnen. (Anleitung)

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0029

Die Funktion für Warteschlangentabellen wird nicht unterstützt.

Schweregrad

Niedrig

Beschreibung

Diese Warnung erscheint, wenn eine TABLE mit dem QUEUE-Attribut migriert wird. Das QUEUE-Schlüsselwort wird entfernt, da es in Snowflake nicht unterstützt wird.

Beispielcode

Eingabe:
 CREATE MULTISET TABLE SAMPLE_TABLE,
QUEUE,
NO FALLBACK 
(
    COL1 INTEGER
);
Copy
Ausgabe:
 !!!RESOLVE EWI!!! /*** SSC-EWI-TD0029 - QUEUE TABLE FUNCTIONALITY NOT SUPPORTED ***/!!!
CREATE OR REPLACE TABLE SAMPLE_TABLE
(
    COL1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Copy

Best Practices

SSC-EWI-TD0031

Das Ergebnis kann abweichen, da der char-Typ in Teradata eine feste Länge hat

Schweregrad

Niedrig

Beschreibung

Da der Teradata-CHAR-Datentyp eine feste Länge hat, versuchen einige Funktionen wie LIKE die gesamte Spalte abzugleichen, statt nur das tatsächlich eingegebene Wort. Dies kann zu fehlerhaften Treffern führen. In Snowflake ist der CHAR-Typ hingegen variabel groß, was bedeutet, dass die LIKE-Funktionen stets nur die tatsächlich eingefügten Werte abgleichen. Nehmen Sie den folgenden Code als Beispiel:

Beispielcode

Eingabe:
 CREATE TABLE table1
(
    col1 VARCHAR(36),
    col2 CHAR(36)
);

INSERT INTO table1 VALUES ('Gabriel', 'Gabriel');
INSERT INTO table1 VALUES ('Barnum', 'Barnum');
INSERT INTO table1 VALUES ('Sergio', 'Sergio');

SELECT col1 FROM table1 where col1 LIKE 'Barnum';
-- The result is a single row with 'Barnum'
SELECT col2 FROM table1 where col2 LIKE 'Barnum';
-- It does not return any row
Copy
Ausgabe:
 CREATE OR REPLACE TABLE table1
(
    col1 VARCHAR(36),
    col2 CHAR(36)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
;

INSERT INTO table1
VALUES ('Gabriel', 'Gabriel');

INSERT INTO table1
VALUES ('Barnum', 'Barnum');

INSERT INTO table1
VALUES ('Sergio', 'Sergio');

SELECT
    col1 FROM
    table1
where col1 ILIKE 'Barnum';
-- The result is a single row with 'Barnum'
    SELECT
    col2 FROM
    table1
    where
    !!!RESOLVE EWI!!! /*** SSC-EWI-TD0031 - THE RESULT OF LIKE MAY DIFFER DUE TO CHAR TYPE HAVING A FIXED LENGTH IN TERADATA ***/!!! col2 ILIKE 'Barnum';
    -- It does not return any row
Copy

Best Practices

SSC-EWI-TD0034

SQL mit mehreren Anweisungen wird nicht unterstützt.

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Schweregrad

Niedrig

Beschreibung

SQL-Ausführung mit mehreren Anweisungen wird nicht unterstützt. Die Anfrage wurde als Transaktion behandelt.

Bemerkung

Die folgende EWI wird nur erzeugt, wenn das PL-Target-Language-Flag auf Javascript gesetzt ist: ‚–PLTargetLanguage Javascript‘

Beispielcode

Eingabe:
-- Additional Params: --PLTargetLanguage Javascript
REPLACE PROCEDURE proc1()
  BEGIN
    BEGIN REQUEST;
      SELECT* FROM TABLE1;
    END REQUEST;
END;
Ausgabe:
 CREATE OR REPLACE PROCEDURE proc1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
  // SnowConvert AI Helpers Code section is omitted.

  var TRANSACTION_HANDLER = function (error) {
    throw error;
  };
  // ** SSC-EWI-TD0034 - MULTISTATEMENT SQL EXECUTION NOT SUPPORTED, REQUEST HANDLED AS TRANSACTION **
  try {
    EXEC(`BEGIN`);
    EXEC(`SELECT
   *
FROM
   TABLE1`,[],undefined,TRANSACTION_HANDLER);
    EXEC(`COMMIT`);
  } catch(error) {
    EXEC(`ROLLBACK`);
  }
$$;
Copy

Best Practices

SSC-EWI-TD0039

Eingabeformat nicht unterstützt.

Schweregrad

Medium

Beschreibung

Das angegebene Eingabeformat wird von Snowflake nicht unterstützt.

Beispielcode

Eingabe:
 SELECT 
    CAST('02/032/25' AS DATE FORMAT 'MM/DDD/YY'),
    CAST('02/032/25' AS DATE FORMAT 'MM/D3/YY'),
    CAST('03-Thursday-2025' AS DATE FORMAT 'DD-EEEE-YYYY'),
    CAST('03-Thursday-2025' AS DATE FORMAT 'DD-E4-YYYY');
Copy
Ausgabe:
 SELECT
    TO_DATE('02/032/25', 'MM/DDD/YY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'MM/DDD/YY' NOT SUPPORTED ***/!!!,
    TO_DATE('02/032/25', 'MM/D3/YY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'MM/D3/YY' NOT SUPPORTED ***/!!!,
    TO_DATE('03-Thursday-2025', 'DD-EEEE-YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'DD-EEEE-YYYY' NOT SUPPORTED ***/!!!,
    TO_DATE('03-Thursday-2025', 'DD-E4-YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'DD-E4-YYYY' NOT SUPPORTED ***/!!!;
Copy

Best Practices

SSC-EWI-TD0040

Das -Format in einer Tabelle wird nicht unterstützt.

Schweregrad

Niedrig

Beschreibung

Das angegebene Format wird nicht unterstützt.

Beispielcode

Eingabe:
 CREATE TABLE T_2040
(
    C1 VARCHAR(255) CHARACTER SET LATIN NOT CASESPECIFIC FORMAT 'X(50)',
    C2 VARCHAR(255) CHARACTER SET LATIN NOT CASESPECIFIC FORMAT 'X(75)'
);
Copy
Ausgabe:
 CREATE OR REPLACE TABLE T_2040
(
    C1 VARCHAR(255) FORMAT 'X(50)' !!!RESOLVE EWI!!! /*** SSC-EWI-TD0040 - FORMAT IN TABLE T_2040 NOT SUPPORTED ***/!!!,
    C2 VARCHAR(255) FORMAT 'X(75)' !!!RESOLVE EWI!!! /*** SSC-EWI-TD0040 - FORMAT IN TABLE T_2040 NOT SUPPORTED ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
;
Copy

SSC-EWI-TD0041

Die Trunc-Funktion wurde hinzugefügt, um sicherzustellen, dass ein ganzzahliger Wert verwendet wird.

Schweregrad

Niedrig

Beschreibung

Bei der Migration von Teradata nach Snowflake können Unterschiede in der Art und Weise auftreten, wie numerische Konvertierungen behandelt werden. In Teradata führt das Casten eines Wertes zu INTEGER automatisch dazu, dass jeder Dezimalteil abgeschnitten wird – selbst dann, wenn der ursprüngliche Wert eine Gleitkommazahl oder eine Zeichenkette mit einer Zahl ist. In Snowflake kann das direkte Casten einer nicht ganzzahligen Zahl oder eines Strings zu INTEGER zu Fehlern oder unerwarteten Ergebnissen führen, wenn der Wert nicht bereits eine Ganzzahl ist.

Um die Kompatibilität sicherzustellen, muss die TRUNC()-Funktion angewendet werden, bevor in INTEGER umgewandelt wird. Dadurch wird jeder Dezimalteil entfernt und eine sichere Umwandlung in eine Ganzzahl ermöglicht. Wenn der Ausgangswert jedoch nicht numerisch ist oder es sich um eine nicht numerische Zeichenkette handelt, können weiterhin Fehler auftreten, und eine manuelle Nachbearbeitung kann erforderlich sein. Beispiel: Wenn SnowConvert AI den Spaltentyp aufgrund fehlender Referenzen nicht ermitteln kann, müssen Sie die Konvertierung möglicherweise manuell anpassen.

Beispielcode

Eingabe:
 SELECT
    cast(date_column as integer);
Copy
Ausgabe:
 SELECT
    cast(TRUNC(date_column) as integer) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0041 - TRUNC FUNCTION WAS ADDED TO ENSURE INTEGER. MAY NEED CHANGES IF NOT NUMERIC OR STRING. ***/!!!;
Copy

Best Practices

SSC-EWI-TD0046

Die integrierte Referenz wird in Snowflake nicht unterstützt.

Schweregrad

Medium

Beschreibung

Dieser Fehler tritt auf, wenn ein Verweis auf eine DBC-Tabelle besteht und die ausgewählte Spalte keine Äquivalenz in Snowflake hat.

Beispielcode

Eingabe:
 CREATE VIEW SAMPLE_VIEW
AS
SELECT PROTECTIONTYPE FROM DBC.DATABASES;
Copy
Ausgabe:
 CREATE OR REPLACE VIEW SAMPLE_VIEW
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "08/14/2024" }}'
AS
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0046 - BUILT-IN REFERENCE TO PROTECTIONTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
PROTECTIONTYPE FROM
INFORMATION_SCHEMA.DATABASES;
Copy

Best Practices

SSC-EWI-TD0049

TPT-Anweisung nicht verarbeitet.

Schweregrad

Hoch

Beschreibung

Eine DML-Anweisung in TPT konnte vom Tool nicht verarbeitet und konvertiert werden. Dies kann aus Gründen auftreten wie der Verwendung von Konkatenation mit Skriptvariablen oder dem Einsatz von Escape-Anführungszeichen innerhalb der DML-Anweisung.

Beispielcode

Eingabecode:
 -- Script1.tpt
DEFINE JOB load_job
DESCRIPTION 'LOAD TABLE FROM A FILE'
  (
     DEFINE SCHEMA schema_name
     DESCRIPTION 'define SCHEMA'
   (
       var1 VARCHAR (50)
   );

   STEP setup_tables
   (
      APPLY
       ('RELEASE MLOAD database_name.table_name;')
     TO OPERATOR (DDL_OPERATOR() );

   );
);
Copy
Generierter Code:
 #*** Generated code is based on the SnowConvert AI Python Helpers version 2.0.6 ***
 
import os
import sys
import snowconvert.helpers
from snowconvert.helpers import Export
from snowconvert.helpers import exec
from snowconvert.helpers import BeginLoading
import argparse
args = None
## Script1.tpt
class load_job:
    #'LOAD TABLE FROM A FILE'

  jobname = "load_job"
    #'define SCHEMA'

  schema_name = """(
var1 VARCHAR(50)
);"""
  def setup_tables(self):
    self.DDL_OPERATOR()
    !!!RESOLVE EWI!!! /*** SSC-EWI-TD0049 - THE FOLLOWING STATEMENT COULD NOT BE PROCESSED ***/!!!
      #'RELEASE MLOAD database_name.table_name;'


con = None
def main():
  snowconvert.helpers.configure_log()
  con = snowconvert.helpers.log_on()
  _load_job = load_job()
  _load_job.setup_tables()
  snowconvert.helpers.quit_application()

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

Best Practices

  • Für dieses Problem können Sie die INSERT-Anweisung manuell formulieren. Da die DML-Anweisung derzeit noch nicht unterstützt wird, können Sie außerdem das SnowConvert AI-Team darum bitten, Unterstützung für diesen speziellen Fall hinzuzufügen.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0051

Das Ergebnis der Teradata-BYTES-Funktion unterscheidet sich von der Snowflake-LENGTH-Funktion bei Byte-Spalten.

Schweregrad

Niedrig

Beschreibung

Da der Teradata-Byte-Datentyp eine feste Länge hat, zählt die BYTES-Funktion immer die hinzugefügten abschließenden Nullen, die eingefügt werden, um kleinere Byte-Werte an die Spaltenlänge anzupassen. Dadurch wird die Größe der gesamten Spalte zurückgegeben – nicht die tatsächliche Größe des ursprünglich eingefügten Wertes. In Snowflake hat der Binary-Datentyp hingegen eine variable Größe, was bedeutet, dass die LENGTH-Funktion stets die Größe der tatsächlich eingefügten Werte zurückgibt. Nehmen Sie den folgenden Code als Beispiel:

Teradata:

 create table exampleTable(
	bytecol byte(10)
);

insert into exampleTable values ('2B'XB);

select bytes(bytecol) from exampleTable; 
-- Will return 10, the size of bytecol
Copy

Äquivalenter Code in Snowflake:

 CREATE OR REPLACE TABLE exampleTable (
	bytecol BINARY
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;

INSERT INTO exampleTable
VALUES (TO_BINARY('2B'));

SELECT
	LENGTH(bytecol) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0051 - TERADATA BYTES FUNCTION RESULTS DIFFER FROM SNOWFLAKE LENGTH FUNCTION FOR BYTE TYPE COLUMNS ***/!!! from
	exampleTable;
	-- Will return 10, the size of bytecol
Copy

Beispielcode:

Eingabecode:
 create table sampleTable(
    byteColumn byte(10),
    varbyteColumn varbyte(15)
);

select bytes(byteColumn), bytes(varbyteColumn) from sampleTable;
Copy
Generierter Code:
 CREATE OR REPLACE TABLE sampleTable (
    byteColumn BINARY,
    varbyteColumn BINARY(15)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;

SELECT
    LENGTH(byteColumn) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0051 - TERADATA BYTES FUNCTION RESULTS DIFFER FROM SNOWFLAKE LENGTH FUNCTION FOR BYTE TYPE COLUMNS ***/!!!,
    LENGTH(varbyteColumn) from
    sampleTable;
Copy

Best Practices

  • Analysieren Sie die Verwendung der Ergebnisse der BYTES-Funktion; das Verhalten der Snowflake-LENGTH-Funktion war von Anfang an das gewünschte und es sind keine Änderungen erforderlich.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0052

Die implizite Snowflake-Konvertierung in numerische unterscheidet sich von Teradata und kann bei Zeichenfolgen, die keine Literale sind, fehlschlagen

Schweregrad

Niedrig

Beschreibung

Sowohl in Teradata als auch in Snowflake können Zeichenfolgenwerte verwendet werden, die numerische Parameter erwarten. Diese Zeichenfolgen werden dann analysiert und in ihre numerischen Äquivalente konvertiert.

Es gibt jedoch Unterschiede darin, was die beiden Sprachen als gültige numerische Zeichenkette betrachten. Teradata ist dabei toleranter und verarbeitet erfolgreich Fälle wie leere bzw. nur aus Leerzeichen bestehende Strings, eingebettete Bindestriche, fehlende Ziffern in Mantisse oder Exponent, Währungszeichen, Zifferntrennzeichen oder die Angabe des Vorzeichens der Zahl erst nach den Ziffern. Beispielsweise sind die folgenden Zeichenfolgen gültig:

  • '1-2-3-4-5' -> 12345

  • '$50' -> 50

  • '5000-' -> -5000

  • '1,569,284.55' -> 1569284.55

Snowflake wendet eine automatische, optimistische String-Konvertierung an und erwartet, dass die Zeichenfolgen entweder dem TM9- oder dem TME-Format entsprechen. Daher schlägt die Umwandlung in den meisten der genannten Fälle fehl. Um diese Unterschiede auszugleichen, verarbeitet SnowConvert AI Zeichenliterale, die an Funktionen übergeben werden, die eine implizite Umwandlung in numerische Werte durchführen, und generiert äquivalente Zeichenfolgen, die dem TM9- oder TME-Format entsprechen, sodass sie von Snowflake geparst werden können. Dies gilt nur für literale Zeichenfolgenwerte, d. h. für nicht literale Werte wird nicht garantiert, dass sie von Snowflake geparst werden.

Beispielcode

Eingabecode:
 create table myTable(
    stringCol varchar(30)
);

insert into myTable values ('   1,236,857.45-');

select cos('   1,236,857.45-');

select cos(stringCol) from myTable;
Copy
Generierter Code:
 CREATE OR REPLACE TABLE myTable (
    stringCol varchar(30)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
;

INSERT INTO myTable
VALUES ('   1,236,857.45-');

SELECT
    COS('-1236857.45');

    SELECT
    COS(stringCol !!!RESOLVE EWI!!! /*** SSC-EWI-TD0052 - SNOWFLAKE IMPLICIT CONVERSION TO NUMERIC DIFFERS FROM TERADATA AND MAY FAIL FOR NON-LITERAL STRING VALUES ***/!!!)
    from
    myTable;
Copy

Best Practices

  • Es sind keine weiteren Aktionen des Benutzers erforderlich.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0053

Snowflake unterstützt nicht den Zeittyp, da alle Zeiträume stattdessen als varchar behandelt werden.

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Bemerkung

Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-FDM-TD0036

Genauigkeit der generierten varchar-Darstellungen

PERIOD_UDF generiert die varchar-Darstellung eines Zeitraums unter Verwendung der in Snowflake angegebenen Standardformate für Zeitstempel und Zeiten. Dies bedeutet, dass Zeitstempel drei Genauigkeitsstellen haben und Zeitvariablen null haben. Daher können Sie feststellen, dass die Ergebnisse eine höhere/niedrigere Genauigkeit haben als erwartet. Es gibt zwei Optionen, um zu ändern, wie viele Genauigkeitsstellen in der resultierenden Zeichenfolge enthalten sind:

  • Verwenden Sie die Drei-Parameter-Version von PERIOD_UDF: Diese Überladung der Funktion nimmt den PRECISIONDIGITS-Parameter entgegen, eine ganze Zahl zwischen 0 und 9, um zu steuern, wie viele Stellen des Bruchteils der Zeit im Ergebnis enthalten sein sollen. Beachten Sie, dass das Maximum in Teradata sechs beträgt, selbst wenn Snowflake bis zu neun Dezimalstellen der Genauigkeit unterstützt. Beispiel:

Aufrufe

Ergebnis

PUBLIC.PERIOD_UDF(time '13:30:45.870556', time '15:35:20.344891', 0)

'13:30:45*15:35:20'

PUBLIC.PERIOD_UDF(time '13:30:45.870556', time '15:35:20.344891', 2)

'13:30:45.87*15:35:20.34'

PUBLIC.PERIOD_UDF(time '13:30:45.870556', time '15:35:20.344891', 5)

'13:30:45.87055*15:35:20.34489'

  • Ändern des Sitzungsparameters TIMESTAMP_NTZ_OUTPUT_FORMAT und TIME_OUTPUT_FORMAT: Die Befehle ALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT = <format> undALTER SESSION SET TIME_OUTPUT_FORMAT = <format>

    kann verwendet werden, um die Formate zu ändern, die Snowflake standardmäßig für die aktuelle Sitzung verwendet. Wenn Sie diese Formate so ändern, dass sie die gewünschte Anzahl von Genauigkeitsziffern enthalten, ändert sich das Ergebnis zukünftiger Ausführungen von PERIOD_UDF für die aktuelle Sitzung.

Beispielcode

Eingabecode:
 create table vacations (
    employeeName varchar(50),
    duration period(date)
);

insert into vacations values ('Richard', period(date '2021-05-15', date '2021-06-15'));

select end(duration) from vacations;
Copy
Generierter Code:
 CREATE OR REPLACE TABLE vacations (
    employeeName varchar(50),
    duration VARCHAR(24) /*** SSC-FDM-TD0036 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;

INSERT INTO vacations
VALUES ('Richard', PUBLIC.PERIOD_UDF(date '2021-05-15', date '2021-06-15') !!!RESOLVE EWI!!! /*** SSC-FDM-TD0036 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/);

SELECT
    PUBLIC.PERIOD_END_UDF(duration) /*** SSC-FDM-TD0036 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/ from
    vacations;
Copy

Best Practices

  • Da das Verhalten von PERIOD und den zugehörigen Funktionen mithilfe von VARCHAR emuliert wird, empfehlen wir, die erhaltenen Ergebnisse zu überprüfen, um ihre Korrektheit sicherzustellen.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0055

Von Snowflake unterstützte Formate für TO_CHAR unterscheiden sich von Teradata und können fehlschlagen oder ein anderes Verhalten aufweisen.

Bemerkung

Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-FDM-TD0029

Formatierungselemente, die von Sitzungsparametern abhängen

Einige Elemente des Teradata-Formats werden Snowflake-Funktionen zugeordnet, die vom Wert der Sitzungsparameter abhängen. Um funktionale Unterschiede in den Ergebnissen zu vermeiden, sollten Sie diese Sitzungsparameter auf dieselben Werte setzen, die sie auch in Teradata haben. Identifizierte Formatelemente, die dieser Art von Funktionen zugeordnet sind:

  • D: Abgebildet auf die DAYOFWEEK-Funktion hängen die Ergebnisse dieser Funktion vom WEEK_START-Sitzungsparameter ab. Standardmäßig betrachtet Teradata den Sonntag als ersten Wochentag, während es in Snowflake der Montag ist.

  • WW: Abgebildet auf die WEEK-Funktion hängt diese Funktion vom Sitzungsparameter WEEK_OF_YEAR_POLICY ab, der standardmäßig so eingestellt ist, dass er den ISO-Standard verwendet (die erste Woche des Jahres ist diejenige, die mindestens vier Tage des Januars enthält). In Teradata hingegen gilt der 1. Januar als Beginn der ersten Woche.

Um Sitzungsparameter zu ändern, verwenden Sie ALTER SESSION SET parameter_name = value. Weitere Informationen zu Sitzungsparametern finden Sie auf [dieser Seite] (https://docs.snowflake.com/en/sql-reference/parameters.html).

Einzelparameterversion von TO_CHAR

Die einparametrige Version von TO_CHAR(Datetime) verwendet die in den Sitzungsparametern angegebenen Standardformate TIMESTAMP_LTZ_OUTPUT_FORMAT, TIMESTAMP_NTZ_OUTPUT_FORMAT, TIMESTAMP_TZ_OUTPUT_FORMAT und TIME_OUTPUT_FORMAT. Um Unterschiede in der Verhaltensweise zu vermeiden, stellen Sie diese auf dieselben Werte ein, die auch in Teradata verwendet werden.

Für TO_CHAR(Numeric) erzeugt Snowflake die VARCHAR-Darstellung entweder mit dem TM9- oder TME-Format, um eine kompakte Repräsentation der Zahl zu erhalten. Teradata erzeugt ebenfalls kompakte Darstellungen der Zahlen, daher ist keine weitere Aktion erforderlich.

Beispielcode

Eingabecode:
 select to_char(date '2008-09-13', 'DD/RM/YYYY');

select to_char(date '2010-10-20', 'DS');

select to_char(1255.495, 'SC9999.9999', 'nls_iso_currency = ''EUR''');

select to_char(45620);
Copy
Generierter Code:
 SELECT
TO_CHAR(date '2008-09-13', 'DD/') || PUBLIC.ROMAN_NUMERALS_MONTH_UDF(date '2008-09-13') || TO_CHAR(date '2008-09-13', '/YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0055 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/!!!;

SELECT
TO_CHAR(date '2010-10-20', 'MM/DD/YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0055 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/!!!;

SELECT
PUBLIC.INSERT_CURRENCY_UDF(TO_CHAR(1255.495, 'S9999.0000'), 2, 'EUR') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0055 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/!!!;

SELECT
TO_CHAR(45620) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0055 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/!!!;
Copy

Best Practices

  • Wenn Sie FF verwenden, versuchen Sie entweder, DateTime-Typen mit derselben Genauigkeit zu verwenden wie in Teradata, oder fügen Sie dem Formatelement eine Genauigkeitsangabe hinzu, um unterschiedliches Verhalten zu vermeiden.

  • Verwenden Sie bei der Nutzung von Zeitzonen-bezogenen Formatelementen den ersten Parameter vom Typ TIMESTAMP_TZ, um unterschiedliches Verhalten zu vermeiden. Denken Sie auch daran, dass der TIME-Typ in Snowflake keine Zeitzoneninformationen enthalten kann.

  • Legen Sie die erforderlichen Sitzungsparameter mit den Standardwerten aus Teradata fest, um unterschiedliches Verhalten zu vermeiden.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0057

Binärdaten in NEW JSON werden nicht unterstützt

Schweregrad

Niedrig

Beschreibung

Die NEW JSON-Funktion akzeptiert JSON-Daten, die entweder als Zeichenkette oder im Binärformat vorliegen. Wenn die Daten in ihrer binären Darstellung vorliegen, wird die Funktion nicht transformiert, da dieses Binärformat in Snowflake nicht gültig ist – Snowflake kann die Metadaten des JSON-Objekts nicht interpretieren. Weitere Informationen hierzu finden Sie in der Teradata NEW JSON(https://docs.teradata.com/r/C8cVEJ54PO4~YXWXeXGvsA/QpXrJfufgZ4uyeXFz7Rtcg-[Dokumentation].

Beispielcode

Eingabecode

 SELECT NEW JSON ('160000000268656C6C6F0006000000776F726C640000'xb, BSON);
Copy
Generierter -Code
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0057 - NEW JSON FUNCTION WITH BINARY DATA IS NOT SUPPORTED ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'BSON' NOT SUPPORTED ***/!!!
NEW JSON (TO_BINARY('160000000268656C6C6F0006000000776F726C640000'), BSON);
Copy

Best Practices

SSC-EWI-TD0059

Die Standardzeitzone des Snowflake-Benutzers erfordert möglicherweise eine Konfiguration, die mit dem Teradata-Wert übereinstimmt

Schweregrad

Niedrig

Beschreibung

Ähnlich wie bei Teradata werden bei Einstellung eines Standardzeitzonenwertes für den Benutzer die Sitzungen mit dieser Zeitzone beginnen, bis ein neuer Wert für die Sitzung definiert wird.

Diese Warnung wird generiert, um daran zu erinnern, dass dieselbe Zeitzone, die für den Benutzer in Teradata festgelegt wurde, auch für den Snowflake-Benutzer gesetzt werden sollte. Verwenden Sie dazu bitte die folgende Abfrage in Snowflake: ALTER SESSION SET TIMEZONE = 'equivalent_timezone'. Beachten Sie, dass Snowflake nur Zeitzonen akzeptiert, die dem Standard der IANA Time Zone Database entsprechen.

Beispielcode

Eingabecode:
 SET TIME ZONE USER;
Copy
Generierter Code:
 !!!RESOLVE EWI!!! /*** SSC-EWI-TD0059 - SNOWFLAKE USER DEFAULT TIME ZONE MAY REQUIRE CONFIGURATION TO MATCH TERADATA VALUE ***/!!!
ALTER SESSION UNSET TIMEZONE;
Copy

Best Practices

  • Denken Sie daran, die Standardzeitzone des Benutzers auf eine Zeitzone einzustellen, die der für den Teradata-Benutzer eingestellten Zeitzone entspricht.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0060

JSON_TABLE nicht transformiert; Spaltennamen konnten nicht aus den semantischen Informationen abgerufen werden

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Schweregrad

Niedrig

Beschreibung

Die JSON_TABLE-Funktion kann von SnowConvert AI transformiert werden, jedoch erfordert diese Transformation, dass die Namen der Spalten bekannt sind, die in der JSON_TABLE ON-Unterabfrage ausgewählt werden.

Diese Nachricht wird erzeugt, um den Benutzer darauf hinzuweisen, dass die Spaltennamen nicht explizit in der Unterabfrage angegeben wurden (zum Beispiel wurde SELECT * verwendet) und die semantischen Informationen der referenzierten Tabellen nicht gefunden wurden, sodass die Spaltennamen nicht extrahiert werden konnten.

Wenn Sie wissen möchten, wie Sie JSON-Daten in eine Tabelle laden können, sehen Sie sich diese [Seite] an (https://docs.snowflake.com/en/user-guide/script-data-load-transform-json)

Beispielcode

Eingabecode:
 CREATE TABLE demo.Train (
    firstCol INT,
    jsonCol JSON(400),
    thirdCol VARCHAR(30)
);

SELECT * FROM JSON_TABLE 
(ON (SELECT T.*
           FROM demo.Train T)
USING rowexpr('$.schools[*]')
               colexpr('[ {"jsonpath" : "$.name",
                           "type" : "CHAR(20)"},
                          {"jsonpath" : "$.type",
                           "type" : "VARCHAR(20)"}]')
)
AS JT;

SELECT * FROM JSON_TABLE 
(ON (SELECT T.*
           FROM demo.missingTable T)
USING rowexpr('$.schools[*]')
               colexpr('[ {"jsonpath" : "$.name",
                           "type" : "CHAR(20)"},
                          {"jsonpath" : "$.type",
                           "type" : "VARCHAR(20)"}]')
)
AS JT;
Copy
Generierter Code:
 CREATE OR REPLACE TABLE demo.Train (
    firstCol INT,
    jsonCol VARIANT,
    thirdCol VARCHAR(30)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "12/16/2024",  "domain": "test" }}'
;

SELECT
    * FROM
    (
        SELECT
            firstCol,
            rowexpr.value:name :: CHAR(20) AS Column_0,
            rowexpr.value:type :: VARCHAR(20) AS Column_1,
            thirdCol
        FROM
            demo.Train T,
            TABLE(FLATTEN(INPUT => jsonCol:schools)) rowexpr
    ) JT;

    SELECT
    * FROM
    !!!RESOLVE EWI!!! /*** SSC-EWI-TD0060 - JSON_TABLE NOT TRANSFORMED, COLUMN NAMES COULD NOT BE RETRIEVED FROM SEMANTIC INFORMATION ***/!!! JSON_TABLE
   (ON (
        SELECT
            T.*
                  FROM
            demo.missingTable T)
   USING rowexpr('$.schools[*]')
                  colexpr('[ {"jsonpath" : "$.name",
                           "type" : "CHAR(20)"},
                          {"jsonpath" : "$.type",
                           "type" : "VARCHAR(20)"}]')
   )
   AS JT;
Copy

Best Practices

  • Bitte überprüfen Sie, ob der an SnowConvert AI übergebene Code vollständig ist. Falls Sie die Tabellendefinition nicht angegeben haben, führen Sie den Code bitte erneut aus, diesmal mit vorhandener Tabellendefinition.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0061

TD_UNPIVOT-Transformation erfordert Spalteninformationen, die nicht gefunden werden konnten, da Spalten im Ergebnis fehlen.

Schweregrad

Niedrig

Beschreibung

SnowConvert AI unterstützt und transformiert die TD_UNPIVOT-Funktion, die verwendet werden kann, um Spalten einer Tabelle als Zeilen darzustellen, nicht.

Diese Transformation erfordert jedoch Informationen zu den funktionierenden Tabellenspalten, insbesondere die Namen der Spalten. Wenn diese Informationen nicht vorhanden sind, kann die Transformation in einem unvollständigen Zustand verbleiben, in dem Spalten im Ergebnis fehlen, diese EWI wird in diesen Fällen erzeugt.

Beispielcode

Eingabecode:
 CREATE TABLE unpivotTable  (
	myKey INTEGER NOT NULL PRIMARY KEY,
	firstSemesterIncome DECIMAL(10,2),
	secondSemesterIncome DECIMAL(10,2),
	firstSemesterExpenses DECIMAL(10,2),
	secondSemesterExpenses DECIMAL(10,2)
);

SELECT * FROM
 TD_UNPIVOT(
 	ON unpivotTable 
 	USING
 	VALUE_COLUMNS('Income', 'Expenses')
 	UNPIVOT_COLUMN('Semester')
 	COLUMN_LIST('firstSemesterIncome, firstSemesterExpenses', 'secondSemesterIncome, secondSemesterExpenses')
 	COLUMN_ALIAS_LIST('First', 'Second')
 )X ORDER BY mykey;

SELECT * FROM
 TD_UNPIVOT(
 	ON unknownTable
 	USING
 	VALUE_COLUMNS('MonthIncome')
 	UNPIVOT_COLUMN('Months')
 	COLUMN_LIST('januaryIncome', 'februaryIncome', 'marchIncome', 'aprilIncome')
 	COLUMN_ALIAS_LIST('January', 'February', 'March', 'April')
 )X ORDER BY yearKey;
Copy
Generierter Code:
 CREATE OR REPLACE TABLE unpivotTable (
	myKey INTEGER NOT NULL PRIMARY KEY,
	firstSemesterIncome DECIMAL(10,2),
	secondSemesterIncome DECIMAL(10,2),
	firstSemesterExpenses DECIMAL(10,2),
	secondSemesterExpenses DECIMAL(10,2)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;

--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "VALUE_COLUMNS", "UNPIVOT_COLUMN", "COLUMN_LIST", "COLUMN_ALIAS_LIST" **
SELECT
	* FROM
	(
		SELECT
			myKey,
			TRIM(GET_IGNORE_CASE(OBJECT_CONSTRUCT('FIRSTSEMESTERINCOME', 'First', 'FIRSTSEMESTEREXPENSES', 'First', 'SECONDSEMESTERINCOME', 'Second', 'SECONDSEMESTEREXPENSES', 'Second'), Semester), '"') AS Semester,
			Income,
			Expenses
		FROM
			unpivotTable UNPIVOT(Income FOR Semester IN (
				firstSemesterIncome,
				secondSemesterIncome
			)) UNPIVOT(Expenses FOR Semester1 IN (
				firstSemesterExpenses,
				secondSemesterExpenses
			))
		WHERE
			Semester = 'FIRSTSEMESTERINCOME'
			AND Semester1 = 'FIRSTSEMESTEREXPENSES'
			OR Semester = 'SECONDSEMESTERINCOME'
			AND Semester1 = 'SECONDSEMESTEREXPENSES'
	) X ORDER BY mykey;

	--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "VALUE_COLUMNS", "UNPIVOT_COLUMN", "COLUMN_LIST", "COLUMN_ALIAS_LIST" **
	SELECT
	* FROM
	!!!RESOLVE EWI!!! /*** SSC-EWI-TD0061 - TD_UNPIVOT TRANSFORMATION REQUIRES COLUMN INFORMATION THAT COULD NOT BE FOUND, COLUMNS MISSING IN RESULT ***/!!!
	(
		SELECT
			TRIM(GET_IGNORE_CASE(OBJECT_CONSTRUCT('JANUARYINCOME', 'January', 'FEBRUARYINCOME', 'February', 'MARCHINCOME', 'March', 'APRILINCOME', 'April'), Months), '"') AS Months,
			MonthIncome
		FROM
			unknownTable UNPIVOT(MonthIncome FOR Months IN (
				januaryIncome,
				februaryIncome,
				marchIncome,
				aprilIncome
			))
	) X ORDER BY yearKey;
Copy

Best Practices

  • Es gibt zwei Möglichkeiten, dem Konvertierungstool die Informationen über Spalten bereitzustellen: Speichern Sie die Tabellenspezifikation in derselben -Datei wie den TD_UNPIVOT-Aufruf, oder geben Sie eine Spaltenliste in der SELECTAbfrage des ON-Ausdrucks an – anstelle von SELECT * oder dem Tabellennamen.

  • Dieses Problem kann ignoriert werden, wenn ALL Spalten aus der Eingabetabelle(n) nicht pivotiert werden, da im Ergebnis sonst Spalten fehlen.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0063

JSON-Pfad wurde nicht erkannt

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Schweregrad

Medium

Beschreibung

Diese Nachricht wird angezeigt, wenn SnowConvert AI einen JSON-Pfad nicht deserialisieren kann, da die Zeichenfolge nicht das erwartete JSON-Format enthält.

Beispielcode

Eingabecode:
 SELECT
    *
FROM
JSON_TABLE (
    ON (
        SELECT
            id,
            trainSchedule as ts
        FROM
            demo.PUBLIC.Train T
    ) USING rowexpr('$weekShedule.Monday[*]') colexpr(
        '[{"jsonpath"  "$.time",
              "type"" : "CHAR ( 12 )"}]'
    )
) AS JT(Id, Ordinal, Time, City);
Copy
Generierter Code:
 SELECT
    *
FROM
    !!!RESOLVE EWI!!! /*** SSC-EWI-TD0063 - UNRECOGNIZED JSON PATH $weekShedule.Monday[*] ***/!!!
JSON_TABLE (
    ON
       !!!RESOLVE EWI!!! /*** SSC-EWI-0108 - THE FOLLOWING SUBQUERY MATCHES AT LEAST ONE OF THE PATTERNS CONSIDERED INVALID AND MAY PRODUCE COMPILATION ERRORS ***/!!! (
           SELECT
               id,
               trainSchedule as ts
FROM
               demo.PUBLIC.Train T
    ) USING rowexpr('$weekShedule.Monday[*]') colexpr(
        '[{"jsonpath"  "$.time",
              "type"" : "CHAR ( 12 )"}]'
    )
) AS JT(Id, Ordinal, Time, City);
Copy

Best Practices

  • Prüfen Sie, ob der JSON-Pfad ein unerwartetes Zeichen enthält oder nicht das richtige Format hat.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0066

Der folgende Bezeichner enthält ein oder mehrere Unicode-Escape-Zeichen, die in Snowflake ungültig sind

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Schweregrad

Niedrig

Beschreibung

Diese Nachricht wird angezeigt, wenn SnowConvert AI einen Teradata Unicode Delimited Identifier mit ungültiger Zeichenfolge in Snowflake transformiert.

Beispielcode

Eingabecode:
 SELECT * FROM U&"#000f#ffff" UESCAPE '#';
Copy
Generierter Code:
 // SnowConvert AI Helpers Code section is omitted.
SELECT
* FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0066 - THE FOLLOWING IDENTIFIER HAS ONE OR MORE UNICODE ESCAPE CHARACTERS THAT ARE INVALID IN SNOWFLAKE ***/!!!
"\u000f\uffff";
Copy

Best Practices

  • Verwenden Sie Bezeichner mit gültigen Unicode-Zeichen in Snowflake.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0068

Snowflake unterstützt keine Profile, sondern verweist stattdessen auf die Rolle

Schweregrad

Medium

Beschreibung

Mit Teradata-Profilen können Sie mehrere allgemeine Parameter in Bezug auf die Verwaltung von Speicherplatz und Kennworteinschränkungen definieren.

Allerdings arbeitet Snowflake mit einer Cloud-Architektur und verwaltet sowie optimiert den Speicher automatisch, was bedeutet, dass auf der Nutzerseite keine Speicheranpassungen vorgenommen werden. Außerdem hat Snowflake derzeit eine Kennwortrichtlinie definiert, die für alle Benutzerkennwörter gilt und nicht geändert werden kann.

Dieser Fehler wird erzeugt, wenn ein Verweis auf ein Teradata-Profil gefunden wird. Er soll darauf hinweisen, dass dieser Verweis in Snowflake durch einen Verweis auf die Rolle des Benutzers ersetzt wurde – die in Snowflake der nächstliegende Ersatz für ein Profil ist. Es kann jedoch zu Abweichungen in den Abfrageergebnissen kommen, sofern Profil- und Rollenname eines Benutzers nicht identisch sind.

Beispielcode

Eingabecode:
 SELECT PROFILE;
Copy
Generierter Code:
 SELECT
CURRENT_ROLE() !!!RESOLVE EWI!!! /*** SSC-EWI-TD0068 - SNOWFLAKE DOES NOT SUPPORT PROFILES, REFERENCING ROLE INSTEAD ***/!!!;
Copy

Best Practices

  • Vermeiden Sie Verweise auf Benutzerprofile, da diese nicht unterstützt werden. Die Abfrageergebnisse unterscheiden sich ansonsten, es sei denn, der Benutzer verwendet für sein Profil und seine Rolle denselben Namen.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0069

ST_DISTANCE-Ergebnisse unterscheiden sich leicht von ST_SPHERICALDISTANCE

Bemerkung

Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-FDM-TD0031

Schweregrad

Niedrig

Beschreibung

Die Teradata-Funktion ST_SPHERICALDISTANCE berechnet die Entfernung zwischen zwei sphärischen Koordinaten auf dem Planeten mithilfe der Haversine-Formel. Die Snowflake-ST_DISTANCE-Funktion verwendet hingegen nicht die Haversine-Formel, um die Mindestentfernung zwischen zwei geografischen Punkten zu berechnen.

Beispielcode

Eingabecode:
 --The distance between New York and Los Angeles
Select Cast('POINT(-73.989308 40.741895)' As ST_GEOMETRY) As location1,
	Cast('POINT(40.741895 34.053691)' As ST_GEOMETRY) As location2,
	location1.ST_SPHERICALDISTANCE(location2) As Distance_In_km;
Copy
Generierter -Code
 --The distance between New York and Los Angeles
SELECT
	Cast('POINT(-73.989308 40.741895)' As GEOGRAPHY) As location1,
	Cast('POINT(40.741895 34.053691)' As GEOGRAPHY) As location2,
	!!!RESOLVE EWI!!! /*** SSC-EWI-TD0069 - ST_DISTANCE RESULTS ARE SLIGHTLY DIFFERENT FROM ST_SPHERICALDISTANCE ***/!!!
	ST_DISTANCE(
	location1, location2) As Distance_In_km;
Copy

Best Practices

SSC-EWI-TD0070

Am Ende des Label-Abschnitts wurde eine Rückgabeanweisung hinzugefügt, um den gleichen Ausführungsablauf sicherzustellen.

Bemerkung

Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-FDM-TD0030

Schweregrad

Medium

Beschreibung

Wenn eine Goto-Anweisung durch einen Label-Abschnitt ersetzt wird und dieser keinen Return-Befehl enthält, wird am Ende des Abschnitts einer hinzugefügt, um denselben Ausführungsfluss sicherzustellen.

BTEQ nachdem ein Goto-Befehl ausgeführt wurde, werden die Anweisungen zwischen dem Goto-Befehl und dem Label-Befehl mit demselben Namen ignoriert. Um die Ausführung dieser Anweisungen zu vermeiden, sollte der Beschriftungsabschnitt also eine Rückgabeanweisung enthalten.

Darüber hinaus ist es Wert, dass der Goto-Befehl alle anderen Anweisungen überspringt, mit Ausnahme des Labels mit demselben Namen, das den Zeitpunkt angibt, an dem die Ausführung fortgesetzt wird. Daher wird die Ausführung niemals in einem Label-Abschnitt fortgesetzt, der vor dem Goto-Befehl definiert ist.

Beispielcode

Eingabecode:
 -- Additional Params: --scriptsTargetLanguage SnowScript
.LOGON dbc,dbc;
select 'STATEMENTS';
.GOTO LABEL_B
select 'IGNORED STATEMENTS';
.label LABEL_B
select 'LABEL_B STATEMENTS';
Copy
Generierter -Code
 EXECUTE IMMEDIATE
$$
  DECLARE
    STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
  BEGIN
    --.LOGON dbc,dbc
    !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'BTLogOn' NODE ***/!!!
    null;
    BEGIN
      SELECT
        'STATEMENTS';
      STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
    EXCEPTION
      WHEN OTHER THEN
        STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
    END;
     
    /*.label LABEL_B*/
     
    BEGIN
      SELECT
        'LABEL_B STATEMENTS';
      STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
    EXCEPTION
      WHEN OTHER THEN
        STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
    END;
    !!!RESOLVE EWI!!! /*** SSC-EWI-TD0070 - A RETURN STATEMENT WAS ADDED AT THE END OF THE LABEL SECTION LABEL_B TO ENSURE THE SAME EXECUTION FLOW ***/!!!
    RETURN 0;
    BEGIN
      SELECT
        'IGNORED STATEMENTS';
      STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
    EXCEPTION
      WHEN OTHER THEN
        STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
    END;
    /*.label LABEL_B*/
    --** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE.  **
     
    BEGIN
      SELECT
        'LABEL_B STATEMENTS';
      STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
    EXCEPTION
      WHEN OTHER THEN
        STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
    END;
  END
$$
Copy

Best Practices

SSC-EWI-TD0076

Die Verwendung von Fremdtabellen wird in Snowflake nicht unterstützt.

Schweregrad

Medium

Beschreibung

[Fremdtabellen] (https://docs.teradata.com/r/Teradata-VantageTM-SQL-Data-Definition-Language-Syntax-and-Examples/September-2020/Table-Statements/CREATE-FOREIGN-TABLE) ermöglichen den Zugriff auf Daten in externem Objektspeicher, wie zum Beispiel semi-strukturierte und unstrukturierte Daten in Amazon S3, Azure Blob Storage und Google Cloud Storage. Diese Syntax wird in Snowflake nicht unterstützt. Es stehen jedoch andere Alternativen zur Verfügung, wie zum Beispiel External Tables, Iceberg Tables und Standardtabellen.

Beispielcode

Eingabecode:
 SELECT cust_id, income, age FROM 
FOREIGN TABLE (SELECT cust_id, income, age FROM twm_customer)@hadoop1 T1;
Copy
Generierter Code:
 SELECT
cust_id,
income,
age FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0076 - THE USE OF FOREIGN TABLES IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
 FOREIGN TABLE (SELECT cust_id, income, age FROM twm_customer)@hadoop1 T1;
Copy

Best Practices

  • Anstelle von Fremdtabellen in Teradata können Sie Externe Snowflake-Tabellen verwenden. Externe Tabellen verweisen auf Datendateien in einem Data Lake-Cloudspeicher (Amazon S3, Google Cloud Storage oder Microsoft Azure). Dies ermöglicht das Abfragen von Daten, die in Dateien in einem Data Lake gespeichert sind, als befänden sie sich in einer Datenbank. Externe Tabellen können auf Daten zugreifen, die in einem beliebigen Format gespeichert sind, das von COPY INTO <table>-Anweisungen unterstützt wird.

  • Eine weitere Alternative sind Iceberg-Tabellen von Snowflake. Sie können sich also Iceberg-Tabellen als Tabellen vorstellen, die offene Formate und vom Kunden bereitgestellte Cloud-Speicher verwenden. Diese Daten werden in Parquet-Dateien gespeichert.

  • Schließlich gibt es noch die Snowflake-Standardtabellen, die eine Option sein können, um die Funktionalität von Fremdtabellen in Teradata abzudecken

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0077

RESET WHEN-Klausel wird in diesem Szenario aufgrund seiner Bedingung nicht unterstützt

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Schweregrad

Medium

Beschreibung

SnowConvert AI unterstützt derzeit nur RESET WHEN-Klauseln mit binären Bedingungen (<=, >oder =). Jede andere Art von Bedingung, wie etwa IS NOT NULL, führt dazu, dass die RESET WHEN-Klausel entfernt und eine Fehlermeldung hinzugefügt wird, da sie in Snowflake nicht unterstützt wird.

Diese Fehlermeldung erscheint außerdem, wenn die RESET WHEN-Bedingung auf einen Ausdruck verweist, dessen Definition vom Migrationstool nicht gefunden wurde. Derzeit unterstützt das Tool die Alias-Referenzen für eine Spalte, die in derselben Abfrage definiert wurde.

Beispielcode

Bedingung ist nicht binär
Eingabecode:
 SELECT
    account_id,
    month_id,
    balance,
    ROW_NUMBER() OVER (
        PARTITION BY account_id
        ORDER BY month_id
        RESET WHEN balance IS NOT NULL
        ROWS UNBOUNDED PRECEDING
    ) as balance_increase
FROM account_balance
ORDER BY 1,2;
Copy
Generierter -Code
 // SnowConvert AI Helpers Code section is omitted.
SELECT
    account_id,
    month_id,
    balance,
    ROW_NUMBER() OVER (
        PARTITION BY account_id
    !!!RESOLVE EWI!!! /*** SSC-EWI-TD0077 - RESET WHEN CLAUSE IS NOT SUPPORTED IN THIS SCENARIO DUE TO ITS CONDITION ***/!!!
        ORDER BY month_id
        ROWS UNBOUNDED PRECEDING
    ) as balance_increase
FROM
    account_balance
ORDER BY 1,2;
Copy
Bedingungsausdruck wurde nicht gefunden
Eingabecode:
 SELECT
    account_id,
    month_id,
    balance,
    ROW_NUMBER() OVER (
        PARTITION BY account_id
        ORDER BY month_id
        RESET WHEN balance <= not_found_expresion
    ) as balance_increase
FROM account_balance
ORDER BY 1,2;
Copy
Generierter -Code
 // SnowConvert AI Helpers Code section is omitted.
SELECT
    account_id,
    month_id,
    balance,
    ROW_NUMBER() OVER (
        PARTITION BY account_id
    !!!RESOLVE EWI!!! /*** SSC-EWI-TD0077 - RESET WHEN CLAUSE IS NOT SUPPORTED IN THIS SCENARIO DUE TO ITS CONDITION ***/!!!
        ORDER BY month_id
    ) as balance_increase
FROM
    account_balance
ORDER BY 1,2;
Copy

Best Practices

SSC-EWI-TD0079

Die erforderliche Spalte für den Zeitraum wurde nicht gefunden

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Schweregrad

Niedrig

Beschreibung

Diese Warnung wird angezeigt, weil die Period-Spalte, die zur Replikation der Funktion der Normalize-Klausel erforderlich ist, nicht gefunden wurde.

Beispielcode

Eingabecode:
 SELECT NORMALIZE emp_id, duration2 FROM project;
Copy
Generierter -Code
 !!!RESOLVE EWI!!! /*** SSC-EWI-TD0079 - THE REQUIRED PERIOD TYPE COLUMN WAS NOT FOUND ***/!!!
// SnowConvert AI Helpers Code section is omitted.
WITH NormalizeCTE AS
(
SELECT
T1.*,
SUM(GroupStartFlag)
OVER (
PARTITION BY
emp_id, duration2
ORDER BY
PeriodColumn_begin
ROWS UNBOUNDED PRECEDING) GroupID
FROM
(
SELECT 
emp_id,
duration2,
PUBLIC.PERIOD_BEGIN_UDF(PeriodColumn) PeriodColumn_begin,
PUBLIC.PERIOD_END_UDF(PeriodColumn) PeriodColumn_end,
(CASE
WHEN PeriodColumn_begin <= LAG(PeriodColumn_end)
OVER (
PARTITION BY
emp_id, duration2
ORDER BY
PeriodColumn_begin,
PeriodColumn_end)
THEN 0
ELSE 1
END) GroupStartFlag FROM 
project
) T1
)
SELECT
emp_id,
duration2,
PUBLIC.PERIOD_UDF(MIN(PeriodColumn_begin), MAX(PeriodColumn_end))
FROM
NormalizeCTE
GROUP BY
emp_id,
duration2,
GroupID;
Copy

Best Practices

  • Um diese Warnung manuell zu beheben, müssen Sie lediglich herausfinden, welche die erste Periodenspalte war, und alle ihre Verweise entfernen – außer dort, wo sie definiert ist. Anschließend ersetzen Sie PeriodColumn durch die gefundene Spalte.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0082

Die Übersetzungsfunktion mit der aktuellen Codierung wird nicht unterstützt

Schweregrad

Medium

Beschreibung

Die Verwendung der „Übersetzer“-Funktion unter Verwendung der aktuellen Codierungsargumente wird in Snowflake nicht unterstützt. Die Funktion wird während der Übersetzung auskommentiert.

Beispielcode

Eingabecode:
 SELECT Translate('abc' USING KANJISJIS_TO_LATIN);
Copy
Generierter -Code
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0082 - TRANSLATE FUNCTION USING KANJISJIS_TO_LATIN ENCODING IS NOT SUPPORTED ***/!!!
Translate('abc' USING KANJISJIS_TO_LATIN);
Copy

Best Practices

SSC-EWI-TD0083

Sie ist nicht in der Lage, zwei oder mehr komplexe Select-Klauseln auf einmal zu transformieren

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Schweregrad

Medium

Beschreibung

SnowConvert AI ist nicht in der Lage, zwei oder mehr komplexe SELECT-Klauseln zu transformieren, da diese auf eine CTE- oder zusammengesetzte FROM-Klausel abgebildet werden müssten, was dazu führt, dass der abgebildete Code entweder nicht kompiliert oder in einen logischen Zyklus gerät.

Was verstehen wir unter einer komplexen SELECT-Klausel?

Diejenigen, die auf eine CTE- oder zusammengesetzte FROM-Klausel abgebildet werden müssen, wie zum Beispiel NORMALIZE, EXPAND ON oder RESET WHEN.

Beispielcode

Eingabecode:
 SELECT 
   NORMALIZE emp_id,
   duration,
   dept_id, 
   balance, 
   (
     ROW_NUMBER() OVER (
       PARTITION BY emp_id 
       ORDER BY 
         dept_id RESET WHEN balance <= SUM(balance) OVER (
           PARTITION BY emp_id 
           ORDER BY dept_id
           ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
         )
     ) -1
   ) AS balance_increase 
FROM project
EXPAND ON duration AS bg BY ANCHOR ANCHOR_SECOND
ORDER BY 1, 2;
Copy
Generierter -Code
 // SnowConvert AI Helpers Code section is omitted.
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0083 - NOT ABLE TO TRANSFORM TWO OR MORE COMPLEX SELECT CLAUSES AT A TIME ***/!!!
NORMALIZE emp_id,
   duration,
   dept_id,
   balance,
   (
     ROW_NUMBER() OVER (
   PARTITION BY
      emp_id, new_dynamic_part
   ORDER BY
         dept_id
     ) -1
   ) AS balance_increase
FROM
   (
      SELECT
         emp_id,
         duration,
         dept_id,
         balance,
         previous_value,
         SUM(dynamic_part) OVER (
                 PARTITION BY emp_id
                 ORDER BY dept_id
         ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
               ) AS new_dynamic_part
      FROM
         (
            SELECT
               emp_id,
               duration,
               dept_id,
               balance,
               SUM(balance) OVER (
                       PARTITION BY emp_id
                       ORDER BY dept_id
                       ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
                     ) AS previous_value,
               (CASE
                  WHEN balance <= previous_value
                     THEN 1
                  ELSE 0
               END) AS dynamic_part
            FROM
               project
         )
   )
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0083 - NOT ABLE TO TRANSFORM TWO OR MORE COMPLEX SELECT CLAUSES AT A TIME ***/!!!
EXPAND ON duration AS bg BY ANCHOR ANCHOR_SECOND
ORDER BY 1, 2;
Copy

Best Practices

SSC-EWI-TD0087

GOTO-Anweisung wurde aufgrund von Anweisungsinversion entfernt.

Bemerkung

Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-FDM-TD0026

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Schweregrad

Medium

Beschreibung

Es ist üblich, den GOTO-Befehl zusammen mit IF- und LABEL-Befehlen zu verwenden, um die Funktionalität einer SQL-If-Anweisung nachzubilden. Bei dieser Verwendung ist es möglich, sie direkt in eine if-, if-else- oder sogar eine if-elseif-else-Anweisung umzuwandeln. In diesen Fällen sind jedoch die GOTO-Befehle unnötig und sollten entfernt werden, um zu verhindern, dass sie durch einen LABEL-Abschnitt ersetzt werden.

Beispielcode

Eingabecode:
-- Additional Params: --scriptsTargetLanguage SnowScript
.If ActivityCount = 0 THEN .GOTO endIf
DROP TABLE TABLE1;
.Label endIf
SELECT A FROM TABLE1;
Generierter -Code
 EXECUTE IMMEDIATE
$$
  DECLARE
    STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
  BEGIN
    IF (NOT (STATUS_OBJECT['SQLROWCOUNT'] = 0)) THEN
      !!!RESOLVE EWI!!! /*** SSC-EWI-TD0087 - GOTO endIf WAS REMOVED DUE TO IF STATEMENT INVERSION ***/!!!
       
      BEGIN
        DROP TABLE TABLE1;
        STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
      EXCEPTION
        WHEN OTHER THEN
          STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
      END;
    END IF;
    /*.Label endIf*/
    --** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE.  **
     
    BEGIN
      SELECT
        A
      FROM
        TABLE1;
      STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
    EXCEPTION
      WHEN OTHER THEN
        STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
    END;
  END
$$
Copy

Best Practices

SSC-EWI-TD0091

Als Typumwandlung (CAST) konvertierter Ausdruck, bei dem aufgrund fehlender Abhängigkeiten Fehler möglich sind.

Bemerkung

Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.

Schweregrad

Medium

Beschreibung

In Teradata-Skripten können Sie die folgende Syntax für CAST-Ausdrücke verwenden:

<expression> ( <DataType> )

Copy

Leider erzeugt diese Syntax eine Mehrdeutigkeit, wenn versucht wird, ein CAST in DATE oder TIME zu konvertieren, da diese Schlüsselwörter sich ebenfalls wie die Funktionen CURRENT_DATE bzw. CURRENT_TIME verhalten.

Daher gibt es ohne Kontext über den CAST-Ausdruck keine sichere Möglichkeit zu unterscheiden, ob es sich um einen tatsächlichen Fall von CAST handelt oder um eine Funktion, die DATE bzw. TIME als Parameter akzeptiert.

Mit anderen Worten: Es ist notwendig zu wissen, ob <expression> eine Spalte oder eine benutzerdefinierte Funktion (UDF) ist. Um dies zu erreichen, müssen Sie beim Konvertieren des Codes die CREATE TABLE oder CREATE FUNCTION hinzufügen, von denen <expression> abhängig ist.

Überprüfen Sie z. B. die folgende SELECT-Anweisung. Ohne Kontext zu AMBIGUOUS_EXPR können wir nicht bestimmen, ob wir es mit einem Funktionsaufruf oder mit CAST zu DATE zu tun haben. Wir wissen jedoch, dass COL1 (DATE) tatsächlich ein CAST ist, da COL1 eine Spalte aus der Tabelle TAB ist.

CREATE TABLE TAB (
    COL1 VARCHAR(23)
)

SELECT 
    COL1 (DATE),
    AMBIGUOUS_EXPR (DATE)
FROM TAB;

Copy

Beispielcode

Eingabecode:
 CREATE TABLE TAB (
    COL1 VARCHAR(23)
)

SELECT 
    COL1 (DATE),
    AMBIGUOUS_EXPR (DATE)
FROM TAB;
Copy
Generierter -Code
 CREATE OR REPLACE TABLE TAB (
    COL1 VARCHAR(23)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;

SELECT
    TO_DATE(
    COL1, 'YYYY/MM/DD') AS COL1,
    !!!RESOLVE EWI!!! /*** SSC-EWI-TD0091 - EXPRESSION CONVERTED AS CAST BY DEFAULT. CONVERSION MIGHT PRESENT ERRORS DUE TO MISSING DEPENDENCIES FOR 'AMBIGUOUS_EXPR'. ***/!!!
    AMBIGUOUS_EXPR :: DATE
    FROM
    TAB;
Copy

Best Practices

SSC-EWI-TD0092

Die Übersetzung von integrierten Teradata-Tabellen/Ansichten wird derzeit nicht unterstützt

Schweregrad

Niedrig

Beschreibung

Diese EWI wird hinzugefügt, wenn SnowConvert AI eine Teradata-Systemtabelle findet, die derzeit nicht übersetzt ist.

Beispielcode

Eingabecode:
 SELECT
  CRLF || 
  TRIM(em.ErrorText) INTO :MsgText
FROM
  DBC.ErrorMsgs em
WHERE
  em.ErrorCode = SUBSTR(:SqlStateCode, 2, 4)
Copy
Generierter -Code
 SELECT
  CRLF ||
  TRIM(em.ErrorText) INTO :MsgText
FROM
  !!!RESOLVE EWI!!! /*** SSC-EWI-TD0092 - TRANSLATION FOR TERADATA BUILT-IN TABLE/VIEW DBC.ErrorMsgs IS NOT CURRENTLY SUPPORTED. ***/!!!
  DBC.ErrorMsgs em
WHERE
  UPPER(RTRIM(
  em.ErrorCode)) = UPPER(RTRIM(SUBSTR(:SqlStateCode, 2, 4)));
Copy

Best Practices

  • Suchen Sie in den internen Tabellen von Snowflake, z. B. Information_Schema oder SNOWFLAKE.ACCOUNT_USAGE nach -Äquivalenten.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-TD0093

Das Format wird nicht unterstützt und muss bei allen Verwendungen von Varchar-Umwandlung aktualisiert werden.

Schweregrad

Hoch

Beschreibung

Diese EWI wird hinzugefügt, wenn die CAST-Funktion verwendet wird, um einen numerischen Ausdruck in einen anderen numerischen Typ mit einem bestimmten Format umzuwandeln. Das Format hat zwar keinen Einfluss auf den numerischen Wert selbst, aber wenn das Ergebnis anschließend in eine Zeichenfolge umgewandelt wird, wird das vorgesehene Format nicht korrekt angewendet. Daher ist es notwendig, alle Instanzen zu aktualisieren, in denen das Ergebnis in VARCHAR umgewandelt wird, sodass das in der EWI definierte Format verwendet wird.

Beispielcode

Eingabecode:
SELECT
   CAST(245222.32 AS FORMAT '-(10)9.9(4)') AS FormattedAmount,
   CAST(FormattedAmount AS VARCHAR(30));
Copy
Generierter -Code
SELECT
   245222.32 !!!RESOLVE EWI!!! /*** SSC-EWI-TD0093 - FORMAT '-(10)9.9(4)' IS NOT SUPPORTED AND MUST BE UPDATED TO THE FOLLOWING FORMAT 'S9999999999.0000' IN ALL VARCHAR CAST USAGES. ***/!!! AS FormattedAmount,
   LEFT(LTRIM(TO_VARCHAR(FormattedAmount, 'MI0.00000000000000EEEEE')), 10);
Copy

Best Practices