SnowConvert AI – Funktionale Unterschiede bei RedShift¶
SSC-FDM-RS0001¶
Option wird nicht unterstützt. Die Datenspeicherung wird automatisch von Snowflake übernommen.
Beschreibung¶
In Snowflake ist es nicht notwendig, SORTKEY und DISTSTYLE bei der Migration von RedShift explizit zu definieren, da die Architektur von Snowflake die Datenverteilung und Optimierung intern verwaltet. Snowflake führt die Partitionierung und Indizierung der Daten automatisch aus und optimiert so die Abfrageleistung, ohne dass diese Parameter manuell konfiguriert werden müssen.
Codebeispiel¶
Eingabecode:¶
Redshift¶
CREATE TABLE table1 (
col1 INTEGER
)
DISTSTYLE AUTO;
CREATE TABLE table2 (
col1 INTEGER
)
SORTKEY AUTO;
Generierter Code:¶
Snowflake¶
CREATE TABLE table1 (
col1 INTEGER
)
----** SSC-FDM-RS0001 - DISTSTYLE AUTO OPTION NOT SUPPORTED. DATA STORAGE IS AUTOMATICALLY HANDLED BY SNOWFLAKE. **
--DISTSTYLE AUTO
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/17/2024" }}';
CREATE TABLE table2 (
col1 INTEGER
)
----** SSC-FDM-RS0001 - SORTKEY AUTO OPTION NOT SUPPORTED. DATA STORAGE IS AUTOMATICALLY HANDLED BY SNOWFLAKE. **
--SORTKEY AUTO
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/17/2024" }}';
Best Practices¶
Es ist ratsam, die Verwendung von
CLUSTER BYin Snowflake während der Migration von RedShift zu bewerten, da es die Abfrageleistung verbessern kann, indem es die Datenlokalität für häufig abgefragte Spalten optimiert.Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-RS0002¶
Die Leistung von CLUSTER BY kann im Vergleich zur Leistung von Sortkey variieren.
Beschreibung¶
SORTKEY (ausgenommen SORTKEY AUTO) in Amazon RedShift sind analog zu CLUSTER BY in Snowflake. Die Auswirkungen auf die Leistung können jedoch aufgrund von architektonischen Unterschieden zwischen RedShift und Snowflake variieren.
SORTKEYverbessert die Leistung, indem Daten in einer sortierten Reihenfolge auf der Grundlage bestimmter Spalten gepflegt werden. Dies ist besonders vorteilhaft für Bereichsabfragen und Sortieroperationen.CLUSTER BYin Snowflake organisiert Daten in Blöcken, die auf bestimmten Spalten basieren, und hilft so bei Filter- und Aggregationsaufgaben. Allerdings ist das Sortieren im Vergleich zuSORTKEYstreng.
Das Verständnis dieser Mechanismen ist entscheidend für die Optimierung der Leistung auf der jeweiligen Plattform.
Codebeispiel¶
Eingabecode:¶
Redshift¶
CREATE TABLE table1 (
col1 INTEGER
)
SORTKEY (col1);
CREATE TABLE table2 (
col1 INTEGER SORTKEY
);
Generierter Code:¶
Snowflake¶
CREATE TABLE table1 (
col1 INTEGER
)
--** SSC-FDM-RS0002 - THE PERFORMANCE OF THE CLUSTER BY MAY VARY COMPARED TO THE PERFORMANCE OF SORTKEY **
CLUSTER BY (col1)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/17/2024" }}'
;
CREATE TABLE table2 (
col1 INTEGER
)
--** SSC-FDM-RS0002 - THE PERFORMANCE OF THE CLUSTER BY MAY VARY COMPARED TO THE PERFORMANCE OF SORTKEY **
CLUSTER BY (col1)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/17/2024" }}';
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-RS0003¶
Die Fremdschlüsselübersetzung wird in Zukunft unterstützt.
Beschreibung¶
Die Fremdschlüsselübersetzung wird in Zukunft transformiert. Auf die Dokumentation für den Fremdschlüssel von Snowflake kann hier zugegriffen werden.
Bemerkung
In Snowflake wird die Fremdschlüsseleinschränkung nicht erzwungen, und sie wird für die referenzielle Integrität verwendet.
Codebeispiel¶
Eingabecode:¶
Redshift¶
CREATE TABLE TABLE1 (
id INTEGER,
PRIMARY KEY (id)
);
CREATE TABLE TABLE2 (
id INTEGER,
id_table1 INTEGER,
FOREIGN KEY (id_table1) REFERENCES TABLE1 (col1)
);
Generierter Code:¶
Snowflake¶
CREATE TABLE TABLE1 (
id INTEGER,
PRIMARY KEY (id)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/26/2024" }}';
CREATE TABLE TABLE2 (
id INTEGER,
id_table1 INTEGER
-- ,
-- --** SSC-FDM-RS0003 - THE TRANSLATION FOR FOREIGN KEY IS NOT AVAILABLE, IT WILL BE PROVIDED IN THE FUTURE. **
-- FOREIGN KEY (id_table1) REFERENCES TABLE1 (col1)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/26/2024" }}';
Best Practices¶
Sie können mit Fremdschlüsseln manuell Tabellen ändern und diese hinzufügen.
ALTER TABLE TABLE2 ADD CONSTRAINT
FOREIGN KEY (id_table1) REFERENCES TABLE1 (col1)
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-RS0004¶
Es ist möglich, dass das Datum falsch ist und Snowflake akzeptiert keine falschen Daten.
Beschreibung¶
In Snowflake führt die Verwendung von TO_DATE mit einer ungültigen Datumszeichenfolge (wie „20010631“) zu einem Fehler, da diese eine strenge Validierung erzwingt und alle nicht vorhandenen Datumsangaben ablehnt. Im Gegensatz dazu, kann TO_DATE in RedShift solche ungültigen Daten an das nächste gültige Datum anpassen (z. B. Ändern von 31. Juni auf 1. Juli), wenn der Parameter is_strict auf „false“ gesetzt ist. Dieser Unterschied macht deutlich, wie Snowflake die Datenintegrität priorisiert, indem ungültige Daten nicht automatisch korrigiert werden, während RedShift mehr Flexibilität bei der Verwendung von Daten ermöglicht.
Codebeispiel¶
Eingabecode:¶
Redshift¶
SELECT TO_DATE('20010631', 'YYYYMMDD', FALSE);
Generierter Code:¶
Snowflake¶
SELECT
TRY_TO_DATE(/*** SSC-FDM-RS0004 - INVALID DATES WILL CAUSE ERRORS IN SNOWFLAKE ***/ '20010631', 'YYYYMMDD');
Best Practices¶
Überprüfen Sie, ob das Datum in TRY_TO_DATE() korrekt ist.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-RS0005¶
Duplikate sind in der Quelltabelle nicht zulässig
Beschreibung¶
In RedShift löst die MERGE-Anweisung einen Fehler aus, wenn die Quelltabelle doppelte Werte enthält. Snowflake löst den Fehler nicht aus und erlaubt stattdessen die Ausführung der Abfrage. Die FDM warnt vor diesem Verhalten, da es das Ergebnis in der konvertierten MERGE-Anweisung ändern könnte.
Codebeispiel¶
Eingabecode:¶
Redshift¶
MERGE INTO target USING source ON target.id = source.id
WHEN MATCHED THEN DELETE
WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);
Generierter Code:¶
Snowflake¶
--** 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 (source.id, source.name);
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-RS0006¶
Die aufgerufene Prozedur verwendet COMMIT/ROLLBACK-Anweisungen; das Ändern der aktuellen Transaktion in untergeordneten Scopes wird in Snowflake nicht unterstützt.
Beschreibung¶
In RedShift ist es zulässig, innerhalb einer Prozedur COMMIT- und ROLLBACK-Anweisungen zu verwenden, um Änderungen einer Transaktion, die in einem äußeren Scope geöffnet wurde, dauerhaft zu übernehmen oder zu verwerfen.
Snowflake arbeitet mit dem Konzept der bereichsbezogenen Transaktionen, bei dem jeder Prozeduraufruf als eigene Transaktion behandelt wird. Dadurch sind die Auswirkungen von COMMIT- und ROLLBACK-Anweisungen auf den Scope der Prozedur beschränkt, in der sie deklariert sind.
Der oben genannte funktionale Unterschied wird mit dieser FDM angezeigt, wenn SnowConvert Aufrufe einer Prozedur erkennt, die COMMIT- oder ROLLBACK-Anweisungen enthält.
Codebeispiel¶
Eingabecode:¶
Redshift¶
CREATE OR REPLACE PROCEDURE inner_transaction_procedure(a int)
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO transaction_values_test values (a);
ROLLBACK;
INSERT INTO transaction_values_test values (a + 1);
END
$$;
CREATE OR REPLACE PROCEDURE outer_transaction_procedure(a int)
LANGUAGE plpgsql
AS $$
BEGIN
-- This insert is also affected by the ROLLBACK in inner_transaction_procedure
INSERT INTO transaction_values_test values (a);
CALL inner_transaction_procedure(a + 3);
COMMIT;
END
$$;
CALL outer_transaction_procedure(10);
Generierter Code:¶
Snowflake¶
CREATE OR REPLACE PROCEDURE inner_transaction_procedure (a int)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "03/03/2025", "domain": "test" }}'
AS $$
BEGIN
BEGIN TRANSACTION;
INSERT INTO transaction_values_test
values (:a);
ROLLBACK;
BEGIN TRANSACTION;
INSERT INTO transaction_values_test
values (:a + 1);
COMMIT;
END
$$;
CREATE OR REPLACE PROCEDURE outer_transaction_procedure (a int)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "03/03/2025", "domain": "test" }}'
AS $$
BEGIN
BEGIN TRANSACTION;
-- This insert is also affected by the ROLLBACK in inner_transaction_procedure
INSERT INTO transaction_values_test
values (:a);
--** SSC-FDM-RS0006 - CALLED PROCEDURE CONTAINS USAGES OF COMMIT/ROLLBACK, MODIFYING THE CURRENT TRANSACTION IN CHILD SCOPES IS NOT SUPPORTED IN SNOWFLAKE **
CALL inner_transaction_procedure(:a + 3);
COMMIT;
END
$$;
CALL outer_transaction_procedure(10);
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-RS0007¶
DDL-Anweisungen führen COMMIT automatisch aus; ROLLBACK wird nicht wie erwartet funktionieren.
Beschreibung¶
In Snowflake führen DDL-Anweisungen nach ihrer Ausführung automatisch ein COMMIT aus und machen damit alle Änderungen der aktuellen Transaktion dauerhaft. Das bedeutet, dass diese Änderungen nicht durch ein ROLLBACK rückgängig gemacht werden können.
Wenn in einer Prozedur eine ROLLBACK-Anweisung gefunden wird, die zusätzlich eine DDL-Anweisung enthält, generiert SnowConvert AI diese FDM, um auf das Autocommit-Verhalten von DDL-Anweisungen hinzuweisen.
Codebeispiel¶
Eingabecode:¶
Redshift¶
CREATE OR REPLACE PROCEDURE rollback_ddl(a int)
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO transaction_values_test values (a);
CREATE TABLE someRollbackTable
(
col1 INTEGER
);
INSERT INTO someRollbackTable values (a);
ROLLBACK;
END
$$;
CALL rollback_ddl(10);
Generierter Code:¶
Snowflake¶
CREATE OR REPLACE PROCEDURE rollback_ddl (a int)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "03/03/2025", "domain": "test" }}'
AS $$
BEGIN
BEGIN TRANSACTION;
INSERT INTO transaction_values_test
values (:a);
CREATE TABLE someRollbackTable
(
col1 INTEGER
);
BEGIN TRANSACTION;
INSERT INTO someRollbackTable
values (:a);
--** SSC-FDM-RS0007 - DDL STATEMENTS PERFORM AN AUTOMATIC COMMIT, ROLLBACK WILL NOT WORK AS EXPECTED **
ROLLBACK;
END
$$;
CALL rollback_ddl(10);
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-RS0008¶
SNOWFLAKE USES AUTOCOMMIT BY DEFAULT.
Beschreibung¶
Snowflake-Anweisungen innerhalb von Prozeduren werden als Autocommit behandelt. Snowflake-Dokumentation
Codebeispiel¶
Eingabecode:¶
Redshift¶
CREATE OR REPLACE PROCEDURE SP_NONATOMIC()
NONATOMIC
AS
$$
BEGIN
NULL;
END;
$$
LANGUAGE plpgsql;
Generierter Code:¶
Snowflake¶
CREATE OR REPLACE PROCEDURE SP_NONATOMIC ()
RETURNS VARCHAR
----** SSC-FDM-RS0008 - SNOWFLAKE USES AUTOCOMMIT BY DEFAULT. **
--NONATOMIC
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "02/10/2025", "domain": "test" }}'
AS
$$
BEGIN
NULL;
END;
$$;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.