SnowConvert AI - BigQuery - Diferenças de identificador entre BigQuery e Snowflake

Identificadores entre aspas

Identificadores BigQuery entre aspas são delimitados por acentos graves (`) enquanto o Snowflake os coloca entre aspas duplas (“).

Em BigQuery, os identificadores entre aspas seguem as regras de diferenciação de maiúsculas/minúsculas, o que significa que, por exemplo, nomes de colunas ainda não diferenciam maiúsculas de minúsculas mesmo quando entre aspas:

BigQuery

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

SELECT `col#1` FROM test.quotedIdentTable;

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

No Snowflake, a diferenciação de maiúsculas e minúsculas dos identificadores entre aspas depende do parâmetro da sessão QUOTED_IDENTIFIERS_IGNORE_CASE. Por padrão, a comparação de identificadores entre aspas diferencia maiúsculas de minúsculas. Isso significa que o código de resultado da migração do exemplo acima:

Snowflake

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

SELECT
  "col#1"
FROM
  test.quotedIdentTable;

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

Falha ao executar a segunda seleção, a menos que o parâmetro de sessão esteja definido como TRUE.

Como o SnowConvert AI migra identificadores entre aspas

é a palavra-chave.SnowConvert AI analisará os identificadores entre aspas para determinar se contêm caracteres não alfanuméricos ou são palavras reservadas no Snowflake. Caso contenham, serão transformados em identificadores entre aspas no Snowflake; identificadores alfanuméricos permanecerão sem aspas.

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

Problemas conhecidos

Por padrão, BigQuery considera os nomes de tabelas e conjuntos de dados como diferenciando maiúsculas e minúsculas, a menos que a opção is_case_insensitive esteja ativada para o conjunto de dados. Isso permite que as seguintes tabelas coexistam sem problemas:

BigQuery

CREATE TABLE test.myTable
(
  col1 INTEGER
);

CREATE TABLE test.MyTable
(
  col1 INTEGER
);
Copy

Entretanto, os identificadores sem aspas no Snowflake são sempre armazenados e comparados em maiúsculas, o que significa que test.MyTable vai gerar um erro de objeto duplicado ao tentar criá-lo. O SnowConvert AI também funciona sob a premissa de que os identificadores não diferenciam maiúsculas de minúsculas, portanto, quando um desses cenários ocorrer durante a transformação, SSC-FDM-0019 será gerado para avisar o usuário:

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