- 빅쿼리에서 특정 프로젝트, 데이터셋에서 모든 테이블들과 컬럼들의 리스트를 추출하는 방법에 관한 글입니다.
1. 문제
- 우리 팀이 빅쿼리에서 관리하는 모든 테이블들의 스키마를 작성해야 하는 문제가 있었다.
- 일일이 타이핑하자니 시간이 너무 오래 걸릴 것 같았다.
- 찾아보니 많은 DBMS에서 테이블과 컬럼을 추출하는 기능을 지원하고 있었다.
2. 해결 방법
2.1 테이블명 추출하기
- 특정 데이터셋의 테이블들을 모두 추출하고 싶다면, 아래와 같은 방식으로 할 수 있다.
#standardsql
SELECT *
FROM `[project-name].[dataset]`.INFORMATION_SCHEMA.TABLES
ORDER BY table_name;
- 쿼리 실행 시 결과물
- table_catalog : 프로젝트 이름
- table_schema : 데이터셋
- table_name : 테이블명
- table_type : 테이블 타입(ex. BASE TABLE)
- is_insertable_into
- is_typed
- creation_time : 테이블이 만들어진 시간(ex. 2021-08-27 12:50:55.153 UTC)
2.2 컬럼명까지 추출하기
- 만약 각 테이블의 컬럼까지 추출하고 싶다면, 아래와 같은 방식으로 할 수 있다.
#standardsql
SELECT *
FROM `[project-name].[dataset]`.INFORMATION_SCHEMA.COLUMNS
ORDER BY table_name;
- 쿼리 실행 시 결과물
- table_catalog : 프로젝트 이름
- table_schema : 데이터셋
- table_name : 테이블명
- column_name : 컬럼명
- ordinal_position : 컬럼의 위치(ex. 1, 2, 3, ...)
- is_nullable : NULL 가능 여부(ex. YES)
- data_type : 컬럼의 데이터타입(ex. INT64)
- is_generated
- generation_expression
- is_stored
- is_hidden
- is_updatable
- is_system_defined
- is_partitioning_column
- clustering_ordinal_position
3. 빅쿼리에서 지원하는 INFORMATION_SCHEMA에 대한 데이터셋 한정자
- 빅쿼리에서는 INFORMATION_SCHEMA에 대해 아래와 같은 데이터셋 한정자를 지원한다.
- COLUMNS
- COLUMN_FIELD_PATHS
- PARAMETERS
- ROUTINES
- ROUTINE_OPTIONS
- TABLES
- TABLE_OPTIONS
- VIEWS
4. 참고 문서