SnowConvert : éléments de base Redshift

Noms et identificateurs

Description

Les noms identifient les objets de la base de données, notamment les tables et les colonnes, ainsi que les utilisateurs et les mots de passe. Les termes nom et identificateur peuvent être utilisés indifféremment. Il existe deux types d’identificateurs : les identificateurs standard et les identificateurs entre guillemets ou délimités. Les identificateurs ne doivent comporter que des caractères UTF-8 imprimables. Les lettres ASCII dans les identificateurs standard et délimités ne sont pas sensibles à la casse et sont repliées en minuscules dans la base de données. (Référence linguistique Redshift SQL Noms et identificateurs).

Identificateurs standard

Les identificateurs SQL standards respectent un ensemble de règles et doivent :

  • Commencer par un caractère alphabétique d’un octet ou un caractère de soulignement (ASCII), ou un caractère multi-octets de deux à quatre octets (UTF-8).

  • Les caractères suivants peuvent être des caractères alphanumériques d’un octet ASCII, des traits de soulignement ou des signes dollar, ou des caractères multi-octets UTF-8 d’une longueur de deux à quatre octets.

  • Avoir une longueur comprise entre 1 et 127 octets, sans compter les guillemets pour les identificateurs délimités.

  • Être sans guillemet et sans espace.

  • Ne pas être un mot-clé réservé de SQL. (Référence linguistique Redshift SQL Identificateurs standard)

Cette syntaxe est entièrement prise en charge par Snowflake.

Identificateurs de caractères spéciaux

Dans Redshift, il existe une prise en charge de l’utilisation de certains caractères spéciaux dans le cadre du nom de l’identificateur. Ceux-ci peuvent être utilisés dans n’importe quelle partie d’un identificateur. C’est pourquoi, pour émuler ce comportement, remplacez ces caractères spéciaux non pris en charge par une nouvelle valeur valable dans Snowflake.

  • Le caractère # est remplacé par un _H\_.

Note

Dans Redshift, si vous spécifiez un nom de table qui commence par “# “, la table est créée en tant que table temporaire.

Modèles d’échantillons de sources

Code d’entrée :
 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
Code de sortie :
 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

Identificateurs délimités

Les identificateurs délimités (également connus sous le nom d’identificateurs cités) commencent et se terminent par des guillemets doubles (« ). Si vous utilisez un identificateur délimité, vous devez utiliser les guillemets doubles pour chaque référence à cet objet. L’identificateur peut contenir n’importe quel caractère imprimable standard UTF-8 autre que le guillemet double lui-même. Par conséquent, vous pouvez créer des noms de colonnes ou de tables qui incluent des caractères autrement illégaux, tels que des espaces ou le symbole du pourcentage. (Référence linguistique Redshift SQL Identificateurs délimités).

Dans Redshift, les identificateurs peuvent être placés entre guillemets et ne sont pas sensibles à la casse par défaut. Cependant, dans Snowflake, ils sont sensibles à la casse par défaut. C’est pourquoi, pour émuler ce comportement, nous supprimons les guillemets de tous les identificateurs qui sont entre guillemets, qui ne sont pas des mots-clé réservés dans Snowflake, et qui contiennent des caractères alphanumériques. Les mots-clés réservés dans Snowflake seront toujours placés entre guillemets doubles et définis en minuscules.

Avertissement

Cette modification peut avoir un impact sur le comportement souhaité si le paramètre enable_case_sensitive_identifier est défini sur true dans votre configuration. Les prochaines mises à jour permettront aux utilisateurs de définir la transformation souhaitée pour ces identificateurs.

Modèles d’échantillons de sources

Pour ce scénario, veuillez garder à l’esprit que « LATERAL » et « INCREMENT » sont des mots réservés dans Snowflake, tandis que « LOCAL » n’est pas un mot réservé.

Code d’entrée :
 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

Code de sortie :
 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

Identificateurs entre guillemets dans les fonctions

Dans Redshift, les noms de fonctions peuvent être placés entre guillemets et ne sont pas sensibles à la casse par défaut. Cependant, dans Snowflake, les fonctions peuvent poser des problèmes si elles sont entre guillemets et écrites en minuscules. C’est pourquoi, dans Snowflake, tout nom de fonction entre guillemets sera toujours transformé en majuscules et les guillemets seront supprimés.

Modèles d’échantillons de sources

Code d’entrée :
 SELECT "getdate"();
Copy

« GETDATE »()

2024-11-21 22:08:53.000000

Code de sortie :
 SELECT GETDATE();
Copy

« GETDATE »()

2024-11-21 22:08:53.000 +0000

Recommandations

Pour contourner cette limite, Snowflake fournit le paramètre de session QUOTED_IDENTIFIERS_IGNORE_CASE, qui permet à Snowflake de traiter les lettres minuscules des identificateurs entre guillemets comme des lettres majuscules lors de la création et de la recherche d’objets.

(Référence linguistique Snowflake SQL Exigences en matière d’identificateur).

Mots-clés réservés

Description

Dans Redshift, vous pouvez utiliser certains des mots-clés réservés de Snowflake comme les noms de colonnes, les noms de tables, etc. C’est pourquoi il est nécessaire que ces mots soient placés entre guillemets doubles pour pouvoir les utiliser.

Note

Veuillez noter que dans Snowflake, lorsque ces noms sont placés entre guillemets doubles, ils sont sensibles à la casse. Pour cette raison, il est important de souligner que lorsqu’un mot-clé réservé est utilisé dans Snowflake, il est toujours transformé avec des guillemets doubles et en minuscules. Pour plus d’informations, veuillez vous référer à la Documentation sur les identificateurs Snowflake.

Modèles d’échantillons de sources

Code d’entrée :

 CREATE TABLE alter
(
    alter INT
);

CREATE TABLE CONNECT
(
    CONNECT INT
);

DROP TABLE alter;
DROP TABLE CONNECT;
Copy
Code de sortie :
 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

Problèmes connus

Aucun problème n’a été constaté.