SHOW TABLES
SHOW TABLES
액세스 권한이 있는 테이블을 나열하는 명령이에요. Time Travel 보존 기간 안에 있어 언드롭(undrop)할 수 있는 드롭된 테이블도 포함해요. 현재/지정한 데이터베이스·스키마 또는 전체 계정의 테이블을 나열하는 데 사용할 수 있어요.
출처: 문서
본문
액세스 권한이 있는 테이블을 나열해요. 여기에는 Time Travel 보존 기간 안에 있어 언드롭할 수 있는 드롭된 테이블도 포함돼요. 이 명령을 사용해 현재/지정한 데이터베이스·스키마 또는 전체 계정의 테이블을 나열할 수 있어요. 출력은 테이블 메타데이터와 속성을 데이터베이스, 스키마, 테이블 이름 기준 사전순으로 반환해요. 제공된 필터로 결과를 필터링하려면 이 점을 유의해야 해요.
구문
SHOW [ TERSE ] TABLES [ HISTORY ] [ LIKE '<pattern>' ]
[ IN
{
ACCOUNT |
DATABASE |
DATABASE <database_name> |
SCHEMA |
SCHEMA <schema_name> |
<schema_name>
APPLICATION <application_name> |
APPLICATION PACKAGE <application_package_name> |
}
]
[ STARTS WITH '<name_string>' ]
[ LIMIT <rows> [ FROM '<name_string>' ] ]
매개변수
TERSE
선택적으로 출력 컬럼의 부분집합만 반환해요: created_on, name, kind(kind 컬럼 값은 항상 TABLE), database_name, schema_name. 기본값: 값 없음(모든 컬럼이 출력에 포함됨).
HISTORY
선택적으로 아직 퍼지(purge)되지 않은(즉 각자의 Time Travel 보존 기간 안에 있는) 드롭된 테이블을 포함해요. 드롭된 테이블의 버전이 여러 개 존재하면 출력은 각 버전에 대해 행을 표시해요. 출력에는 추가 dropped_on 컬럼도 포함되는데, 이 컬럼은 드롭된 테이블의 날짜와 타임스탬프, 활성 테이블의 NULL을 표시해요. 기본값: 값 없음(드롭된 테이블은 출력에 포함되지 않음).
LIKE 'pattern'
선택적으로 객체 이름으로 명령 출력을 필터링해요. 필터는 SQL 와일드카드 문자(%와 _)를 지원하며 대소문자를 구분하지 않는 패턴 매칭을 사용해요. 예를 들어 다음 패턴들은 같은 결과를 반환해요:
... LIKE '%testing%' ...
... LIKE '%TESTING%' ...
기본값: 값 없음(출력에 필터링이 적용되지 않음).
[ IN ... ]
선택적으로 명령의 범위를 지정해요. 다음 중 하나를 지정해요:
- ACCOUNT: 전체 계정에 대한 레코드를 반환해요.
- DATABASE, DATABASE db_name: 현재 사용 중인 데이터베이스 또는 지정한 데이터베이스(db_name)에 대한 레코드를 반환해요. DATABASE를 db_name 없이 지정했는데 사용 중인 데이터베이스가 없으면 이 키워드는 출력에 영향을 주지 않아요.
- SCHEMA, SCHEMA schema_name: 현재 사용 중인 스키마 또는 지정한 스키마(schema_name)에 대한 레코드를 반환해요. SCHEMA는 데이터베이스를 사용 중이거나 정규화된 schema_name(예: db.schema)을 지정한 경우 선택 사항이에요. 사용 중인 데이터베이스가 없으면 SCHEMA를 지정해도 출력에 영향을 주지 않아요.
- APPLICATION application_name, APPLICATION PACKAGE application_package_name: 이름이 지정된 Snowflake Native App 또는 애플리케이션 패키지에 대한 레코드를 반환해요.
IN ... 을 생략하면 명령의 범위는 세션이 현재 사용 중인 데이터베이스가 있는지에 따라 달라져요:
- 데이터베이스를 현재 사용 중이면, 명령은 데이터베이스에서 볼 권한이 있는 객체를 반환해요. 이는
IN DATABASE를 지정한 것과 같은 효과예요. - 사용 중인 데이터베이스가 없으면, 명령은 계정에서 볼 권한이 있는 객체를 반환해요. 이는
IN ACCOUNT를 지정한 것과 같은 효과예요.
참고: 데이터베이스 컨텍스트에서 IN 절 없이 SHOW 명령을 사용하면 예상보다 적은 결과가 나올 수 있어요. IN 절을 사용하지 않으면 같은 이름의 객체는 한 번만 표시돼요.
STARTS WITH 'name_string'
선택적으로 객체 이름의 시작 부분에 나타나는 문자를 기준으로 명령 출력을 필터링해요. 문자열은 작은따옴표로 묶어야 하고 대소문자를 구분해요. 예를 들어 다음 문자열들은 다른 결과를 반환해요:
... STARTS WITH 'B' ...
... STARTS WITH 'b' ...
기본값: 값 없음(출력에 필터링이 적용되지 않음).
LIMIT
선택적으로 반환되는 최대 행 수를 제한하면서 결과의 "페이지 매김"도 가능하게 해요. 선택적 FROM 'name_string' 하위 절은 결과의 "커서" 역할을 해요. 문자열은 작은따옴표로 묶어야 하고 대소문자를 구분해요. 전체 객체 이름을 포함할 필요는 없고 부분 이름도 지원돼요. 기본값: 값 없음(출력에 제한이 적용되지 않음).
참고:
FROM 'name_string'과STARTS WITH 'name_string'절을 모두 지원하는 SHOW 명령에서는 같은 문장에서 두 절을 모두 조합할 수 있어요. 그러나 두 조건이 모두 충족되어야 하며, 그렇지 않으면 서로 상쇄되어 결과가 반환되지 않아요. 또한 객체는 이름으로 사전순으로 반환되므로 FROM 'name_string'은 STARTS WITH 'name_string'이 반환한 행보다 사전순 값이 더 높은 행만 반환해요.
출력
명령 출력은 테이블 속성과 메타데이터를 다음 컬럼으로 제공해요:
| 컬럼 | 설명 |
|---|---|
| created_on | 테이블이 생성된 날짜와 시각이에요. |
| name | 테이블의 이름이에요. |
| database_name | 테이블이 저장된 데이터베이스예요. |
| schema_name | 테이블이 저장된 스키마예요. |
| kind | 테이블 유형이에요: TABLE(영구 테이블용), TEMPORARY, TRANSIENT. |
| comment | 테이블에 대한 주석이에요. |
| cluster_by | 테이블의 클러스터링 키로 정의된 컬럼이에요. |
| rows | 테이블의 행 수예요. 외부 테이블에는 NULL을 반환해요. |
| bytes | 쿼리에서 전체 테이블을 스캔하면 스캔될 바이트 수예요. 이 숫자는 테이블의 실제 물리적 바이트(디스크에 저장된 바이트)와 다를 수 있다는 점에 주의해요. |
| owner | 테이블을 소유하는 역할이에요. |
| retention_time | 수정·삭제된 데이터가 Time Travel을 위해 보존되는 일 수예요. |
| dropped_on | 테이블이 드롭된 날짜와 시각이에요. 테이블이 활성이면 NULL이에요. 이 컬럼은 명령에 HISTORY 키워드를 지정한 경우에만 표시돼요. |
| automatic_clustering | 계정에 Automatic Clustering이 활성화되어 있으면, 테이블에 대해 명시적으로 활성화(ON)되었는지 비활성화(OFF)되었는지 지정해요. 계정에 Automatic Clustering이 활성화되어 있지 않으면 이 컬럼은 표시되지 않아요. |
| change_tracking | ON이면 변경 추적이 활성화된 거예요. 이 변경 추적 데이터는 스트림이나 SELECT 문의 CHANGES 절을 사용해 쿼리할 수 있어요. OFF이면 현재 비활성화되었지만 활성화할 수 있어요. |
| search_optimization | ON이면 테이블에 검색 최적화 서비스가 활성화되어 있어요. 그렇지 않으면 값은 OFF예요. |
| search_optimization_progress | 검색을 위해 최적화된 테이블의 백분율이에요. 이 값은 테이블에 최적화를 처음 추가할 때와 검색 최적화 서비스에 유지 관리가 수행될 때 증가해요. 새로 최적화된 테이블의 검색 최적화 성능 향상을 측정하기 전에, 테이블이 완전히 최적화되었음을 이 값이 보여 줄 때까지 기다려요. |
| search_optimization_bytes | 검색 최적화 서비스가 이 테이블에 대해 소비하는 추가 스토리지 바이트 수예요. |
| is_external | 외부 테이블이면 Y, 그렇지 않으면 N이에요. |
| enable_schema_evolution | 테이블에 스키마 진화가 활성화되어 있으면 Y, 그렇지 않으면 N이에요. CREATE TABLE 또는 ALTER TABLE 명령으로 자동 테이블 스키마 진화를 활성화할 수 있어요. |
| owner_role_type | 객체를 소유하는 역할의 유형으로, 예를 들어 ROLE이에요. Snowflake Native App이 객체를 소유하면 값은 APPLICATION이에요. 객체를 삭제하면 삭제된 객체에는 소유 역할이 없으므로 Snowflake는 NULL을 반환해요. |
| is_event | 이벤트 테이블이면 Y, 그렇지 않으면 N이에요. |
| is_hybrid | 하이브리드 테이블이면 Y, 그렇지 않으면 N이에요. |
| is_iceberg | Apache Iceberg™ 테이블이면 Y, 그렇지 않으면 N이에요. |
| is_immutable | READ ONLY 속성으로 생성된 테이블이면 Y, 그렇지 않으면 N이에요. |
테이블에 지정할 수 있는 속성에 대한 자세한 내용은 CREATE TABLE을 참고해요.
클론된 테이블과 데이터가 삭제된 테이블의 경우, 표시된 bytes가 테이블의 물리적 바이트와 다를 수 있어요:
- 클론된 테이블은 새 행이 추가되거나 기존 행이 수정·삭제될 때까지 추가 데이터 스토리지를 사용하지 않아요. 테이블에 변경이 거의 없거나 없으면, 표시된 바이트 수가 실제 저장된 물리적 바이트보다 많아요.
- 테이블에서 삭제된 데이터는 Time Travel 보존 기간(기본 1일)과 Fail-safe 기간(7일)이 모두 지날 때까지 Snowflake에 유지돼요. 이 두 기간 동안 표시된 바이트 수가 실제 저장된 물리적 바이트보다 적어요.
클로닝, Time Travel, Fail-safe와 관련된 바이트 단위 테이블 크기에 대한 자세한 내용은 TABLE_STORAGE_METRICS 정보 스키마 뷰를 참고해요.
사용 메모
- 계정(또는 데이터베이스·스키마)에 테이블이 매우 많으면 전체 계정(또는 테이블·스키마)을 검색하는 것이 상당한 컴퓨트 리소스를 소비할 수 있어요.
- 출력에서 결과는 데이터베이스 이름, 스키마 이름, 테이블 이름 순으로 정렬돼요. 이는 데이터베이스의 결과가 여러 스키마의 테이블을 포함할 수 있어 페이지 매김이 깨질 수 있음을 의미해요. 페이지 매김이 예상대로 동작하려면 단일 스키마에 대해 SHOW TABLES 명령을 실행해야 해요. SHOW TABLES 명령에 IN SCHEMA schema_name 매개변수를 사용할 수 있어요. 또는 SHOW TABLES 명령을 실행하기 전에 USE SCHEMA 명령을 실행해 현재 컨텍스트의 스키마를 사용할 수 있어요.
- 이 명령은 실행에 웨어하우스가 필요하지 않아요.
- 이 명령은 현재 사용자의 현재 역할에 액세스 권한이 하나 이상 부여된 객체만 반환해요.
MANAGE GRANTS액세스 권한은 보유자에게 계정의 모든 객체를 볼 수 있는 권한을 암묵적으로 부여해요. 기본적으로 계정 관리자(ACCOUNTADMIN 역할)와 보안 관리자(SECURITYADMIN 역할)만MANAGE GRANTS권한을 가져요.- 이 명령의 출력을 후처리하려면 파이프 연산자(
->>)나RESULT_SCAN함수를 사용할 수 있어요. 두 구성 모두 출력을 쿼리할 수 있는 결과 집합으로 취급해요. 예를 들어 SHOW 명령 출력에서 특정 컬럼을 선택하거나 행을 필터링할 수 있어요. - 출력 컬럼을 참조할 때는 큰따옴표로 묶은 식별자를 사용해요. 예를 들어
type출력 컬럼을 선택하려면SELECT "type"이라고 지정해요. SHOW 명령의 출력 컬럼 이름은 소문자이므로 큰따옴표로 묶은 식별자를 사용해야 해요. LIMIT <rows>의 값은 10000을 초과할 수 없어요. LIMIT rows를 생략하면 결과 집합이 1만 행보다 크면 명령이 오류를 일으켜요. 1만 개를 초과하는 결과를 보려면 LIMIT rows를 포함하거나 Snowflake 정보 스키마의 해당 뷰를 쿼리해요.
예제
이 예제들은 지정된 매개변수에 따라 볼 권한이 있는 모든 테이블을 보여 줘요. Sample data 세트의 테이블에 SHOW TABLES를 실행해요. 예제들은 출력을 제한하기 위해 TERSE 매개변수를 사용해요.
tpch_sf1 스키마에서 LINE으로 시작하는 이름을 가진 모든 테이블 표시:
SHOW TERSE TABLES IN tpch_sf1 STARTS WITH 'LINE';
+-------------------------------+----------+-------+-----------------------+-------------+
| created_on | name | kind | database_name | schema_name |
|-------------------------------+----------+-------+-----------------------+-------------|
| 2016-07-08 13:41:59.960 -0700 | LINEITEM | TABLE | SNOWFLAKE_SAMPLE_DATA | TPCH_SF1 |
+-------------------------------+----------+-------+-----------------------+-------------+
tpch_sf1 스키마에서 이름에 PART 부분 문자열을 포함하는 모든 테이블 표시:
SHOW TERSE TABLES LIKE '%PART%' IN tpch_sf1;
+-------------------------------+-----------+-------+-----------------------+-------------+
| created_on | name | kind | database_name | schema_name |
|-------------------------------+-----------+-------+-----------------------+-------------|
| 2016-07-08 13:41:59.960 -0700 | JPART | TABLE | SNOWFLAKE_SAMPLE_DATA | TPCH_SF1 |
| 2016-07-08 13:41:59.960 -0700 | JPARTSUPP | TABLE | SNOWFLAKE_SAMPLE_DATA | TPCH_SF1 |
| 2016-07-08 13:41:59.960 -0700 | PART | TABLE | SNOWFLAKE_SAMPLE_DATA | TPCH_SF1 |
| 2016-07-08 13:41:59.960 -0700 | PARTSUPP | TABLE | SNOWFLAKE_SAMPLE_DATA | TPCH_SF1 |
+-------------------------------+-----------+-------+-----------------------+-------------+
tpch_sf1 스키마의 테이블을 표시하되 출력을 세 행으로 제한하고 J로 시작하는 테이블 이름부터 시작:
SHOW TERSE TABLES IN tpch_sf1 LIMIT 3 FROM 'J';
+-------------------------------+-----------+-------+-----------------------+-------------+
| created_on | name | kind | database_name | schema_name |
|-------------------------------+-----------+-------+-----------------------+-------------|
| 2016-07-08 13:41:59.960 -0700 | JCUSTOMER | TABLE | SNOWFLAKE_SAMPLE_DATA | TPCH_SF1 |
| 2016-07-08 13:41:59.960 -0700 | JLINEITEM | TABLE | SNOWFLAKE_SAMPLE_DATA | TPCH_SF1 |
| 2016-07-08 13:41:59.960 -0700 | JNATION | TABLE | SNOWFLAKE_SAMPLE_DATA | TPCH_SF1 |
+-------------------------------+-----------+-------+-----------------------+-------------+
HISTORY 매개변수를 사용해 드롭된 테이블 표시. 현재 스키마에 테이블을 만든 후 드롭해요:
CREATE OR REPLACE TABLE test_show_tables_history(c1 NUMBER);
DROP TABLE test_show_tables_history;
HISTORY 매개변수로 명령 출력에 드롭된 테이블을 포함해요:
SHOW TABLES HISTORY LIKE 'test_show_tables_history';
출력에서 dropped_on 컬럼은 테이블이 드롭된 날짜와 시각을 보여 줘요.
가장 최신 테이블을 먼저 보여 주도록 테이블 정렬:
SHOW TERSE TABLES ->> SELECT * FROM $1 ORDER BY "created_on" DESC;
가장 많은 데이터를 가진 테이블을 먼저 보여 주도록 테이블 정렬. "bytes" 컬럼은 SHOW TERSE TABLES 출력에 없으므로, 이 예제는 전체 SHOW TABLES 명령의 출력을 필터링해요:
SHOW TABLES
->> SELECT "name", "database_name", "schema_name", "bytes" FROM $1 ORDER BY "bytes" DESC;
SHOW TABLES 출력을 정규화된 테이블 이름 집합으로 변환:
SHOW TABLES IN ACCOUNT
->> SELECT "database_name" || '.' || "schema_name" || '.' || "name" AS fully_qualified_name
FROM $1
ORDER BY fully_qualified_name;