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;
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;
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;
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";
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"();
„GETDATE“() |
---|
2024-11-21 22:08:53,000000 |
Ausgabecode:¶
SELECT GETDATE();
„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.
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;
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";
Bekannte Probleme ¶
Es wurden keine Probleme gefunden.