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;
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;
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;
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;
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;
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;
$$;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
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;
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;
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
);
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" }}';
Empfehlungen¶
Überprüfen Sie alle Aggregatfunktionen, die Snowflake für die Schätzung der Kardinalität bietet, indem Sie HyperLogLog verwenden.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
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)
);
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)
);
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
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;
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;
$$;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com