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"를 사용합니다. 모든 의도와 목적에 있어 두 용어는 개념적으로 동등하며 상호 교환 가능합니다.
본문
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오류와 함께 실패할 수 있습니다. 이런 경우 세션의 현재 스키마로 다른 스키마를 선택하세요.
더 자세한 예는 각 뷰/테이블 함수의 참조 문서를 참고하세요.