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