Snowflake Information Schema

Snowflake Information Schema

Snowflake Information Schema("데이터 사전"이라고도 함)는 계정에 생성된 객체에 대한 폭넓은 메타데이터 정보를 제공하는 시스템 정의 뷰와 테이블 함수의 집합으로 구성됩니다. Snowflake Information Schema는 SQL-92 ANSI Information Schema를 기반으로 하지만, Snowflake에 특화된 뷰와 함수가 추가되어 있습니다.

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

참고: ANSI는 데이터베이스를 가리키는 용어로 "catalog"를 사용합니다. 표준과의 호환성을 유지하기 위해 Snowflake Information Schema 주제는 해당하는 곳에서 "database" 대신 "catalog"를 사용합니다. 모든 의도와 목적에 있어 두 용어는 개념적으로 동등하며 상호 교환 가능합니다.

출처: Snowflake SQL Reference

본문

INFORMATION_SCHEMA란 무엇인가?

계정에 생성된 각 데이터베이스는 INFORMATION_SCHEMA라는 이름의 내장 읽기 전용 스키마를 자동으로 포함합니다. 이 스키마는 다음 객체를 포함합니다.

  • 데이터베이스에 포함된 모든 객체에 대한 뷰, 그리고 계정 수준 객체(즉, 역할, 웨어하우스, 데이터베이스 같은 비-데이터베이스 객체)에 대한 뷰.
  • 계정 전반의 기록·사용 데이터를 위한 테이블 함수.

Information Schema 뷰 목록

INFORMATION_SCHEMA의 뷰는 데이터베이스에 정의된 객체뿐 아니라 모든 데이터베이스에 공통인 비-데이터베이스, 계정 수준 객체에 대한 메타데이터를 표시합니다. 각 INFORMATION_SCHEMA 인스턴스는 다음을 포함합니다.

  • Snowflake와 관련된 데이터베이스·계정 수준 객체에 대한 ANSI 표준 뷰.
  • Snowflake가 지원하는 비표준 객체(스테이지, 파일 형식 등)에 대한 Snowflake 특화 뷰.

Snowflake 특화(즉, ANSI 표준이 아닌) Information Schema 뷰는 아래 표의 "Snowflake-specific" 컬럼에서 ✔로 표시됩니다.

유형 Snowflake 특화 비고
APPLICABLE_ROLES Account
APPLICATION_CONFIGURATIONS Database
APPLICATION_SPECIFICATIONS Database
CHECK_CONSTRAINTS Database
CLASS_INSTANCE_FUNCTIONS Database
CLASS_INSTANCE_PROCEDURES Database
CLASS_INSTANCES Database
CLASSES Database
COLUMNS Database
CORTEX_SEARCH_SERVICE Database
CORTEX_SEARCH_SERVICE_SCORING_PROFILES Database
CURRENT_PACKAGES_POLICY Database
DATABASES Account
ELEMENT_TYPES Database
ENABLED_ROLES Account
EVENT_TABLES Database
EXTERNAL_TABLES Database
FIELDS Database
FILE FORMATS Database
FUNCTIONS Database
HYBRID_TABLES Database
INDEXES Database
INDEX_COLUMNS Database
INFORMATION_SCHEMA_CATALOG_NAME Account
LISTINGS Account
LOAD_HISTORY Account 데이터가 14일 동안 보존됩니다.
MODEL_VERSIONS Database
OBJECT_PRIVILEGES Account
PACKAGES Database
PIPES Database
PROCEDURES Database
REFERENTIAL_CONSTRAINTS Database
REPLICATION_DATABASES Account
REPLICATION_GROUPS Account
SCHEMATA Database
SEMANTIC_DIMENSIONS Database
SEMANTIC_FACTS Database
SEMANTIC_METRICS Database
SEMANTIC_RELATIONSHIPS Database
SEMANTIC_TABLES Database
SEMANTIC_VIEW Database
SEQUENCES Database
SERVICES Database
SHARES Account
STAGES Database
TABLE_CONSTRAINTS Database
TABLE_PRIVILEGES Database
TABLE_STORAGE_METRICS Database
TABLES Database 테이블과 뷰를 표시합니다.
TYPES Database
USAGE_PRIVILEGES Database 시퀀스에 대한 권한만 표시합니다. 다른 유형의 객체에 대한 권한을 보려면 OBJECT_PRIVILEGES를 사용하세요.
VIEWS Database

Information Schema 테이블 함수 목록

INFORMATION_SCHEMA의 테이블 함수는 스토리지, 웨어하우스, 사용자 로그인, 쿼리에 대한 계정 수준 사용·기록 정보를 반환하는 데 사용할 수 있습니다.

테이블 함수 데이터 보존 비고
ALERT_HISTORY 14일 결과는 MONITOR USAGE 권한에 따라 달라집니다. [1]
APPLICATION_CALLBACK_HISTORY 365일 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다.
APPLICATION_CONFIGURATION_VALUE_HISTORY 365일 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다.
APPLICATION_SPECIFICATION_STATUS_HISTORY 365일 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다.
AUTOMATIC_CLUSTERING_HISTORY 14일 결과는 MONITOR USAGE 권한에 따라 달라집니다. [1]
AUTO_REFRESH_REGISTRATION_HISTORY 14일 결과는 MONITOR USAGE 권한에 따라 달라집니다. [1]
AVAILABLE_LISTINGS N/A 소비자가 발견하고 접근할 수 있는 모든 리스팅에 대해 결과가 반환됩니다.
AVAILABLE_LISTING_REFRESH_HISTORY 14일 사용 가능한 리스팅 또는 마운트된 데이터베이스에 권한이 있는 리스팅 소비자에게만 결과가 반환됩니다.
COMPLETE_TASK_GRAPHS 60분 ACCOUNTADMIN 역할, 태스크 소유자(즉, 태스크에 대한 OWNERSHIP 권한을 가진 역할), 또는 전역 MONITOR EXECUTION 권한을 가진 역할에 대해서만 결과가 반환됩니다.
COPY_HISTORY 14일 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다.
CORTEX_SEARCH_REFRESH_HISTORY 7일 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다.
CURRENT_TASK_GRAPHS N/A ACCOUNTADMIN 역할, 태스크 소유자, 또는 전역 MONITOR EXECUTION 권한을 가진 역할에 대해서만 결과가 반환됩니다.
DATA_METRIC_FUNCTION_REFERENCES N/A 결과는 사용자의 현재 역할에 할당된 권한 또는 데이터베이스 역할에 따라 달라집니다.
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]
DBT_PROJECT_EXECUTION_HISTORY 7일 결과는 MONITOR, OWNERSHIP 또는 USAGE 권한에 따라 달라집니다.
DCM_DEPLOYMENT_HISTORY 7일 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다.
DYNAMIC_TABLES 7일 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다. 자세한 내용은 Dynamic table access control 참고. [1]
DYNAMIC_TABLE_GRAPH_HISTORY 7일 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다. 자세한 내용은 Dynamic table access control 참고. [1]
DYNAMIC_TABLE_REFRESH_HISTORY 7일 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다. 자세한 내용은 Dynamic table access control 참고. [1]
EXTERNAL_FUNCTIONS_HISTORY 14일 결과는 MONITOR USAGE 권한에 따라 달라집니다. [1]
EXTERNAL_TABLE_FILES N/A 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다.
EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY 30일 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다.
ICEBERG_TABLE_FILES 다양함 결과는 테이블에 설정된 DATA_RETENTION_TIME_IN_DAYS 파라미터 값에 따라 달라집니다. 자세한 내용은 Metadata and retention for Apache Iceberg™ tables 참고.
ICEBERG_TABLE_SNAPSHOT_REFRESH_HISTORY 다양함 결과는 테이블에 설정된 DATA_RETENTION_TIME_IN_DAYS 파라미터 값에 따라 달라집니다. 자세한 내용은 Metadata and retention for Apache Iceberg™ tables 참고.
LISTING_REFRESH_HISTORY 14일 Listing Auto-Fulfillment에 대한 권한이 있는 역할에 대해서만 결과가 반환됩니다.
LOGIN_HISTORY, LOGIN_HISTORY_BY_USER 7일 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다.
MATERIALIZED_VIEW_REFRESH_HISTORY 14일 결과는 MONITOR USAGE 권한에 따라 달라집니다. [1]
NOTIFICATION_HISTORY 14일 ACCOUNTADMIN 역할, 통합 소유자(즉, 통합에 대한 OWNERSHIP 권한을 가진 역할), 또는 통합에 대한 USAGE 권한을 가진 역할에 대해서만 결과가 반환됩니다.
ONLINE_FEATURE_TABLE_REFRESH_HISTORY 7일 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다.
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_DANGLING_REFERENCES N/A
REPLICATION_GROUP_REFRESH_HISTORY, REPLICATION_GROUP_REFRESH_HISTORY_ALL 14일 복제 또는 페일오버 그룹에 대한 권한이 있는 역할에 대해서만 결과가 반환됩니다.
REPLICATION_GROUP_REFRESH_PROGRESS, REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB, REPLICATION_GROUP_REFRESH_PROGRESS_ALL 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_ALERT_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]
STORAGE_LIFECYCLE_POLICY_HISTORY 14일 결과는 사용자의 현재 역할에 할당된 권한에 따라 달라집니다.
TAG_REFERENCES N/A 지정된 객체에 접근할 수 있는 역할에 대해서만 결과가 반환됩니다.
TAG_REFERENCES_ALL_COLUMNS N/A 지정된 객체에 접근할 수 있는 역할에 대해서만 결과가 반환됩니다.
TASK_DEPENDENTS N/A ACCOUNTADMIN 역할 또는 태스크 소유자(태스크에 대한 OWNERSHIP 권한을 가진 역할)에 대해서만 결과가 반환됩니다.
TASK_HISTORY 7일 ACCOUNTADMIN 역할, 태스크 소유자, 또는 전역 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 뷰
웨어하우스 (Warehouses) 실행에 필요하지 않음. 뷰를 조회하려면 웨어하우스가 실행 중이고 현재 사용 중이어야 합니다.
패턴 일치/필터링 (Pattern matching/filtering) 대소문자 무시(LIKE로 필터링할 때). 표준(대소문자 구분) SQL 의미론. Snowflake는 따옴표 없는 대소문자 무시 식별자를 내부적으로 자동으로 대문자로 변환하므로, 따옴표 없는 객체 이름은 Information Schema 뷰에서 대문자로 조회해야 합니다.
쿼리 결과 (Query results) 대부분의 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( ... ));
  • 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( ... ));
  • 세션에서 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( ... ));

참고: 공유(share)에서 만든 데이터베이스를 사용 중이고 INFORMATION_SCHEMA를 세션의 현재 스키마로 선택했다면, SELECT 문장이 INFORMATION_SCHEMA does not exist or is not authorized 오류와 함께 실패할 수 있습니다. 이런 경우 세션의 현재 스키마로 다른 스키마를 선택하세요.

더 자세한 예는 각 뷰/테이블 함수의 참조 문서를 참고하세요.

더 알아보기 (Learn more)