식별자 요구 사항¶
- 문자(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
따옴표로 묶지 않은 식별자는 대문자로 저장되고 확인 됩니다. 따라서 따옴표로 묶지 않은 식별자는 이름이 동일한 대문자로 시작하고 큰따옴표로 묶은 식별자와 동일합니다. 예를 들어, 다음 두 명령은 동일한 테이블을 생성하려고 시도합니다.
CREATE TABLE mytable(c1 INT, c2 INT);
+-------------------------------------+
| status                              |
|-------------------------------------|
| Table MYTABLE successfully created. |
+-------------------------------------+
CREATE TABLE "MYTABLE"(c1 INT, c2 INT);
002002 (42710): SQL compilation error:
Object 'MYTABLE' already exists.
큰따옴표로 묶인 식별자¶
구분 기호로 분리된 식별자(즉, 큰따옴표로 묶인 식별자)는 대/소문자를 구분하며 다음을 포함한 어떤 유효한 문자로든 시작하고 이러한 문자를 포함할 수 있습니다.
- 숫자 
- 특수 문자( - .,- ',- !,- @,- #,- $,- %,- ^,- &,- *등)
- 확장된 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"