본문 바로가기

Wiki/SQL

빅쿼리 내 모든 테이블 및 컬럼 리스트 추출하기

  • 빅쿼리에서 특정 프로젝트, 데이터셋에서 모든 테이블들과 컬럼들의 리스트를 추출하는 방법에 관한 글입니다.

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. 참고 문서