SHOW COLUMNS
SHOW COLUMNS
SHOW COLUMNS 명령은 접근 권한(privilege)이 있는 테이블·뷰의 컬럼과 시맨틱 뷰(semantic view)의 차원(dimension)·사실(fact)·메트릭(metric) 목록을 보여주는 명령이에요. 이 명령으로 지정한 테이블·뷰, 스키마, 데이터베이스, 또는 계정 전체의 컬럼을 나열할 수 있어요.
출처: 문서
본문
SHOW COLUMNS는 접근 권한이 있는 다음 객체들의 컬럼, 차원, 사실, 메트릭을 나열해요:
- 지정한 테이블 또는 뷰.
- 지정한 스키마 또는 현재 사용 중인 스키마의 모든 테이블·뷰.
- 지정한 데이터베이스 또는 현재 사용 중인 데이터베이스의 모든 테이블·뷰.
- 계정의 모든 테이블·뷰.
관련 명령으로는 DESCRIBE TABLE과 Information Schema의 COLUMNS 뷰가 있어요.
구문 (Syntax)
SHOW COLUMNS [ LIKE '<pattern>' ]
[ IN { ACCOUNT | DATABASE [ <database_name> ] | SCHEMA [ <schema_name> ] | TABLE | [ TABLE ] <table_name> | VIEW | [ VIEW ] <view_name> } | APPLICATION <application_name> | APPLICATION PACKAGE <application_package_name> ]
파라미터 (Parameters)
-
LIKE
<pattern>— 명령 출력을 객체 이름으로 필터링해요. 필터는 대소문자를 구분하지 않는 패턴 매칭이며, SQL 와일드카드 문자(%와_)를 지원해요. 예를 들어 다음 패턴들은 같은 결과를 반환해요:... LIKE '%testing%' ... ... LIKE '%TESTING%' ... -
IN { ACCOUNT | DATABASE [
<database_name>] | SCHEMA [<schema_name>] | TABLE | [ TABLE ]<table_name>| VIEW | [ VIEW ]<view_name>| APPLICATION<application_name>| APPLICATION PACKAGE<application_package_name>} — 명령의 범위를 지정해요. 이 값에 따라 현재/지정 데이터베이스, 스키마, 테이블, 뷰만 나열할지, 아니면 계정 전체를 나열할지가 결정돼요.키워드를 지정하지 않으면 동작은 다음과 같아요:
- 현재 데이터베이스가 있다면 현재 데이터베이스의 모든 스키마에 대한 레코드를 가져와요.
- 현재 데이터베이스가 없다면 계정의 모든 데이터베이스와 스키마에 대한 레코드를 가져와요.
ACCOUNT를 지정하면:DATABASE를 지정했다면 해당 데이터베이스의 모든 스키마 레코드를 가져와요.- 데이터베이스를 지정하지 않았다면 현재 데이터베이스(있을 경우) 또는 계정 전체를 대상으로 해요.
DATABASE [ <database_name> ]을 지정하면:SCHEMA처럼 정규화된(schema-qualified) 이름을 지정했다면 해당 데이터베이스·스키마의 레코드를 가져와요.my_database.my_schema처럼 비정규화된 이름을 지정했다면 현재 데이터베이스가 존재할 때 해당 스키마의 레코드를 가져오고, 그렇지 않으면SQL compilation error: Object does not exist, or operation cannot be performed오류를 표시해요.- 아무것도 지정하지 않았다면 현재 데이터베이스가 있으면 그 안의 현재 스키마(또는 모든 스키마) 레코드를, 없으면 계정 전체 레코드를 가져와요.
SCHEMA [ <schema_name> ]을TABLE없이 지정하면 위 DATABASE 규칙과 동일한 방식으로 범위가 정해져요.[ TABLE ] <table_name>을 지정하면:my_database_name.my_schema_name.my_table_name처럼 완전 정규화된 테이블 이름이면 해당 테이블의 모든 레코드를 가져와요.my_schema_name.my_table_name처럼 스키마로 정규화된 이름이면 현재 데이터베이스가 존재할 때 해당 테이블의 레코드를 가져오고, 없으면Cannot perform SHOW object_type. This session does not have a current database...오류가 나요.- 비정규화된
table_name이면 현재 데이터베이스·스키마가 모두 존재할 때 그 테이블의 레코드를 가져오고, 없으면SQL compilation error: object does not exist or not authorized.오류가 나요.
VIEW또는APPLICATION키워드를 지정하면 뷰에 대한 규칙은 테이블과 동일해요.APPLICATION <application_name>또는APPLICATION PACKAGE <application_package_name>을 지정하면 지정한 Snowflake Native App Framework 애플리케이션 또는 애플리케이션 패키지의 레코드를 반환해요.기본값: 세션에 현재 사용 중인 데이터베이스가 있는지에 따라 달라져요.
- 데이터베이스 있음:
DATABASE가 기본 (즉, 데이터베이스 안에서 볼 권한이 있는 객체 반환). - 데이터베이스 없음:
ACCOUNT가 기본 (즉, 계정에서 볼 권한이 있는 객체 반환).
사용 참고 사항 (Usage notes)
-
ACCOUNT키워드를 사용하면서 표준 뷰, 구체화된 뷰(materialized view), 시맨틱 뷰의 뷰 이름을 지정할 수 있어요. -
명령은 명령을 실행한 역할의 접근 권한에 따라 지정 객체 유형에 대해 최대 1만 개의 레코드를 반환해요. 필터를 적용해도 1만 개를 초과하는 레코드는 반환되지 않아요. 1만 개가 넘는 결과를 보려면 Snowflake Information Schema에서 해당 뷰(존재한다면)를 조회해요.
-
이 명령은 실행에 실행 중인 웨어하우스(warehouse)를 요구하지 않아요.
-
현재 사용자의 현재 역할에 하나 이상의 접근 권한이 부여된 객체만 반환해요.
-
MANAGE GRANTS접근 권한은 보유자가 계정의 모든 객체를 볼 수 있게 해줘요. 기본적으로 ACCOUNTADMIN 역할과 SECURITYADMIN 역할 사용자만MANAGE GRANTS권한을 가져요. -
이 명령의 출력을 후처리하려면 파이프 연산자(
|>) 또는RESULT_SCAN함수를 사용할 수 있어요. 두 구성 모두 출력을 조회 가능한 결과 집합으로 취급해요. SHOW 출력에서 특정 컬럼을 선택하거나 행을 필터링할 때 사용해요. -
출력 컬럼을 참조할 때는 컬럼 이름에 큰따옴표로 둘러싼 식별자를 사용해야 해요. 예를 들어
type출력 컬럼을 선택하려면SELECT "type"라고 지정해요. SHOW 명령의 출력 컬럼 이름은 소문자이기 때문에 반드시 큰따옴표를 사용해야 해요. 이렇게 하면 SELECT 목록이나 WHERE 절의 컬럼 이름이 스캔된 SHOW 출력의 컬럼 이름과 일치해요.참고: SHOW COLUMNS 출력 테이블의 컬럼 이름은 소문자(
table_name,schema_name,column_name등)지만,column_name컬럼의 값은 저장된 컬럼 이름을 그대로 반영해요. 예를 들어ALTER TABLE ... ADD COLUMN MYCOLUMN구문으로 큰따옴표 없이 추가한 컬럼은 대문자로 저장되어MYCOLUMN으로 표시돼요.
출력 (Output)
명령 출력은 다음 컬럼들로 컬럼 속성과 메타데이터를 제공해요:
- table_name — 컬럼, 차원, 사실, 또는 메트릭이 속한 테이블·뷰의 이름.
- schema_name — 테이블의 스키마.
- column_name — 컬럼, 차원, 사실, 또는 메트릭의 이름.
- data_type — 컬럼, 차원, 사실, 또는 메트릭의 데이터 타입과 관련 속성을 담은 JSON 객체.
type키-값 쌍이 데이터 타입을 지정해요. 문자열·숫자 데이터 타입에서type은 다음 중 하나예요:TEXT— 모든 문자열 타입.FIXED— 모든 고정 소수점 숫자 타입.REAL— 모든 부동 소수점 숫자 타입.
- 나머지 키-값 쌍은 특정 데이터 타입에 적용되는 속성을 설명해요. 예를 들어:
type이TEXT또는BINARY면 추가 키-값 쌍에length,byteLength,fixed,nullable이 포함될 수 있어요.type이FIXED,TIME,TIMESTAMP_NTZ,TIMESTAMP_LTZ, 또는TIMESTAMP_TZ면precision,scale,nullable이 포함될 수 있어요.type이REAL,DATE, 또는BOOLEAN이면nullable이 포함될 수 있어요.
- null? — 컬럼이 NULL 값을 포함할 수 있는지 여부.
- default — 컬럼에 정의된 기본값(있을 경우).
- kind — 다음 중 하나:
COLUMN— 테이블, 뷰, 구체화된 뷰의 컬럼.VIRTUAL_COLUMN— 표현식으로 정의된 가상 컬럼.DIMENSION— 시맨틱 뷰의 차원.FACT— 시맨틱 뷰의 사실.METRIC— 시맨틱 뷰의 메트릭.
- expression — 가상 컬럼을 정의하는 SQL 표현식. 비가상 컬럼이면 비어 있어요.
- comment — 컬럼, 차원, 사실, 또는 메트릭에 대한 주석(있을 경우).
- database_name — 테이블의 데이터베이스.
- autoincrement — 컬럼의 자동 증가 시작·증가 값(있을 경우). 컬럼에
NOORDER속성이 있으면IDENTITY START 1 INCREMENT 1 NOORDER를 포함하고, 그렇지 않으면ORDER를 포함해요. - schema_evolution_record — 주어진 테이블 컬럼에 대해 가장 최근에 트리거된 스키마 진화(schema evolution) 정보를 기록해요. 다음 하위 필드를 포함해요:
EvolutionType— 트리거된 스키마 진화 유형 (ADD_COLUMN또는DROP_NOT_NULL).EvolutionMode— 트리거한 수집 메커니즘 (COPY,SNOWPIPE, 또는SNOWPIPE_STREAMING).FileName— 진화를 트리거한 파일 이름 (SNOWPIPE_STREAMING은 NULL).TriggeringTime— 컬럼이 진화된 대략적인 시간.QueryId또는PipeId— 트리거한 쿼리·파이프의 고유 식별자 (COPY는 QUERY ID,SNOWPIPE는 PIPE ID,SNOWPIPE_STREAMING은 NULL).Pipe name— 스키마 진화를 트리거한 완전 정규화된 파이프 이름 (SNOWPIPE_STREAMING만).Channel name— 스키마 진화를 트리거한 채널 (SNOWPIPE_STREAMING만).offsetTokenUpperBound— 스키마 진화가 트리거된 시점 이전의 오프셋 (SNOWPIPE_STREAMING만).
예제 (Examples)
테이블을 만든 다음 SHOW COLUMNS 명령으로 테이블의 컬럼을 나열하는 예시예요:
CREATE OR REPLACE TABLE test_show_columns (
n1 NUMBER DEFAULT 5,
n2_int INTEGER DEFAULT n1+5,
n3_bigint BIGINT AUTOINCREMENT,
n4_dec DECIMAL IDENTITY (1,10),
f1 FLOAT,
f2_double DOUBLE,
f3_real REAL,
s1 STRING,
s2_var VARCHAR,
s3_char CHAR,
s4_text TEXT,
"s5_case_sensitive" VARCHAR,
b1 BINARY,
b2_var VARBINARY,
bool1 BOOLEAN,
d1 DATE,
t1 TIME,
ts1 TIMESTAMP,
ts2_ltz TIMESTAMP_LTZ,
ts3_ntz TIMESTAMP_NTZ,
ts4_tz TIMESTAMP_TZ);
SHOW COLUMNS IN TABLE test_show_columns;
더 알아보기 (Learn more)
- DESCRIBE TABLE — 테이블 상세 정보 확인
- SHOW TABLES — 테이블 목록 조회
- COLUMNS 뷰 (Information Schema) — 컬럼 메타데이터 조회