식별자 요구 사항

따옴표가 없는 오브젝트 식별자:

  • 문자(A-Z, a-z) 또는 밑줄(《_》)로 시작합니다.

  • 문자, 밑줄, 10진수(0-9), 달러 기호(《$》)만 포함합니다.

  • 대문자로 저장되고 확인됩니다(예: idID 로 저장되고 확인됨).

식별자를 큰따옴표로 묶는 경우(예: 《공백과 문장 부호가 있는 내 식별자.》), 다음 규칙이 적용됩니다.

  • 식별자를 저장하고 확인할 때 식별자의 대/소문자는 그대로 보존됩니다(예: "id"id 로 저장되고 확인됨).

  • 식별자는 ASCII, 확장 ASCII, 비 ASCII 문자를 포함하고 이러한 문자로 시작할 수 있습니다.

    따옴표로 묶인 식별자 안에 큰따옴표 문자를 사용하려면 두 개의 따옴표를 사용하십시오. 예:

    create table "quote""andunquote""" ...
    
    Copy

    위와 같이 하면 아래와 같이 명명된 테이블이 생성됩니다.

    quote"andunquote"
    
    Copy

    여기서 따옴표는 이름의 일부입니다.

참고

  • 식별자가 따옴표로 묶이지 않든 큰따옴표로 묶이든 상관없이, 허용되는 최대 문자 수는 255자입니다(공백 포함).

  • 문자열 리터럴, 세션 변수 또는 바인드 변수를 사용해 식별자를 지정할 수도 있습니다. 자세한 내용은 SQL 변수 섹션을 참조하십시오.

이 항목의 내용:

따옴표가 없는 식별자

큰따옴표로 묶이지 않은 식별자는 문자나 밑줄(_)로 시작해야 하며 확장 문자나 공백을 포함할 수 없습니다.

다음은 전부 유효한 식별자의 예이지만, 이러한 식별자에 있는 문자의 대/소문자는 보존되지 않습니다.

myidentifier
MyIdentifier1
My$identifier
_my_identifier
Copy

큰따옴표로 묶인 식별자

구분 기호로 분리된 식별자(즉, 큰따옴표로 묶인 식별자)는 대/소문자를 구분하며 다음을 포함한 어떤 유효한 문자로든 시작하고 이러한 문자를 포함할 수 있습니다.

  • 숫자

  • 특수 문자(., ', !, @, #, $, %, ^, &, * 등)

  • 확장된 ASCII 문자와 ASCII 문자가 아닌 문자

  • 공백

예:

"MyIdentifier"
"my.identifier"
"my identifier"
"My 'Identifier'"
"3rd_identifier"
"$Identifier"
"идентификатор"
Copy

중요

큰따옴표로 묶인 식별자를 사용하여 오브젝트를 만드는 경우 쿼리 또는 다른 SQL 문에서 참조 시, 식별자는 큰따옴표를 포함하여 해당 식별자를 만들 때 정확하게 지정해야 합니다. 따옴표를 포함하지 않으면 Object does not exist 오류(또는 유사한 종류의 오류)가 발생할 수 있습니다.

또한, 쿼리/SQL 문에서 참조 시 전체 식별자를 따옴표로 묶어야 합니다. 이는 마침표(.)가 식별자에 사용되는 경우에 특히 중요한데, 마침표는 각 오브젝트를 구분할 목적으로 정규화된 오브젝트 이름에도 사용되기 때문입니다.

예:

"My.DB"."My.Schema"."Table.1"
Copy

예외

  • 처리기 언어가 Java, JavaScript, Snowflake Scripting 또는 SQL인 사용자 정의 함수(UDF) 및 프로시저의 이름 에는 큰따옴표로 묶인 식별자가 지원되지 않습니다.

  • 처리기 언어가 Java인 사용자 정의 함수(UDF) 및 프로시저의 이름에는 ASCII 문자만 사용할 수 있습니다.

식별자 확인

기본적으로, Snowflake는 (생성/정의 시에) 식별자를 저장하고 (쿼리 및 기타 SQL 문에서) 확인하기 위해 다음 규칙을 적용합니다.

  • 따옴표로 묶지 않은 식별자는 대문자로 저장되고 확인됩니다.

  • 큰따옴표로 묶인 식별자는 대/소문자를 포함하여 입력한 대로 정확하게 저장되고 확인됩니다.

예를 들어, 다음 네 개의 이름은 동등하며 전부 TABLENAME 으로 확인됩니다.

TABLENAME
tablename
tableName
TableName
Copy

이와는 달리, 다음 네 개의 이름은 서로 다른 고유 값으로 간주됩니다.

"TABLENAME"
"tablename"
"tableName"
"TableName"
Copy

이러한 식별자를 사용하여 같은 유형의 오브젝트(예: 테이블)를 만들면 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"
Copy

이 매개 변수는 숫자, 확장 문자, 공백과 관련하여 따옴표가 없는 식별자에 대한 제한 사항에 아무런 영향도 미치지 않습니다.

매개 변수 변경의 영향

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

또한, 두 테이블의 식별자가 대/소문자만 다를 경우에는 매개 변수를 변경한 후 한 식별자가 다른 테이블로 확인될 수 있습니다.

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