SnowConvert: Probleme bei Redshift

SSC-EWI-RS0008

Schweregrad

Hoch

Beschreibung

Dieses Problem tritt auf, weil Redshift DELETE-Anweisungen für materialisierte Ansichten erlaubt, die für die Streaming-Aufnahme verwendet werden. Bei der Konvertierung zu Snowflake werden diese materialisierten Ansichten zu dynamischen Tabellen, die keine DELETE-Operationen unterstützen.

Codebeispiel

Eingabecode:

CREATE MATERIALIZED VIEW mv AS
SELECT id, name, department FROM employees WHERE department = 'Engineering';

DELETE FROM mv
WHERE id = 2;
Copy

Ausgabecode:

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": "02/11/2025",  "domain": "test" }}'
AS
SELECT id, name, department FROM
        employees
WHERE
        RTRIM( department) = RTRIM( 'Engineering');


!!!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

Empfehlungen

  • Um Datensätze aus einer dynamischen Tabelle zu löschen, müssen Sie die gesamte Definition der dynamischen Tabelle durch eine neue ersetzen.

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

SSC-EWI-RS0009

Schweregrad

Niedrig

Beschreibung

In Snowflake ist bei Verwendung der MERGE-Anweisung die REMOVE DUPLICATES-Klausel nicht verfügbar. Um die gleiche Funktionalität zu erreichen, müssen Sie eine Umgehung implementieren. Dazu müssen Sie eine INSERT WHEN NOT MATCHED-Klausel zu Ihrem Code hinzufügen. Diese Klausel erfordert Spalteninformationen aus der Quelltabelle. Wenn der Migrationsprozess die Quelltabelle nicht finden kann, können die erforderlichen Spalten nicht generiert werden, was zu einem Fehler führt.

Codebeispiel

Eingabecode:

MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;
Copy

Ausgabecode:

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. ***/!!!
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

Empfehlungen

  • Prüfen Sie, ob die Quelltabelle im migrierten Code vorhanden ist, und fügen Sie dann manuell alle fehlenden Spalten in die INSERT-Anweisung ein.

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

SSC-EWI-RS0002

Schweregrad

Medium

Beschreibung

Das Feature SET CONFIGURATION PARAMETER, das in Redshift verfügbar ist, wird in Snowflake nicht unterstützt. Weitere Einzelheiten entnehmen Sie bitte der Dokumentation zu CREATE PROCEDURE.

Codebeispiele

Eingabecode:

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

Ausgabecode:

CREATE OR REPLACE PROCEDURE procedure2 (
    IN !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'InParameterMode' NODE ***/!!! input_param INTEGER,
    OUT output_param 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": "09/17/2024" }}'
AS $$
BEGIN
    output_param := input_param * 1.7;
END;
$$;
Copy

Empfehlungen

SSC-EWI-RS0003

Schweregrad

Medium

Beschreibung

Der Befehl CREATE VIEW in Redshift enthält eine optionale Klausel, die Ansichten unabhängig von ihren referenzierten Datenbankobjekten (wie Tabellen oder Funktionen) macht. Wenn Sie diese Klausel verwenden, müssen Sie die Schemanamen für alle referenzierten Objekte angeben. Mit diesem Feature können Sie Ansichten erstellen, die Objekte referenzieren, die noch nicht existieren. Das System prüft nur, ob diese referenzierten Objekte existieren, wenn die Ansicht abgefragt wird, nicht wenn sie erstellt wird.

Derzeit bietet Snowflake keinen gleichwertigen Befehl und keine klare Alternative zur Implementierung dieser Funktion. Laut der Snowflake-Dokumentation sind die Ansichten speziell an ein Schema gebunden, ebenso wie die Objekte, die in der Ansicht referenziert werden.

Wenn Sie versuchen, eine VIEW-Anweisung zu entfernen, prüft das System alle referenzierten Objekte im Eingabecode. Wenn alle Verweise gefunden werden, wird die VIEW-Anweisung erfolgreich entfernt. Wenn Referenzen fehlen, zeigt das System eine Warnmeldung an, die besagt, dass die Ansicht aufgrund fehlender Abhängigkeiten nicht entfernt werden kann.

SnowConvert analysiert nur den bereitgestellten Quellcode und prüft keine Objekte, die bereits in Ihrer Snowflake-Umgebung vorhanden sind. Infolgedessen können Sie Fehlermeldungen zu fehlenden Referenzen erhalten. Wenn diese Objekte bereits in Ihrer Snowflake-Datenbank existieren, können Sie diese Fehler getrost ignorieren und die entsprechenden Anweisungen entfernen.

Codebeispiele

Eingabecode:

CREATE VIEW myView AS SELECT col1 FROM public.missingTable
WITH NO SCHEMA BINDING;
Copy

Ausgabecode:

--** 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

Empfehlungen

  • Um dieses Problem zu beheben, fügen Sie alle fehlenden Referenzen in Ihrem Code hinzu. Wenn das Objekt bereits in der Snowflake-Datenbank existiert, können Sie die Anweisung getrost entfernen.

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

SSC-EWI-RS0004

Schweregrad

Hoch

Beschreibung

Dieses Problem tritt auf, weil Snowflake den Datentyp HLLSKETCH nicht unterstützt.

Codebeispiel

Eingabecode:

CREATE TABLE table1
(
    col_hllsketch HLLSKETCH
);
Copy

Ausgabecode:

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

Empfehlungen

SSC-EWI-RS0005

Schweregrad

Hoch

Beschreibung

Dieses Problem tritt auf, weil Snowflake die Verwendung von Spaltenaliasen in der IN-Klausel von PIVOT/UNPIVOT-Operationen nicht zulässt. Weitere Informationen dazu finden Sie in der Snowflake-Dokumentation.

Codebeispiel

Eingabecode:

SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red AS r, green AS g, blue AS b)
);
Copy

Ausgabecode:

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

Empfehlungen

SSC-EWI-RS0001

Schweregrad

Medium

Beschreibung

Die CREATE PROCEDURE-Anweisung von Redshift enthält eine optionale NONATOMIC-Transaktionsmodus-Klausel. Da Snowflake kein direktes Äquivalent für dieses Feature hat, versucht SMA, eine ähnliche Funktionalität zu replizieren, indem es den konvertierten Code nach Möglichkeit modifiziert.

Das Verhalten der NONATOMIC-Prozedur, das Anweisungen innerhalb der Prozedur automatisch festschreibt, muss manuell überprüft werden. Snowflake bietet einen autocommit-Kontoparameter, um diese Funktionalität zu replizieren. Weitere Einzelheiten zu autocommit finden Sie in der Snowflake-Dokumentation.

Codebeispiele

Eingabecode:

CREATE OR REPLACE PROCEDURE procedure1(parameter int)
Nonatomic
AS
   $$
      SELECT * from my_table;
   $$
LANGUAGE plpgsql;
Copy

Ausgabecode:

CREATE OR REPLACE PROCEDURE procedure1 (parameter int)
RETURNS VARCHAR
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0001 - THE NONATOMIC OPTION IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
Nonatomic
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "09/17/2024" }}'
AS
   $$
      SELECT * from
         my_table;
   $$;
Copy

Empfehlungen