SnowConvert: Grundlegende Elemente in Redshift

Namen und Bezeichner

Beschreibung

Namen identifizieren Datenbankobjekte, einschließlich Tabellen und Spalten, sowie Benutzer und Kennwörter. Die Begriffe Name und Bezeichner können austauschbar verwendet werden. Es gibt zwei Arten von Bezeichnern: Standardbezeichner und Bezeichner in Anführungszeichen oder mit Trennzeichen. Bezeichner dürfen nur aus UTF-8 druckbaren Zeichen bestehen. ASCII-Buchstaben in Standard- und abgegrenzten Bezeichnern unterscheiden nicht zwischen Groß- und Kleinschreibung und werden in der Datenbank zu Kleinbuchstaben umgewandelt. (Redshift SQL-Referenz: Namen und Bezeichner).

Standardbezeichner

Die Standardbezeichner von SQL müssen eine Reihe von Regeln einhalten:

  • Sie müssen mit einem ASCII-Einzelbyte-Alphabet oder Unterstrich oder einem UTF-8 Multibyte-Zeichen von zwei bis vier Bytes Länge beginnen.

  • Nachfolgende Zeichen können ASCII-alphanumerische Einzelbyte-Zeichen, Unterstriche oder Dollarzeichen oder UTF-8 Multibyte-Zeichen von zwei bis vier Bytes Länge sein.

  • Sie müssen zwischen 1 und 127 Bytes lang sein, ohne Anführungszeichen für abgegrenzte Bezeichner.

  • Enthält keine Anführungszeichen und keine Leerzeichen.

  • Nicht ein reserviertes SQL Schlüsselwort sein. (Redshift SQL-Referenz: Standard-Bezeichner)

Diese Syntax wird von Snowflake vollständig unterstützt.

Sonderzeichen-Bezeichner

In Redshift gibt es Unterstützung für die Verwendung einiger Sonderzeichen als Teil des Namens des Bezeichners. Diese können in jedem Teil eines Bezeichners verwendet werden. Um diese Verhaltensweise zu emulieren, ersetzen Sie daher diese nicht unterstützten Sonderzeichen durch einen neuen, in Snowflake gültigen Wert.

  • Das Zeichen # wird durch ein _H_ ersetzt.

Bemerkung

Wenn Sie in Redshift einen Tabellennamen angeben, der mit „#“ beginnt, wird die Tabelle als temporäre Tabelle erstellt.

Beispielhafte Quellcode-Muster

Eingabecode:
 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
Ausgabecode:
 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

Begrenzte Bezeichner

Bezeichner mit Trennzeichen (auch bekannt als Bezeichner in Anführungszeichen) beginnen und enden mit doppelten Anführungszeichen („). Wenn Sie einen Bezeichner mit Trennzeichen verwenden, müssen Sie die doppelten Anführungszeichen für jeden Verweis auf dieses Objekt verwenden. Der Bezeichner kann alle druckbaren Standardzeichen UTF-8 außer dem doppelten Anführungszeichen selbst enthalten. Daher können Sie Spalten- oder Tabellennamen erstellen, die ansonsten unzulässige Zeichen enthalten, wie z. B. Leerzeichen oder das Prozentzeichen. (Redshift SQL-Referenz: Bezeichner mit Trennzeichen).

In Redshift können Bezeichner in Anführungszeichen eingeschlossen werden und es wird standardmäßig nicht zwischen Groß- und Kleinschreibung unterschieden. In Snowflake wird jedoch standardmäßig zwischen Groß- und Kleinschreibung unterschieden. Aus diesem Grund entfernen wir, um diese Verhaltensweise zu emulieren, die Anführungszeichen von allen Bezeichnern, die in Anführungszeichen eingeschlossen sind, keine reservierten Schlüsselwörter in Snowflake sind und alphanumerische Zeichen enthalten. Reservierte Schlüsselwörter werden in Snowflake immer in doppelte Anführungszeichen gesetzt und in Kleinbuchstaben definiert.

Warnung

Diese Änderung könnte sich auf die gewünschte Verhaltensweise auswirken, wenn das Flag enable_case_sensitive_identifier in Ihrer Konfiguration auf „true“ gesetzt ist. Zukünftige Updates werden es den Benutzern ermöglichen, die gewünschte Transformation für diese Bezeichner zu definieren.

Beispielhafte Quellcode-Muster

Bitte beachten Sie bei diesem Szenario, dass LATERAL und INCREMENT in Snowflake reservierte Wörter sind, während LOCAL kein reserviertes Wort ist.

Eingabecode:
 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

Inkrement

local

1

20

2

21

3

22

Ausgabecode:
 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

Inkrement

LOCAL

1

20

2

21

3

22

Bezeichner in Anführungszeichen in Funktionen

In Redshift können Funktionsnamen in Anführungszeichen eingeschlossen werden und es wird standardmäßig nicht zwischen Groß- und Kleinschreibung unterschieden. In Snowflake können Funktionen jedoch zu Problemen führen, wenn sie in Anführungszeichen und in Kleinbuchstaben geschrieben sind. Aus diesem Grund wird in Snowflake jeder Funktionsname, der in Anführungszeichen eingeschlossen ist, immer in Großbuchstaben umgewandelt und die Anführungszeichen werden entfernt.

Beispielhafte Quellcode-Muster

Eingabecode:
 SELECT "getdate"();
Copy

„GETDATE“()

2024-11-21 22:08:53,000000

Ausgabecode:
 SELECT GETDATE();
Copy

„GETDATE“()

2024-11-21 22:08:53,000 +0000

Empfehlungen

Um diese Beschränkung zu umgehen, bietet Snowflake den Sitzungsparameter QUOTED_IDENTIFIERS_IGNORE_CASE, der Snowflake dazu veranlasst, Kleinbuchstaben in Bezeichnern in doppelten Anführungszeichen beim Erstellen und Suchen von Objekten als Großbuchstaben zu behandeln.

(Snowflake SQL-Referenz: Anforderungen für den Bezeichner).

Reservierte Schlüsselwörter

Beschreibung

In Redshift können Sie einige der in Snowflake reservierten Schlüsselwörter als Spaltennamen, Tabellennamen usw. verwenden. Aus diesem Grund müssen diese Wörter in doppelte Anführungszeichen gesetzt werden, um sie verwenden zu können.

Bemerkung

Bitte beachten Sie, dass diese Namen in Snowflake bei Verwendung von doppelten Anführungszeichen die Groß-/Kleinschreibung berücksichtigen. Daher muss unbedingt beachtet werden, dass reservierte Schlüsselwörter in Snowflake immer in doppelte Anführungszeichen gesetzt und in Kleinbuchstaben geschrieben werden. Weitere Informationen finden Sie in der Dokumentation Snowflake- Bezeichner.

Beispielhafte Quellcode-Muster

Eingabecode:

 CREATE TABLE alter
(
    alter INT
);

CREATE TABLE CONNECT
(
    CONNECT INT
);

DROP TABLE alter;
DROP TABLE CONNECT;
Copy
Ausgabecode:
 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

Bekannte Probleme

Es wurden keine Probleme gefunden.