SnowConvert AI – Redshift-Probleme

SSC-EWI-RS0002

Die Einstellung „Konfigurationsparameter“ wird von Snowflake nicht unterstützt.

Schweregrad

Medium

Beschreibung

Die Verwendung von SET-Konfigurationsparameter wird von Snowflake nicht unterstützt. Weitere Informationen dazu finden Sie unter Dokumentation zu CREATE PROCEDURE.

Codebeispiele

Eingabecode:
Redshift
 CREATE OR REPLACE PROCEDURE procedure2(
    IN input_param INTEGER,
    OUT output_param NUMERIC
)
AS $$
BEGIN
    output_param := input_param * 1.7;
END;
$$
LANGUAGE plpgsql
SET enable_numeric_rounding to ON;
Copy
Generierter Code:
Snowflake
 CREATE OR REPLACE PROCEDURE procedure2 (input_param INTEGER, output_param OUT NUMERIC)
RETURNS VARCHAR
LANGUAGE SQL
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0002 - SET CONFIGURATION PARAMETER 'enable_numeric_rounding' IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
SET enable_numeric_rounding to ON
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
AS $$
BEGIN
    output_param := input_param * 1.7;
END;
$$;
Copy

Best Practices

SSC-EWI-RS0003

Ansicht ohne Schemabindung kann aufgrund fehlender Referenzen nicht entfernt werden.

Schweregrad

Medium

Beschreibung

Die Redshift-Dokumentation für CREATE VIEW enthält eine optionale Klausel, die angibt, dass die jeweilige Ansicht weder an die Datenbankobjekte wie Tabellen oder Funktionen noch an die Objekte, auf die sie verweist, gebunden ist. In der Dokumentation wird auch erklärt, dass in Fällen, in denen diese Klausel verwendet wird, die referenzierten Objekte mit einem Schemanamen qualifiziert werden müssen. Mit dieser Klausel können Sie eine Ansicht erstellen und auf Objekte verweisen, die möglicherweise noch nicht vorhanden sind. Ihr Vorhandensein wird überprüft, sobald die Ansicht abgefragt wird, aber nicht bei ihrer Definition.

Es gibt jedoch weder einen gleichwertigen Befehl noch eine offensichtliche Problemumgehung, um diese Funktionalität in Snowflake zu implementieren. Darüber hinaus schlägt die Snowflake-Dokumentation vor, dass die Ansichten mit einem bestimmten Schema verknüpft werden und damit die referenzierten Objekte in der Ansicht sind.

Wenn die mit der Ansicht verknüpften Verweise im Eingabecode vorhanden sind, wird die Anweisung ohne Probleme entfernt. Falls jedoch die erforderlichen Verweise fehlen, wird eine Warnmeldung hinzugefügt, um Benutzende darüber zu informieren, dass die Anweisung aufgrund der fehlenden Verweise nicht entfernt werden kann.

SnowConvert AI führt die Analyse nur für den Eingabecode durch und berücksichtigt nicht Objekte, die bereits in Snowflake bereitgestellt wurden. Daher kann die Ausgabe einige Probleme aufweisen, die auf fehlende Verweise hindeuten. Wenn die Verweise bereits in der Snowflake-Datenbank vorhanden sind, können Benutzende die Anweisung ohne Probleme sicher entfernen.

Codebeispiele

Eingabecode:
Redshift
 CREATE VIEW myView AS SELECT col1 FROM public.missingTable
WITH NO SCHEMA BINDING;
Copy
Generierter Code:
Snowflake
 --** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "public.missingTable" **
CREATE VIEW myView
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "09/17/2024" }}'
AS SELECT col1 FROM
public.missingTable
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0003 - WITH NO SCHEMA BINDING STATEMENT CAN NOT BE REMOVED DUE TO MISSING REFERENCES. ***/!!!
WITH NO SCHEMA BINDING;
Copy

Best Practices

  • Um dieses Problem zu beheben, wird empfohlen, die fehlenden Verweise zum Eingabecode hinzuzufügen. Wenn das Objekt bereits in der Snowflake-Datenbank bereitgestellt ist, kann die Anweisung ohne Probleme entfernt werden.

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

SSC-EWI-RS0004

HLLSKETCH-Datentyp, der von Snowflake nicht unterstützt wird.

Schweregrad

Hoch

Beschreibung

Dieses Konvertierungsproblem wurde hinzugefügt, weil der HLLSKETCH-Datentyp von Snowflake nicht unterstützt wird.

Codebeispiel

Eingabecode:
 CREATE TABLE table1
(
    col_hllsketch HLLSKETCH
);
Copy
Generierter Code:
 CREATE TABLE table1
(
    col_hllsketch HLLSKETCH !!!RESOLVE EWI!!! /*** SSC-EWI-RS0004 - HLLSKETCH DATA TYPE NOT SUPPORTED IN SNOWFLAKE. ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "09/17/2024" }}';
Copy

Best Practices

SSC-EWI-RS0005

Spaltenaliasse können nicht in der IN-Klausel verwendet werden.

Schweregrad

Hoch

Beschreibung

Dieses Konvertierungsproblem wurde hinzugefügt, da die Spaltenaliasse in der IN-Klausel der Abfrage PIVOT/UNPIVOT in Snowflake nicht verwendet werden können.

Codebeispiel

Eingabecode:
 SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red AS r, green AS g, blue AS b)
);
Copy
Generierter Code:
 SELECT *
FROM
    count_by_color UNPIVOT (
    cnt FOR color IN (red
                          !!!RESOLVE EWI!!! /*** SSC-EWI-RS0005 - COLUMN ALIASES CANNOT BE USED IN THE IN CLAUSE OF THE PIVOT/UNPIVOT QUERY IN SNOWFLAKE. ***/!!! AS r, green
                                                                                                                                                                              !!!RESOLVE EWI!!! /*** SSC-EWI-RS0005 - COLUMN ALIASES CANNOT BE USED IN THE IN CLAUSE OF THE PIVOT/UNPIVOT QUERY IN SNOWFLAKE. ***/!!! AS g, blue
                                                                                                                                                                                                                                                                                                                                 !!!RESOLVE EWI!!! /*** SSC-EWI-RS0005 - COLUMN ALIASES CANNOT BE USED IN THE IN CLAUSE OF THE PIVOT/UNPIVOT QUERY IN SNOWFLAKE. ***/!!! AS b)
);
Copy

Best Practices

SSC-EWI-RS0006

Das Verhalten der SUBSTRING-Funktion kann sich unterscheiden, wenn die Funktion auf Binärdaten angewendet wird.

Schweregrad

Medium

Beschreibung

Das Verhalten der SUBSTRING-Funktion kann sich unterscheiden, wenn die Funktion auf Binärdaten angewendet wird. Da Redshift und Snowflake binäre Daten unterschiedlich verarbeiten, können die Ergebnisse zwischen den beiden Plattformen variieren.

Codebeispiel

Eingabecode:
 SELECT SUBSTRING('12345'::varbyte, 2, 4) AS substring_binary;
SELECT SUBSTRING('abc'::varbyte, 2, 4) AS substring_binary;
Copy
Generierter Code:
 SELECT SUBSTRING('12345':: BINARY, 2, 4) !!!RESOLVE EWI!!! /*** SSC-EWI-RS0006 - THE BEHAVIOR OF THE SUBSTRING FUNCTION MAY DIFFER WHEN APPLIED TO BINARY DATA. ***/!!! AS substring_binary;
SELECT SUBSTRING('abc':: BINARY, 2, 4) !!!RESOLVE EWI!!! /*** SSC-EWI-RS0006 - THE BEHAVIOR OF THE SUBSTRING FUNCTION MAY DIFFER WHEN APPLIED TO BINARY DATA. ***/!!! AS substring_binary;
Copy

Best Practices

SSC-EWI-RS0007

Datumsliterale werden von Snowflake nicht unterstützt.

Schweregrad

Hoch

Beschreibung

Einige DATE-, TIME- oder TIMESTAMP-Formate werden von Snowflake nicht unterstützt. Diese Formate können eine manuelle Bearbeitung erfordern.

Codebeispiel

Eingabecode:
 select datediff(century, '2000-Jan-31', 'Jan-31-2000');
Copy
Generierter Code:
  select
 DATEDIFF(YEAR,
                !!!RESOLVE EWI!!! /*** SSC-EWI-RS0007 - '2000-Jan-31' DATE LITERAL IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
                '2000-Jan-31',
                               !!!RESOLVE EWI!!! /*** SSC-EWI-RS0007 - 'Jan-31-2000' DATE LITERAL IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
                               'Jan-31-2000') / 100;
Copy

Best Practices

SSC-EWI-RS0008

Datumsliterale werden von Snowflake nicht unterstützt.

Schweregrad

Hoch

Beschreibung

Dieses Konvertierungsproblem wurde hinzugefügt, da Sie in Redshift die DELETE-Anweisung auf materialisierte Ansichten anwenden können, die für die Streaming-Aufnahme verwendet werden. In Snowflake werden diese Ansichten in dynamische Tabellen umgewandelt, und die DELETE-Anweisung kann nicht für dynamische Tabellen verwendet werden.

Codebeispiel

Eingabecode:
 CREATE MATERIALIZED VIEW mv AS
SELECT id, name, department_id FROM employees WHERE department_id = 101;

DELETE FROM mv
WHERE id = 2;
Copy
Generierter Code:
 CREATE DYNAMIC TABLE mv
--** SSC-FDM-0031 - DYNAMIC TABLE REQUIRED PARAMETERS SET BY DEFAULT **
TARGET_LAG='1 day'
WAREHOUSE=UPDATE_DUMMY_WAREHOUSE
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "03/03/2025",  "domain": "test" }}'
AS
SELECT id, name, department_id FROM
employees
WHERE department_id = 101;


!!!RESOLVE EWI!!! /*** SSC-EWI-RS0008 - MATERIALIZED VIEW IS TRANSFORMED INTO A DYNAMIC TABLE, AND THE DELETE STATEMENT CANNOT BE USED ON DYNAMIC TABLES. ***/!!!
DELETE FROM
mv
WHERE id = 2;
Copy

Best Practices

  • Da dynamische Tabellen nicht direkt gelöscht werden können, können Sie das gleiche Ergebnis erzielen, indem Sie die Definition der dynamischen Tabellen ersetzen.

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

SSC-EWI-RS0009

Semantische Informationen für die Quelltabelle wurden nicht gefunden.

Schweregrad

Niedrig

Beschreibung

MERGE mit der REMOVE DUPLICATES-Klausel wird von Snowflake nicht unterstützt. Um den ursprünglichen Code vollständig zu unterstützen, ist eine Problemumgehung erforderlich. Eine INSERT WHEN NOT MATCHED-Klausel muss im Ausgabecode generiert werden, und es sind die Spalten der Quelltabelle erforderlich. Wenn die Quelltabelle während der Migration nicht gefunden wurde, werden keine Spalten generiert. Es wird ein Fehler ausgegeben.

Codebeispiel

Eingabecode:
Redshift
 MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;
Copy
Generierter Code:
Snowflake
 CREATE TEMPORARY TABLE source_duplicates AS
SELECT DISTINCT
source.*
FROM
source
INNER JOIN
target
ON target.id = source.id;
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0009 - SEMANTIC INFORMATION NOT FOUND FOR THE SOURCE TABLE. COLUMNS TO BE INSERTED MAY BE ADDED MANUALLY. ***/!!!
--** SSC-FDM-RS0005 - REDSHIFT MERGE STATEMENT DOESN'T ALLOW DUPLICATES IN THE SOURCE TABLE. SNOWFLAKE BEHAVIOR MAY DIFFER IF THERE ARE DUPLICATE VALUES. **
MERGE INTO target
USING source ON target.id = source.id
WHEN MATCHED THEN
DELETE
WHEN NOT MATCHED THEN
INSERT
VALUES ();
INSERT INTO target
SELECT
*
FROM
source_duplicates;
DROP TABLE IF EXISTS source_duplicates CASCADE;
Copy

Best Practices

  • Führen Sie eine Suche aus, um zu sehen, ob die Quelltabelle im migrierten Code vorhanden ist, und fügen Sie die Spalten manuell mit der Einfügeoperation hinzu.

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

SSC-EWI-RS0010

Ausgabeparameter, die auf der CALL-Einheit der obersten Ebene nicht unterstützt werden.

Schweregrad

Niedrig

Beschreibung

Redshift lässt die Verwendung von CALL-Anweisungen innerhalb von Ausgabeparametern als Codeeinheiten der obersten Ebene zu, ohne eine Variable zu definieren, die als Ausgabe zugewiesen würde. Snowflake erzwingt die Verwendung einer Variablen, um den Ausgabewert irgendwo festzulegen.

Codebeispiel

Eingabecode:
Redshift
 CREATE OR REPLACE PROCEDURE get_total_sales_by_product(
    IN p_product_name VARCHAR(100),
    OUT p_total_sales DECIMAL(18, 2)
)
AS $$
BEGIN
    NULL;
END;
$$ LANGUAGE plpgsql;

CALL get_total_sales_by_product('Laptop');
Copy
Generierter Code:
Snowflake
 CREATE OR REPLACE PROCEDURE get_total_sales_by_product (p_product_name VARCHAR(100), p_total_sales OUT DECIMAL(18, 2))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "07/10/2025",  "domain": "no-domain-provided" }}'
AS $$
BEGIN
NULL;
END;
$$;
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0010 - Top-level Procedure Call with out parameters is not supported. ***/!!!
CALL get_total_sales_by_product('Laptop');
Copy

Best Practices

  • Verschieben Sie den Aufruf in einen anonymen Block, und deklarieren Sie eine Variable, die als Ausgabeparameter übergeben wird.

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