SnowConvert: Redshift 기본 요소¶
이름 및 식별자¶
설명 ¶
이름은 테이블과 열, 사용자 및 비밀번호를 포함한 데이터베이스 오브젝트를 식별합니다. name 및 _identifier_라는 용어는 같은 의미로 사용할 수 있습니다. 식별자에는 표준 식별자와 따옴표 또는 구분 기호의 두 가지 유형이 있습니다. 식별자는 UTF-8 인쇄 가능한 문자로만 구성되어야 합니다. ASCII 표준 및 구분 기호의 문자는 대/소문자를 구분하지 않으며 데이터베이스에서 소문자로 변환됩니다. (Redshift SQL Language Reference 이름 및 식별자) .
표준 식별자 ¶
표준 SQL 식별자는 일련의 규칙을 준수해야 합니다.
ASCII 1바이트 알파벳 문자 또는 밑줄 문자 또는 UTF-8 멀티바이트 문자를 2~4바이트 길이로 입력합니다.
후속 문자는 ASCII 1바이트 영숫자, 밑줄 또는 달러 기호 또는 UTF-8바이트 길이의 2~4바이트 멀티바이트 문자를 입력할 수 있습니다.
구분 기호를 위한 따옴표를 제외하고 1~127바이트 길이여야 하며, 따옴표는 포함하지 않습니다.
따옴표와 공백을 포함하지 않습니다.
예약된 SQL 키워드가 아닙니다. (Redshift SQL Language Reference 표준 식별자)
이 구문은 Snowflake에서 완벽하게 지원됩니다.
특수 문자 식별자
Redshift에서는 식별자 이름의 일부로 일부 특수 문자를 사용할 수 있도록 지원합니다. 식별자의 모든 부분에 사용할 수 있습니다. 따라서 이 동작을 에뮬레이션하려면 이러한 지원되지 않는 특수 문자를 Snowflake에서 유효한 새 값으로 대체하십시오.
# 문자는 _H_ 로 대체됩니다.
참고
Redshift에서 ‘#’ 으로 시작하는 테이블 이름을 지정하면 해당 테이블이 임시 테이블로 생성됩니다.
샘플 소스 패턴¶
입력 코드:¶
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;
출력 코드:¶
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;
구분 기호 ¶
구분 기호(따옴표로 묶인 식별자)는 큰따옴표(“)로 시작하고 큰따옴표로 끝납니다. 구분 기호를 사용하는 경우 해당 오브젝트에 대한 모든 참조에 큰따옴표를 사용해야 합니다. 식별자에는 큰따옴표 이외의 모든 표준 UTF-8 인쇄 가능한 문자를 포함할 수 있습니다. 따라서 공백이나 퍼센트 기호와 같은 잘못된 문자를 포함하는 열 또는 테이블 이름을 만들 수 있습니다. (Redshift SQL Language Reference 구분 기호).
Redshift에서 식별자는 따옴표로 묶을 수 있으며 기본적으로 대/소문자를 구분하지 않습니다. 그러나 Snowflake에서는 기본적으로 대/소문자를 구분 합니다. 따라서 이 동작을 에뮬레이션하기 위해 따옴표로 묶여 있고 Snowflake에서 예약된 키워드가 아니며 영숫자 문자를 포함 하는 모든 식별자에서 따옴표를 제거합니다. Snowflake의 예약 키워드는 항상 큰따옴표로 묶여 소문자로 정의됩니다.
경고
이 변경 사항은 구성에서 enable_case_sensitive_identifier
플래그가 true로 설정된 경우 원하는 동작에 영향을 줄 수 있습니다. 향후 업데이트를 통해 사용자는 이러한 식별자에 대해 원하는 변환을 정의할 수 있습니다.
샘플 소스 패턴¶
이 시나리오에서 “LATERAL” 및 “INCREMENT”는 Snowflake에서 예약어이고 “LOCAL”는 예약어가 아니라는 점에 유의하십시오.
입력 코드:¶
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;
증분 |
로컬 |
---|---|
1 |
20 |
2 |
21 |
3 |
22 |
출력 코드:¶
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";
증분 |
LOCAL |
---|---|
1 |
20 |
2 |
21 |
3 |
22 |
함수의 따옴표로 묶인 식별자¶
Redshift에서 함수 이름은 따옴표로 묶을 수 있으며 기본적으로 대/소문자를 구분하지 않습니다. 그러나 Snowflake에서는 함수를 따옴표로 묶고 소문자로 작성하면 문제가 발생할 수 있습니다. 따라서 Snowflake에서는 따옴표로 묶인 함수 이름은 항상 대문자로 변환되고 따옴표는 제거됩니다.
샘플 소스 패턴¶
입력 코드:¶
SELECT "getdate"();
“GETDATE”() |
---|
2024-11-21 22:08:53.000000 |
출력 코드:¶
SELECT GETDATE();
“GETDATE”() |
---|
2024-11-21 22:08:53.000 +0000 |
권장 사항¶
이 제한을 해결하기 위해 Snowflake는 QUOTED_IDENTIFIERS_IGNORE_CASE 세션 매개 변수를 제공하여 오브젝트를 생성하고 찾을 때 Snowflake가 큰따옴표로 묶인 식별자의 소문자를 대문자로 처리하도록 합니다.
예약된 키워드¶
설명¶
Redshift에서는 일부 Snowflake 예약 키워드 를 열 이름, 테이블 이름 등으로 사용할 수 있습니다. 따라서 이러한 단어를 사용하려면 큰따옴표로 묶어야 합니다.
참고
Snowflake에서 이러한 이름이 큰따옴표로 묶인 경우 대/소문자를 구분 합니다. 이러한 이유로 예약된 키워드가 Snowflake에서 사용될 때는 항상 큰따옴표와 소문자로 변환된다는 점을 강조하는 것이 중요합니다. 자세한 내용은 Snowflake 식별자 설명서를 참조하십시오
샘플 소스 패턴¶
입력 코드:¶
CREATE TABLE alter
(
alter INT
);
CREATE TABLE CONNECT
(
CONNECT INT
);
DROP TABLE alter;
DROP TABLE CONNECT;
출력 코드:¶
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";
알려진 문제 ¶
문제가 발견되지 않았습니다.