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;
Copy
출력 코드:
 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

구분 기호

구분 기호(따옴표로 묶인 식별자)는 큰따옴표(“)로 시작하고 큰따옴표로 끝납니다. 구분 기호를 사용하는 경우 해당 오브젝트에 대한 모든 참조에 큰따옴표를 사용해야 합니다. 식별자에는 큰따옴표 이외의 모든 표준 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;
Copy

증분

로컬

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

증분

LOCAL

1

20

2

21

3

22

함수의 따옴표로 묶인 식별자

Redshift에서 함수 이름은 따옴표로 묶을 수 있으며 기본적으로 대/소문자를 구분하지 않습니다. 그러나 Snowflake에서는 함수를 따옴표로 묶고 소문자로 작성하면 문제가 발생할 수 있습니다. 따라서 Snowflake에서는 따옴표로 묶인 함수 이름은 항상 대문자로 변환되고 따옴표는 제거됩니다.

샘플 소스 패턴

입력 코드:
 SELECT "getdate"();
Copy

“GETDATE”()

2024-11-21 22:08:53.000000

출력 코드:
 SELECT GETDATE();
Copy

“GETDATE”()

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

권장 사항

이 제한을 해결하기 위해 Snowflake는 QUOTED_IDENTIFIERS_IGNORE_CASE 세션 매개 변수를 제공하여 오브젝트를 생성하고 찾을 때 Snowflake가 큰따옴표로 묶인 식별자의 소문자를 대문자로 처리하도록 합니다.

(Snowflake SQL Language Reference 식별자 요구 사항).

예약된 키워드

설명

Redshift에서는 일부 Snowflake 예약 키워드 를 열 이름, 테이블 이름 등으로 사용할 수 있습니다. 따라서 이러한 단어를 사용하려면 큰따옴표로 묶어야 합니다.

참고

Snowflake에서 이러한 이름이 큰따옴표로 묶인 경우 대/소문자를 구분 합니다. 이러한 이유로 예약된 키워드가 Snowflake에서 사용될 때는 항상 큰따옴표와 소문자로 변환된다는 점을 강조하는 것이 중요합니다. 자세한 내용은 Snowflake 식별자 설명서를 참조하십시오

샘플 소스 패턴

입력 코드:

 CREATE TABLE alter
(
    alter INT
);

CREATE TABLE CONNECT
(
    CONNECT INT
);

DROP TABLE alter;
DROP TABLE CONNECT;
Copy
출력 코드:
 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

알려진 문제

문제가 발견되지 않았습니다.