SnowConvert AI - BigQuery - Différences d’identificateur entre BigQuery et Snowflake

Identificateurs avec guillemets

Les identificateurs BigQuery entre guillemets sont délimités par des guillemets simples (`) alors que Snowflake les place entre guillemets doubles (« »).

Dans BigQuery, les identificateurs entre guillemets respectent les règles de sensibilité à la casse, ce qui signifie que, par exemple, les noms de colonnes sont toujours insensibles à la casse même entre guillemets :

BigQuery

CREATE TABLE test.quotedIdentTable
(
  `col#1` INTEGER
);

SELECT `col#1` FROM test.quotedIdentTable;

SELECT `COL#1` FROM test.quotedIdentTable;
Copy

Dans Snowflake, la sensibilité à la casse des identificateurs entre guillemets dépend du paramètre de session QUOTED_IDENTIFIERS_IGNORE_CASE. Par défaut, la comparaison des identificateurs entre guillemets est sensible à la casse. Cela signifie que le code de résultat de la migration de l’exemple ci-dessus :

Snowflake

CREATE TABLE test.quotedIdentTable
(
  "col#1" INTEGER
);

SELECT
  "col#1"
FROM
  test.quotedIdentTable;

SELECT
  "COL#1"
FROM
  test.quotedIdentTable;
Copy

Échouera lors de l’exécution de la deuxième sélection, à moins que le paramètre de session ne soit défini sur TRUE.

Comment SnowConvert AI migre les identificateurs entre guillemets

SnowConvert AI analysera les identificateurs entre guillemets pour déterminer s’ils contiennent des caractères non alphanumériques ou sont des mots réservés dans Snowflake, si c’est le cas, il les transformera en identificateurs entre guillemets dans Snowflake, les identificateurs alphanumériques seront laissés sans guillemets :

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

Problèmes connus

Par défaut, BigQuery considère les noms de tables et d’ensembles de données comme sensibles à la casse, à moins que l’option is_case_insensitive soit activée Pour l’ensemble de données, cela permet aux tables suivantes de coexister sans problème :

BigQuery

CREATE TABLE test.myTable
(
  col1 INTEGER
);

CREATE TABLE test.MyTable
(
  col1 INTEGER
);
Copy

Cependant, les identificateurs sans guillemets dans Snowflake sont toujours stockés et comparés en majuscules, ce qui signifie que test.MyTable générera une erreur d’objet dupliqué lors de la tentative de création. SnowConvert AI fonctionne également en supposant que les identificateurs ne sont pas sensibles à la casse, de sorte que lorsque l’un de ces scénarios apparaît pendant la transformation, SSC-FDM-0019 sera généré pour avertir l’utilisateur :

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