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

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

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

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

«GETDATE»()

2024-11-21 22:08:53.000000

Código de saída:
 SELECT GETDATE();
Copy

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

Problemas conhecidos

Não foram encontrados problemas.