SnowConvert: Elementos básicos do Redshift¶
Nomes e identificadores¶
Descrição ¶
Os nomes identificam os objetos do banco de dados, inclusive tabelas e colunas, bem como usuários e senhas. Os termos name e identifier podem ser usados de forma intercambiável. Há dois tipos de identificadores: os identificadores padrão e os identificadores entre aspas ou delimitados. Os identificadores devem conter apenas caracteres imprimíveis UTF-8. Letras ASCII em identificadores padrão e delimitados não diferenciam maiúsculas de minúsculas e são dobradas para minúsculas no banco de dados. (Nomes e identificadores da referência de linguagem SQL).
Identificadores padrão ¶
Os identificadores SQL padrão obedecem a um conjunto de regras e devem ser usados:
Comece com um caractere alfabético de byte único ASCII ou um caractere de sublinhado, ou um caractere UTF-8 multibyte de dois a quatro bytes.
Os caracteres subsequentes podem ser caracteres ASCII alfanuméricos de byte único, sublinhados ou cifrões, ou caracteres UTF-8 multibyte com dois a quatro bytes de comprimento.
Ter entre 1 e 127 bytes de comprimento, sem incluir aspas para identificadores delimitados.
Não contém aspas nem espaços.
Não ser uma palavra-chave SQL reservada. (Identificadores padrão da referência de linguagem Redshift SQL)
Essa sintaxe é totalmente compatível com o Snowflake.
Identificadores de caracteres especiais
No Redshift, há suporte para o uso de alguns caracteres especiais como parte do nome do identificador. Eles podem ser usados em qualquer parte de um identificador. Por esse motivo, para emular esse comportamento, substitua esses caracteres especiais não suportados por um novo valor válido no Snowflake.
O caractere # é substituído por um _H_.
Nota
No Redshift, se você especificar um nome de tabela que comece com “# “, a tabela será criada como uma tabela temporária.
Amostra de padrões da origem¶
Código de entrada:¶
CREATE TABLE #TABLE_NAME
(
COL#1 int,
"col2#" int
);
INSERT INTO #TABLE_NAME(COL#1, "col2#") VALUES (1,20),(2,21),(3,22);
SELECT col#1, "col2#" as col# FROM #TABLE_NAME;
Código de saída:¶
CREATE TEMP TABLE _H_TABLE_NAME
(
COL_H_1 int,
"col2#" int
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "03/04/2025", "domain": "test" }}';
INSERT INTO _H_TABLE_NAME (COL_H_1, "col2#") VALUES (1,20),(2,21),(3,22);
SELECT
col_H_1,
"col2#" as col_H_
FROM
_H_TABLE_NAME;
Identificadores delimitados ¶
Os identificadores delimitados (também conhecidos como identificadores entre aspas) começam e terminam com aspas duplas («). Se você usar um identificador delimitado, deverá usar as aspas duplas para cada referência a esse objeto. O identificador pode conter qualquer caractere UTF-8 padrão imprimível que não seja a própria aspa dupla. Portanto, você pode criar nomes de colunas ou tabelas que incluam caracteres ilegais, como espaços ou o símbolo de porcentagem. (Identificadores delimitados de referência da linguagem Redshift SQL).
No Redshift, os identificadores podem ser colocados entre aspas e, por padrão, não diferenciam maiúsculas de minúsculas. No entanto, no Snowflake, eles são sensíveis a maiúsculas e minúsculas por padrão. Por esse motivo, para emular esse comportamento, estamos removendo as aspas de todos os identificadores que estão entre aspas, não são palavras-chave reservadas no Snowflake e contêm caracteres alfanuméricos. Palavras-chave reservadas no Snowflake são sempre colocadas entre aspas duplas e definidas em minúsculas.
Aviso
Essa alteração pode afetar o comportamento desejado se o sinalizador enable_case_sensitive_identifier
estiver definido como true em sua configuração. Atualizações futuras permitirão que os usuários definam a transformação desejada para esses identificadores.
Amostra de padrões da origem¶
Nesse cenário, lembre-se de que «LATERAL» e «INCREMENT» são palavras reservadas no Snowflake, enquanto «LOCAL» não é uma palavra reservada.
Código de entrada:¶
CREATE TABLE lateral
(
INCREMENT int,
"local" int
);
INSERT INTO lateral(INCREMENT, "local") VALUES (1,20),(2,21),(3,22);
SELECT lateral.INCREMENT, "local" FROM LATERAL;
increment |
local |
---|---|
1 |
20 |
2 |
21 |
3 |
22 |
Código de saída:¶
CREATE TABLE "lateral"
(
"increment" int,
local int
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "12/10/2024", "domain": "test" }}';
INSERT INTO "lateral" ("increment", local) VALUES (1,20),(2,21),(3,22);
SELECT
"lateral"."increment",
local
FROM
"lateral";
increment |
LOCAL |
---|---|
1 |
20 |
2 |
21 |
3 |
22 |
Identificadores citados em funções¶
No Redshift, os nomes de funções podem ser colocados entre aspas e, por padrão, não diferenciam maiúsculas de minúsculas. No entanto, no Snowflake, as funções podem causar problemas se estiverem entre aspas e escritas em letras minúsculas. Por esse motivo, no Snowflake, qualquer nome de função entre aspas sempre será transformado em maiúsculas e as aspas serão removidas.
Amostra de padrões da origem¶
Código de entrada:¶
SELECT "getdate"();
«GETDATE»() |
---|
2024-11-21 22:08:53.000000 |
Código de saída:¶
SELECT GETDATE();
«GETDATE»() |
---|
2024-11-21 22:08:53.000 +0000 |
Recomendações¶
Para contornar essa limitação, o Snowflake oferece o parâmetro de sessão [QUOTED_IDENTIFIERS_IGNORE_CASE, que faz com que o Snowflake trate as letras minúsculas em identificadores entre aspas duplas como maiúsculas ao criar e localizar objetos.
(Requisitos de identificador da referência de linguagem do Snowflake SQL).
Palavras-chave reservadas¶
Descrição¶
No Redshift, você pode usar algumas das palavras-chave reservadas do Snowflake como nomes de colunas, nomes de tabelas etc. Por esse motivo, é necessário que essas palavras sejam colocadas entre aspas duplas para que você possa usá-las.
Nota
Observe que, no Snowflake, quando esses nomes são colocados entre aspas duplas, eles são sensíveis a maiúsculas e minúsculas. Por esse motivo, é importante enfatizar que, quando uma palavra-chave reservada é usada no Snowflake, ela é sempre transformada entre aspas duplas e em letras minúsculas. Para obter mais informações, consulte Documentação de identificadores do Snowflake
Amostra de padrões da origem¶
Código de entrada:¶
CREATE TABLE alter
(
alter INT
);
CREATE TABLE CONNECT
(
CONNECT INT
);
DROP TABLE alter;
DROP TABLE CONNECT;
Código de saída:¶
CREATE TABLE "alter"
(
"alter" INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/17/2024" }}';
CREATE TABLE "connect"
(
"connect" INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/17/2024" }}';
DROP TABLE "alter";
DROP TABLE "connect";
Problemas conhecidos ¶
Não foram encontrados problemas.