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 관련 |
참고 |
---|---|---|---|
계정 |
|||
데이터베이스 |
✔ |
||
데이터베이스 |
✔ |
||
데이터베이스 |
✔ |
||
데이터베이스 |
✔ |
||
데이터베이스 |
|||
데이터베이스 |
✔ |
||
계정 |
✔ |
||
데이터베이스 |
|||
계정 |
|||
데이터베이스 |
✔ |
||
데이터베이스 |
✔ |
||
데이터베이스 |
|||
데이터베이스 |
✔ |
||
데이터베이스 |
|||
데이터베이스 |
✔ |
||
데이터베이스 |
✔ |
||
데이터베이스 |
✔ |
||
계정 |
|||
계정 |
✔ |
데이터가 14일간 보존됩니다. |
|
계정 |
|||
데이터베이스 |
✔ |
||
데이터베이스 |
✔ |
||
데이터베이스 |
✔ |
||
데이터베이스 |
|||
계정 |
✔ |
||
계정 |
✔ |
||
데이터베이스 |
|||
데이터베이스 |
|||
데이터베이스 |
✔ |
||
데이터베이스 |
✔ |
||
데이터베이스 |
|||
데이터베이스 |
|||
데이터베이스 |
✔ |
||
데이터베이스 |
테이블과 뷰를 표시합니다. |
||
데이터베이스 |
시퀀스에 대한 권한만 표시합니다. 다른 유형의 오브젝트에 대한 권한을 보려면 OBJECT_PRIVILEGES를 사용하십시오. |
||
데이터베이스 |
테이블 함수 목록¶
INFORMATION_SCHEMA의 테이블 함수를 사용하여 저장소, 웨어하우스, 사용자 로그인, 쿼리에 대한 계정 수준 사용 및 레코드 정보를 반환할 수 있습니다.
테이블 함수 |
데이터 보존 |
참고 |
---|---|---|
14일 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
14일 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
60분 |
ACCOUNTADMIN 역할, 작업 소유자(즉, 작업에 대한 OWNERSHIP 권한이 있는 역할) 또는 전역 MONITOR EXECUTION 권한이 있는 역할에 대해서만 결과가 반환됩니다. |
|
14일 |
결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다. |
|
N/A |
ACCOUNTADMIN 역할, 작업 소유자(즉, 작업에 대한 OWNERSHIP 권한이 있는 역할) 또는 전역 MONITOR EXECUTION 권한이 있는 역할에 대해서만 결과가 반환됩니다. |
|
14일 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
14일 |
결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다. |
|
DATABASE_REFRESH_PROGRESS , DATABASE_REFRESH_PROGRESS_BY_JOB |
14일 |
결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다. |
14일 |
ACCOUNTADMIN 역할에 대해서만 결과가 반환됩니다. |
|
6개월 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
N/A |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
1일 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
14일 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
N/A |
결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다. |
|
30일 |
결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다. |
|
7일 |
결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다. |
|
14일 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
14일 |
통합에 대한 ACCOUNTADMIN 역할, 통합 소유자(즉, 통합에 대한 OWNERSHIP 권한이 있는 역할) 또는 USAGE 권한이 있는 역할에 대해서만 결과가 반환됩니다. |
|
14일 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
N/A |
ACCOUNTADMIN 역할에 대해서만 결과가 반환됩니다. |
|
14일 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
7일 |
결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다. |
|
14일 |
복제 또는 장애 조치 그룹에 대한 권한이 있는 역할에 대해서만 결과가 반환됩니다. |
|
REPLICATION_GROUP_REFRESH_PROGRESS, REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB |
14일 |
복제 또는 장애 조치 그룹에 대한 권한이 있는 역할에 대해서만 결과가 반환됩니다. |
14일 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
14일 |
ACCOUNTADMIN 역할에 대해서만 결과가 반환됩니다. |
|
7일 |
ACCOUNTADMIN 역할에 대해서만 결과가 반환됩니다. |
|
14일 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
14일 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
14일 |
결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다. |
|
6개월 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
N/A |
지정된 오브젝트에 액세스할 권한이 있는 역할에 대해서만 결과가 반환됩니다. |
|
N/A |
지정된 오브젝트에 액세스할 권한이 있는 역할에 대해서만 결과가 반환됩니다. |
|
N/A |
ACCOUNTADMIN 역할 또는 작업 소유자(작업에 대한 OWNERSHIP 권한을 가진 역할)에 대해서만 결과가 반환됩니다. |
|
7일 |
ACCOUNTADMIN 역할, 작업 소유자(즉, 작업에 대한 OWNERSHIP 권한이 있는 역할) 또는 전역 MONITOR EXECUTION 권한이 있는 역할에 대해서만 결과가 반환됩니다. |
|
14일 |
결과는 사용자의 현재 역할에 할당된 권한에 따라 다릅니다. |
|
14일 |
결과는 MONITOR USAGE 권한에 따라 다릅니다. [1] |
|
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 명령은 기본적으로 결과를 현재 스키마로 제한합니다. |
뷰는 현재/지정된 데이터베이스의 모든 오브젝트를 표시합니다. 특정 스키마에 대해 쿼리하려면 필터 조건자(예: |
쿼리에서 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( ... ));
참고
공유에서 생성된 데이터베이스를 사용 중이고 INFORMATION_SCHEMA를 세션의 현재 스키마로 선택한 경우 SELECT 문은 다음 오류가 발생하며 실패할 수 있습니다.
INFORMATION_SCHEMA does not exist or is not authorized
이 경우에는 세션의 현재 스키마에 대해 다른 스키마를 선택하십시오.
자세한 예는 각 뷰/테이블 함수에 대한 참조 설명서를 확인하십시오.