Snowflake Information Schema

Snowflake Information Schema(일명 “데이터 사전”)는 계정에서 생성된 오브젝트에 대한 광범위한 메타데이터 정보를 제공하는 시스템 정의 뷰 및 테이블 함수 세트로 구성됩니다. Snowflake Information Schema는 SQL-92 ANSI Information Schema를 기반으로 하지만, Snowflake에 특정한 뷰와 함수가 추가됩니다.

Information Schema는 Snowflake가 계정의 모든 데이터베이스에 자동으로 생성하는 INFORMATION_SCHEMA라는 스키마로 구현됩니다.

참고

ANSI는 “카탈로그”라는 용어를 사용해 데이터베이스를 지칭합니다. 표준과의 호환성을 유지하기 위해, Snowflake Information Schema 항목에서는 해당되는 경우 “데이터베이스” 대신 “카탈로그”를 사용합니다. 모든 의도와 목적에 비추어, 이들 용어는 개념적으로 같으며 서로 바꾸어 쓸 수 있습니다.

이 항목의 내용:

INFORMATION_SCHEMA이란 무엇입니까?

계정에서 생성된 각 데이터베이스는 INFORMATION_SCHEMA로 명명된 기본 제공, 읽기 전용 스키마를 자동으로 포함합니다. 스키마에는 다음과 같은 오브젝트가 있습니다.

  • 데이터베이스에 포함된 모든 오브젝트의 뷰와 계정 수준 오브젝트(즉, 역할, 웨어하우스, 데이터베이스와 같이 데이터베이스가 아닌 오브젝트)의 뷰

  • 계정 전반에 걸친 레코드 및 사용 데이터에 대한 테이블 함수.

Information Schema 뷰 및 테이블 함수

뷰 목록

INFORMATION_SCHEMA의 뷰에는 데이터베이스에 정의된 오브젝트에 대한 메타데이터뿐 아니라, 모든 데이터베이스에 공통적이고 데이터베이스가 아닌 계정 수준 오브젝트에 대한 메타데이터도 표시됩니다. INFORMATION_SCHEMA의 각 인스턴스는 다음을 포함합니다.

  • Snowflake와 관련된 데이터베이스 및 계정 수준 오브젝트의 ANSI 표준 뷰.

  • Snowflake가 지원하는 비표준 오브젝트(스테이지, 파일 형식 등)에 대해 Snowflake에 특정한 뷰.

달리 언급하지 않는 한, Snowflake Information Schema 뷰는 ANSI 표준입니다.

타입

Snowflake 관련

참고

APPLICABLE_ROLES

계정

CLASS_INSTANCE_FUNCTIONS

데이터베이스

CLASS_INSTANCE_PROCEDURES

데이터베이스

CLASS_INSTANCES

데이터베이스

CLASSES

데이터베이스

COLUMNS

데이터베이스

CURRENT_PACKAGES_POLICY

데이터베이스

DATABASES

계정

ELEMENT_TYPES

데이터베이스

ENABLED_ROLES

계정

EVENT_TABLES

데이터베이스

EXTERNAL_TABLES

데이터베이스

FIELDS

데이터베이스

FILE FORMATS

데이터베이스

FUNCTIONS

데이터베이스

HYBRID_TABLES

데이터베이스

INDEXES

데이터베이스

INDEX_COLUMNS

데이터베이스

INFORMATION_SCHEMA_CATALOG_NAME

계정

LOAD_HISTORY

계정

데이터가 14일간 보존됩니다.

OBJECT_PRIVILEGES

계정

PACKAGES

데이터베이스

PIPES

데이터베이스

PROCEDURES

데이터베이스

REFERENTIAL_CONSTRAINTS

데이터베이스

REPLICATION_DATABASES

계정

REPLICATION_GROUPS

계정

SCHEMATA

데이터베이스

SEQUENCES

데이터베이스

SERVICES

데이터베이스

STAGES

데이터베이스

TABLE_CONSTRAINTS

데이터베이스

TABLE_PRIVILEGES

데이터베이스

TABLE_STORAGE_METRICS

데이터베이스

TABLES

데이터베이스

테이블과 뷰를 표시합니다.

USAGE_PRIVILEGES

데이터베이스

시퀀스에 대한 권한만 표시합니다. 다른 유형의 오브젝트에 대한 권한을 보려면 OBJECT_PRIVILEGES를 사용하십시오.

VIEWS

데이터베이스

테이블 함수 목록

INFORMATION_SCHEMA의 테이블 함수를 사용하여 저장소, 웨어하우스, 사용자 로그인, 쿼리에 대한 계정 수준 사용 및 레코드 정보를 반환할 수 있습니다.

테이블 함수

데이터 보존

참고

AUTOMATIC_CLUSTERING_HISTORY

14일

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

AUTO_REFRESH_REGISTRATION_HISTORY

14일

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

COMPLETE_TASK_GRAPHS

60분

ACCOUNTADMIN 역할, 작업 소유자(즉, 작업에 대한 OWNERSHIP 권한이 있는 역할) 또는 전역 MONITOR EXECUTION 권한이 있는 역할에 대해서만 결과가 반환됩니다.

COPY_HISTORY

14일

결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다.

CURRENT_TASK_GRAPHS

N/A

ACCOUNTADMIN 역할, 작업 소유자(즉, 작업에 대한 OWNERSHIP 권한이 있는 역할) 또는 전역 MONITOR EXECUTION 권한이 있는 역할에 대해서만 결과가 반환됩니다.

DATA_TRANSFER_HISTORY

14일

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

DATABASE_REFRESH_HISTORY

14일

결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다.

DATABASE_REFRESH_PROGRESS , DATABASE_REFRESH_PROGRESS_BY_JOB

14일

결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다.

DATABASE_REPLICATION_USAGE_HISTORY

14일

ACCOUNTADMIN 역할에 대해서만 결과가 반환됩니다.

DATABASE_STORAGE_USAGE_HISTORY

6개월

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

DYNAMIC_TABLE_GRAPH_HISTORY

N/A

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

DYNAMIC_TABLE_REFRESH_HISTORY

1일

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

EXTERNAL_FUNCTIONS_HISTORY

14일

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

EXTERNAL_TABLE_FILES

N/A

결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다.

EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY

30일

결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다.

LOGIN_HISTORY , LOGIN_HISTORY_BY_USER

7일

결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다.

MATERIALIZED_VIEW_REFRESH_HISTORY

14일

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

NOTIFICATION_HISTORY

14일

통합에 대한 ACCOUNTADMIN 역할, 통합 소유자(즉, 통합에 대한 OWNERSHIP 권한이 있는 역할) 또는 USAGE 권한이 있는 역할에 대해서만 결과가 반환됩니다.

PIPE_USAGE_HISTORY

14일

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

POLICY_REFERENCES

N/A

ACCOUNTADMIN 역할에 대해서만 결과가 반환됩니다.

QUERY_ACCELERATION_HISTORY

14일

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

QUERY_HISTORY , QUERY_HISTORY_BY_*

7일

결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다.

REPLICATION_GROUP_REFRESH_HISTORY

14일

복제 또는 장애 조치 그룹에 대한 권한이 있는 역할에 대해서만 결과가 반환됩니다.

REPLICATION_GROUP_REFRESH_PROGRESS, REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB

14일

복제 또는 장애 조치 그룹에 대한 권한이 있는 역할에 대해서만 결과가 반환됩니다.

REPLICATION_GROUP_USAGE_HISTORY

14일

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

REPLICATION_USAGE_HISTORY

14일

ACCOUNTADMIN 역할에 대해서만 결과가 반환됩니다.

REST_EVENT_HISTORY

7일

ACCOUNTADMIN 역할에 대해서만 결과가 반환됩니다.

SEARCH_OPTIMIZATION_HISTORY

14일

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

SERVERLESS_TASK_HISTORY

14일

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

STAGE_DIRECTORY_FILE_REGISTRATION_HISTORY

14일

결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다.

STAGE_STORAGE_USAGE_HISTORY

6개월

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

TAG_REFERENCES

N/A

지정된 오브젝트에 액세스할 권한이 있는 역할에 대해서만 결과가 반환됩니다.

TAG_REFERENCES_ALL_COLUMNS

N/A

지정된 오브젝트에 액세스할 권한이 있는 역할에 대해서만 결과가 반환됩니다.

TASK_DEPENDENTS

N/A

ACCOUNTADMIN 역할 또는 작업 소유자(작업에 대한 OWNERSHIP 권한을 가진 역할)에 대해서만 결과가 반환됩니다.

TASK_HISTORY

7일

ACCOUNTADMIN 역할, 작업 소유자(즉, 작업에 대한 OWNERSHIP 권한이 있는 역할) 또는 전역 MONITOR EXECUTION 권한이 있는 역할에 대해서만 결과가 반환됩니다.

VALIDATE_PIPE_LOAD

14일

결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다.

WAREHOUSE_LOAD_HISTORY

14일

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

WAREHOUSE_METERING_HISTORY

6개월

결과는 MONITOR USAGE 권한에 따라 다릅니다. [1]

[1] 역할에 MONITOR USAGE 전역 권한이 할당된 경우 결과를 반환하며, 그렇지 않으면 ACCOUNTADMIN 역할에 대한 결과만 반환합니다.

일반적인 사용법 노트

  • 각 INFORMATION_SCHEMA 스키마는 읽기 전용입니다(즉, 스키마와 스키마의 모든 뷰 및 테이블 함수를 수정하거나 삭제할 수 없음).

  • INFORMATION_SCHEMA 뷰에 대한 쿼리는 동시 DDL에 관한 일관성을 보장하지 않습니다. 예를 들어, 장기 실행 INFORMATION_SCHEMA 쿼리가 실행되는 동안 테이블 세트가 생성되는 경우 쿼리 결과에 생성된 테이블 중 일부나 전부가 포함되거나 전혀 포함되지 않을 수 있습니다.

  • 뷰 또는 테이블 함수의 출력은 사용자의 현재 역할에 부여된 권한에 따라 다릅니다. INFORMATION_SCHEMA 뷰 또는 테이블 함수를 쿼리할 때 현재 역할에 액세스 권한이 부여된 오브젝트만 반환됩니다.

  • 성능 문제를 방지하기 위해 INFORMATION_SCHEMA 쿼리에 지정된 필터가 충분히 선택적이지 않은 경우 다음 오류가 반환됩니다.

    Information schema query returned too much data. Please repeat query with more selective predicates.

  • Snowflake 관련 뷰는 변경될 수 있습니다. 이러한 뷰에서 모든 열을 선택하지 마십시오. 대신, 원하는 열을 선택하십시오. 예를 들어, name 열을 원하면 SELECT * 대신 SELECT name 을 사용하십시오.

Information Schema 뷰는 사전에서 오브젝트의 작은 서브세트를 검색하는 쿼리에 최적화되어 있습니다. 가능하면 항상 스키마 및 오브젝트 이름을 필터링하여 쿼리 성능을 최대화하십시오.

자세한 사용 정보와 세부 정보는 Snowflake Information Schema 블로그 게시물 을 참조하십시오.

SHOW 명령을 Information Schema 뷰로 바꾸기 위한 고려 사항

INFORMATION_SCHEMA 뷰는 SHOW <오브젝트> 명령으로 제공되는 같은 정보에 대한 SQL 인터페이스를 제공합니다. 뷰를 사용하여 이러한 명령을 바꿀 수 있지만, 전환하기 전에 고려해야 할 몇 가지 주요 차이점이 있습니다.

고려 사항

SHOW 명령

Information Schema 뷰

웨어하우스

실행할 필요가 없습니다.

뷰를 쿼리하려면 웨어하우스가 현재 실행 중이며 사용되고 있어야 합니다.

패턴 일치/필터링

대/소문자를 구분하지 않습니다(LIKE를 사용하여 필터링할 때).

표준(대/소문자 구분) SQL 의미 체계. Snowflake는 따옴표가 없고 대/소문자를 구분하지 않는 식별자를 내부적으로 대문자로 자동으로 변환하므로, Information Schema 뷰에서 따옴표가 없는 오브젝트 이름을 대문자로 쿼리해야 합니다.

쿼리 결과

대부분의 SHOW 명령은 기본적으로 결과를 현재 스키마로 제한합니다.

뷰는 현재/지정된 데이터베이스의 모든 오브젝트를 표시합니다. 특정 스키마에 대해 쿼리하려면 필터 조건자(예: ... WHERE table_schema = CURRENT_SCHEMA()...)를 사용해야 합니다. 충분히 선택적인 필터가 없는 Information Schema 쿼리는 오류를 반환하고 실행되지 않습니다(이 항목의 일반적인 사용법 노트 참조).

쿼리에서 Information Schema 뷰와 테이블 함수의 이름 정규화하기

INFORMATION_SCHEMA 뷰 또는 테이블 함수를 쿼리할 때 뷰/테이블 함수의 정규화된 이름을 사용해야 합니다. 또는 INFORMATION_SCHEMA 스키마가 세션에 사용 중이어야 합니다.

예:

  • database.information_schema.name 의 형식으로 뷰와 테이블 함수의 정규화된 이름을 사용하여 쿼리하는 방법은 다음과 같습니다.

    SELECT table_name, comment FROM testdb.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'PUBLIC' ... ;
    
    SELECT event_timestamp, user_name FROM TABLE(testdb.INFORMATION_SCHEMA.LOGIN_HISTORY( ... ));
    
    Copy
  • information_schema.name 의 형식으로 뷰와 테이블 함수의 정규화된 이름을 사용하여 쿼리하는 방법은 다음과 같습니다.

    USE DATABASE testdb;
    
    SELECT table_name, comment FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'PUBLIC' ... ;
    
    SELECT event_timestamp, user_name FROM TABLE(INFORMATION_SCHEMA.LOGIN_HISTORY( ... ));
    
    Copy
  • 세션에 사용 중인 INFORMATION_SCHEMA 스키마로 쿼리하는 방법은 다음과 같습니다.

    USE SCHEMA testdb.INFORMATION_SCHEMA;
    
    SELECT table_name, comment FROM TABLES WHERE TABLE_SCHEMA = 'PUBLIC' ... ;
    
    SELECT event_timestamp, user_name FROM TABLE(LOGIN_HISTORY( ... ));
    
    Copy

    참고

    공유에서 생성된 데이터베이스를 사용 중이고 INFORMATION_SCHEMA를 세션의 현재 스키마로 선택한 경우 SELECT 문은 다음 오류가 발생하며 실패할 수 있습니다.

    INFORMATION_SCHEMA does not exist or is not authorized

    이 경우에는 세션의 현재 스키마에 대해 다른 스키마를 선택하십시오.

자세한 예는 각 뷰/테이블 함수에 대한 참조 설명서를 확인하십시오.