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;
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;
Der folgende Beispielcode funktioniert jedoch nicht:
Teradata:¶
SELECT
A + B as C,
COL2 + C AS A,
COL3 AS B
FROM
TABLE_EXAMPLE;
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;
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;
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;
Best Practices
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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;
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;
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 dieCOLLATE-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;
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;
$$;
Best Practices
Überprüfen Sie die möglichen Anweisungen, die den Ausnahmecode auslösen können, und kapseln Sie diese in einem ähnlichen Codeblock ein, wie er im Continue Handler Translation Reference beschrieben ist.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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
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()
Best Practices
Weitere Informationen finden Sie unter Übersetzungsspezifikation von BTEQ zu Python.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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"}}'
;
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;
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;
Erwartete Verhaltensunterschiede
Plattform |
Gruppierungsverhalten |
Beispiel für Ergebniszeilen |
|---|---|---|
Teradata-Modus |
Gruppiert ‚John‘, ‚JOHN‘ und ‚john‘ zusammen |
|
Snowflake |
Behandelt ‚John‘, ‚JOHN‘ und ‚john‘ separat |
|
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));
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' );
**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;
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;
Best Practices
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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);
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"}}'
;
Best Practices
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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
);
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"}}'
;
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
)
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"}}'
;
Best Practices
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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
)
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"}}'
;
Best Practices
Hinweis: Es könnte möglich sein, einige Ablaufverfolgungsfunktionen in Snowflake mithilfe einer
EVENT TABLEzu replizieren. Lesen Sie die folgende Snowflake-Dokumentation zu Protokollierung und Ablaufverfolgung.Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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);
Snowflake Scripting:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0009 - REGEXP_SUBSTR FUNCTION ONLY SUPPORTS POSIX REGULAR EXPRESSIONS ***/!!!
REGEXP_SUBSTR('qaqequ','q(?=u)', 1, 1);
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()));
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;
$$;
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;
$$;
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_IDumzugehen.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;
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;
$$;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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;
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;
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
);
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"}}'
;
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
);
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"}}'
;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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
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
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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`);
}
$$;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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');
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 ***/!!!;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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)'
);
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" }}'
;
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);
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. ***/!!!;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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;
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;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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() );
);
);
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()
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
Ä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
Beispielcode:¶
Eingabecode:¶
create table sampleTable(
byteColumn byte(10),
varbyteColumn varbyte(15)
);
select bytes(byteColumn), bytes(varbyteColumn) from sampleTable;
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;
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;
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;
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 |
|---|---|
|
|
|
|
|
|
Ändern des Sitzungsparameters
TIMESTAMP_NTZ_OUTPUT_FORMATundTIME_OUTPUT_FORMAT: Die BefehleALTER 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;
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;
Best Practices¶
Da das Verhalten von
PERIODund 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 vomWEEK_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 SitzungsparameterWEEK_OF_YEAR_POLICYab, 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);
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 ***/!!!;
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 derTIME-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);
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);
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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;
Generierter Code:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0059 - SNOWFLAKE USER DEFAULT TIME ZONE MAY REQUIRE CONFIGURATION TO MATCH TERADATA VALUE ***/!!!
ALTER SESSION UNSET TIMEZONE;
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;
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;
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;
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;
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);
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);
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 '#';
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";
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;
Generierter Code:¶
SELECT
CURRENT_ROLE() !!!RESOLVE EWI!!! /*** SSC-EWI-TD0068 - SNOWFLAKE DOES NOT SUPPORT PROFILES, REFERENCING ROLE INSTEAD ***/!!!;
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;
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;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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';
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
$$
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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;
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;
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;
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;
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;
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;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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;
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;
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);
Generierter -Code¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0082 - TRANSLATE FUNCTION USING KANJISJIS_TO_LATIN ENCODING IS NOT SUPPORTED ***/!!!
Translate('abc' USING KANJISJIS_TO_LATIN);
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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;
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;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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
$$
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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> )
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;
Beispielcode¶
Eingabecode:¶
CREATE TABLE TAB (
COL1 VARCHAR(23)
)
SELECT
COL1 (DATE),
AMBIGUOUS_EXPR (DATE)
FROM TAB;
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;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
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)
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)));
Best Practices¶
Suchen Sie in den internen Tabellen von Snowflake, z. B.
Information_SchemaoderSNOWFLAKE.ACCOUNT_USAGEnach -Ä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));
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);
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.