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;
Copy

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;
Copy

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`;
Copy

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;
Copy

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
);
Copy

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
);
Copy