SnowConvert AI – BigQuery – Unterschiede bei Bezeichnern zwischen BigQuery und Snowflake¶
Bezeichner in Anführungszeichen¶
BigQuery-Bezeichner in Anführungszeichen werden von Backquotes (`) umschlossen, während Snowflake sie in doppelte Anführungszeichen (“) einschließt.
In BigQuery halten sich Bezeichner in Anführungszeichen an die Regeln zur Unterscheidung von Groß-/Kleinschreibung, was bedeutet, dass beispielsweise bei Spaltennamen die Groß-/Kleinschreibung nicht berücksichtigt wird, selbst wenn sie in Anführungszeichen stehen:
BigQuery¶
CREATE TABLE test.quotedIdentTable
(
`col#1` INTEGER
);
SELECT `col#1` FROM test.quotedIdentTable;
SELECT `COL#1` FROM test.quotedIdentTable;
In Snowflake hängt die Groß-/Kleinschreibung von Bezeichnern in Anführungszeichen vom Sitzungsparameter QUOTED_IDENTIFIERS_IGNORE_CASE ab. Standardmäßig wird beim Vergleich von Bezeichnern in Anführungszeichen zwischen Groß- und Kleinschreibung unterschieden. Dies bedeutet, dass der Ergebniscode aus der Migration des obigen Beispiels:
Snowflake¶
CREATE TABLE test.quotedIdentTable
(
"col#1" INTEGER
);
SELECT
"col#1"
FROM
test.quotedIdentTable;
SELECT
"COL#1"
FROM
test.quotedIdentTable;
Bei der Ausführung der zweiten Auswahl fehlschlägt, es sei denn, der Sitzungsparameter ist auf TRUE gesetzt.
Wie SnowConvert AI Bezeichner in Anführungszeichen migriert¶
SnowConvert AI analysiert Bezeichner in Anführungszeichen, um festzustellen, ob sie nicht alphanumerische Zeichen enthalten oder ob es sich um reservierte Wörter in Snowflake handelt. Falls dies der Fall ist, wandelt das Tool sie in Snowflake in Bezeichner in Anführungszeichen um. Alphanumerische Bezeichner werden ohne Anführungszeichen verwendet:
BigQuery¶
CREATE TABLE `test.identsTable1`
(
`col#1` INTEGER,
`col2` INTEGER
);
-- Group is a reserved word
SELECT
`col#1` AS `group`,
`col2`AS `hello`
FROM
`test.identsTable1`;
Snowflake¶
CREATE TABLE test.identsTable1
(
"col#1" INTEGER,
col2 INTEGER
);
-- Group is a reserved word
SELECT
"col#1" AS "group",
col2 AS hello
FROM
test.identsTable1;
Bekannte Probleme¶
Standardmäßig berücksichtigt BigQuery bei Tabellen- und Datensetnamen die Groß-/Kleinschreibung, es sei denn, die Option is_case_insensitive ist für das Datenset aktiviert. Dadurch können die folgenden Tabellen problemlos nebeneinander existieren:
BigQuery¶
CREATE TABLE test.myTable
(
col1 INTEGER
);
CREATE TABLE test.MyTable
(
col1 INTEGER
);
Bezeichner ohne Anführungszeichen werden in Snowflake jedoch immer in Großbuchstaben gespeichert und verglichen, was bedeutet, dass test.MyTable einen Fehler aufgrund eines doppelten Objekts auslöst, wenn versucht wird, es zu erstellen. SnowConvert AI funktioniert außerdem unter der Annahme, dass Bezeichner nicht zwischen Groß- und Kleinschreibung unterscheiden. Wenn also während der Transformation eines dieser Szenarien auftritt, wird SSC-FDM-0019 generiert, um Benutzende zu warnen:
Snowflake¶
CREATE TABLE test.myTable
(
col1 INTEGER
);
--** SSC-FDM-0019 - SEMANTIC INFORMATION COULD NOT BE LOADED FOR test.MyTable. CHECK IF THE NAME IS INVALID OR DUPLICATED. **
CREATE TABLE test.MyTable
(
col1 INTEGER
);