식별자 요구 사항¶
문자(A-Z, a-z) 또는 밑줄(“_”)로 시작합니다.
문자, 밑줄, 10진수(0-9), 달러 기호(“$”)만 포함합니다.
대문자로 저장되고 확인됩니다(예:
id
는ID
로 저장되고 확인됨).
식별자를 큰따옴표로 묶는 경우(예: “공백과 문장 부호가 있는 내 식별자.”), 다음 규칙이 적용됩니다.
식별자를 저장하고 확인할 때 식별자의 대/소문자는 그대로 보존됩니다(예:
"id"
가id
로 저장되고 확인됨).식별자는 ASCII, 확장 ASCII, 비 ASCII 문자를 포함하고 이러한 문자로 시작할 수 있습니다.
따옴표로 묶인 식별자 안에 큰따옴표 문자를 사용하려면 두 개의 따옴표를 사용하십시오. 예:
create table "quote""andunquote""" ...
위와 같이 하면 아래와 같이 명명된 테이블이 생성됩니다.
quote"andunquote"
여기서 따옴표는 이름의 일부입니다.
참고
식별자가 따옴표로 묶이지 않든 큰따옴표로 묶이든 상관없이, 허용되는 최대 문자 수는 255자입니다(공백 포함).
문자열 리터럴, 세션 변수 또는 바인드 변수를 사용해 식별자를 지정할 수도 있습니다. 자세한 내용은 SQL 변수 섹션을 참조하십시오.
이 항목의 내용:
따옴표가 없는 식별자¶
큰따옴표로 묶이지 않은 식별자는 문자나 밑줄(_
)로 시작해야 하며 확장 문자나 공백을 포함할 수 없습니다.
다음은 전부 유효한 식별자의 예이지만, 이러한 식별자에 있는 문자의 대/소문자는 보존되지 않습니다.
myidentifier MyIdentifier1 My$identifier _my_identifier
큰따옴표로 묶인 식별자¶
구분 기호로 분리된 식별자(즉, 큰따옴표로 묶인 식별자)는 대/소문자를 구분하며 다음을 포함한 어떤 유효한 문자로든 시작하고 이러한 문자를 포함할 수 있습니다.
숫자
특수 문자(
.
,'
,!
,@
,#
,$
,%
,^
,&
,*
등)확장된 ASCII 문자와 ASCII 문자가 아닌 문자
공백
예:
"MyIdentifier" "my.identifier" "my identifier" "My 'Identifier'" "3rd_identifier" "$Identifier" "идентификатор"
중요
큰따옴표로 묶인 식별자를 사용하여 오브젝트를 만드는 경우 쿼리 또는 다른 SQL 문에서 참조 시, 식별자는 큰따옴표를 포함하여 해당 식별자를 만들 때 정확하게 지정해야 합니다. 따옴표를 포함하지 않으면 Object does not exist
오류(또는 유사한 종류의 오류)가 발생할 수 있습니다.
또한, 쿼리/SQL 문에서 참조 시 전체 식별자를 따옴표로 묶어야 합니다. 이는 마침표(.
)가 식별자에 사용되는 경우에 특히 중요한데, 마침표는 각 오브젝트를 구분할 목적으로 정규화된 오브젝트 이름에도 사용되기 때문입니다.
예:
"My.DB"."My.Schema"."Table.1"
예외¶
처리기 언어가 Java, JavaScript, Snowflake Scripting 또는 SQL인 사용자 정의 함수(UDF) 및 프로시저의 이름 에는 큰따옴표로 묶인 식별자가 지원되지 않습니다.
처리기 언어가 Java인 사용자 정의 함수(UDF) 및 프로시저의 이름에는 ASCII 문자만 사용할 수 있습니다.
식별자 확인¶
기본적으로, Snowflake는 (생성/정의 시에) 식별자를 저장하고 (쿼리 및 기타 SQL 문에서) 확인하기 위해 다음 규칙을 적용합니다.
따옴표로 묶지 않은 식별자는 대문자로 저장되고 확인됩니다.
큰따옴표로 묶인 식별자는 대/소문자를 포함하여 입력한 대로 정확하게 저장되고 확인됩니다.
예를 들어, 다음 네 개의 이름은 동등하며 전부 TABLENAME
으로 확인됩니다.
TABLENAME tablename tableName TableName
이와는 달리, 다음 네 개의 이름은 서로 다른 고유 값으로 간주됩니다.
"TABLENAME" "tablename" "tableName" "TableName"
이러한 식별자를 사용하여 같은 유형의 오브젝트(예: 테이블)를 만들면 4개의 고유한 오브젝트가 생성될 것입니다.
큰따옴표로 묶인 식별자를 대/소문자를 구분하지 않는 식별자로 처리하는 데이터베이스에서 마이그레이션하기¶
SQL에 대한 ANSI/ISO 표준에서 큰따옴표로 묶인 식별자(구분 기호로 분리된 식별자)는 대/소문자를 구분하는 것으로 처리됩니다. 하지만 어떤 회사는 큰따옴표로 묶인 식별자를 대/소문자를 구분하지 않는 식별자로 처리하는 데이터베이스를 제공합니다.
이러한 데이터베이스 중 하나에서 Snowflake로 데이터와 애플리케이션을 마이그레이션하는 경우 해당 애플리케이션은 대/소문자를 구분하지 않도록 되어 있는 식별자 주위에 큰따옴표를 사용할 수 있습니다. 이럴 경우 Snowflake가 식별자를 올바르게 확인하지 못할 수 있습니다. 예를 들어 애플리케이션이 소문자로 된 식별자 주위에 큰따옴표를 사용하는데 Snowflake 데이터베이스에 대문자로 된 식별자가 있을 수 있습니다.
이 제한을 해결하기 위해, Snowflake는 오브젝트를 만들고 찾을 때 큰따옴표 식별자의 소문자를 대문자로 취급하도록 하는 QUOTED_IDENTIFIERS_IGNORE_CASE 세션 매개 변수를 제공합니다.
자세한 내용은 다음 섹션을 참조하십시오.
참고
매개 변수 값을 변경하면 기존 오브젝트를 찾는 기능에 영향을 미칠 수 있습니다. 자세한 내용은 매개 변수 변경의 영향 섹션을 참조하십시오.
QUOTED_IDENTIFIERS_IGNORE_CASE 매개 변수를 사용하여 대/소문자 제어하기¶
세션에 대해 큰따옴표로 묶인 식별자의 알파벳 문자를 대문자로 처리하도록 Snowflake를 구성하려면 세션에 대해 이 매개 변수를 TRUE로 설정하십시오. 이 설정을 사용하면 식별자의 모든 알파벳 문자가 대문자로 저장되고 확인됩니다.
즉, 다음 여덟 개의 이름은 동등하며 전부 TABLENAME
으로 확인됩니다.
TABLENAME tablename tableName TableName "TABLENAME" "tablename" "tableName" "TableName"
이 매개 변수는 숫자, 확장 문자, 공백과 관련하여 따옴표가 없는 식별자에 대한 제한 사항에 아무런 영향도 미치지 않습니다.
매개 변수 변경의 영향¶
QUOTED_IDENTIFIERS_IGNORE_CASE 세션 매개 변수를 변경하면 새 오브젝트와 쿼리에만 영향을 줍니다.
기본 설정이 FALSE인 경우 대/소문자가 혼합되어 있고 큰따옴표로 묶은 식별자를 사용하여 오브젝트를 만들면 Snowflake는 식별자를 대/소문자가 혼합된 형태로 저장합니다.
이 매개 변수를 나중에 TRUE로 변경할 경우 Snowflake가 큰따옴표로 묶여 있고 대/소문자가 혼합된 식별자를 확인할 수 없어 해당 오브젝트를 불러오지 못하게 됩니다.
팁
매개 변수 변경 시 식별자 확인에 미칠 수 있는 영향으로 인해, Snowflake 구현 초기에 식별자 확인 방법을 반드시 선택하는 것이 좋습니다. 그런 다음, 계정 관리자가 기본적으로 이 확인 방법을 적용하도록 계정 수준에서 이 매개 변수를 설정하도록 하십시오.
세션 수준에서 이 매개 변수를 재정의할 수 있지만, 명시적으로 그럴 필요가 있지 않는 한 이 매개 변수를 기본값에서 변경하지 않는 것이 좋습니다.
다음 예에서는 매개 변수를 FALSE에서 TRUE로 변경한 후의 동작을 보여줍니다.
-- Set the default behavior ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = false; -- Create a table with a double-quoted identifier CREATE TABLE "One" (i int); -- stored as "One" -- Create a table with an unquoted identifier CREATE TABLE TWO(j int); -- stored as "TWO" -- These queries work SELECT * FROM "One"; -- searches for "One" SELECT * FROM two; -- searched for "TWO" SELECT * FROM "TWO"; -- searches for "TWO" -- These queries do not work SELECT * FROM One; -- searches for "ONE" SELECT * FROM "Two"; -- searches for "Two" -- Change to the all-uppercase behavior ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = true; -- Create another table with a double-quoted identifier CREATE TABLE "Three"(k int); -- stored as "THREE" -- These queries work SELECT * FROM "Two"; -- searches for "TWO" SELECT * FROM two; -- searched for "TWO" SELECT * FROM "TWO"; -- searches for "TWO" SELECT * FROM "Three"; -- searches for "THREE" SELECT * FROM three; -- searches for "THREE" -- This query does not work now - "One" is not retrievable SELECT * FROM "One"; -- searches for "ONE"
또한, 두 테이블의 식별자가 대/소문자만 다를 경우에는 매개 변수를 변경한 후 한 식별자가 다른 테이블로 확인될 수 있습니다.
-- Set the default behavior ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = false; -- Create a table with a double-quoted identifier CREATE TABLE "Tab" (i int); -- stored as "Tab" -- Create a table with an unquoted identifier CREATE TABLE TAB(j int); -- stored as "TAB" -- This query retrieves "Tab" SELECT * FROM "Tab"; -- searches for "Tab" -- Change to the all-uppercase behavior ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = true; -- This query retrieves "TAB" SELECT * FROM "Tab"; -- searches for "TAB"