빅쿼리(BigQuery) _TABLE_SUFFIX 사용법

와일드카드(*)와 _TABLE_SUFFIX 를 사용해 테이블을 필터해보겠습니다. 실습 데이터로 빅쿼리 퍼블릭 데이터세트의 구글 애널리틱스 샘플을 사용했습니다.

관련 내용:
  • google_analytics_sample 데이터셋의 테이블들은 일자별로 파티션되어있습니다. 아래는 ga_sessions_20170801 테이블을 쿼리합니다. 하지만 때론 다른 날짜의 테이블과 같이 쿼리하고 싶을 때가 있습니다.
빅쿼리에 파티션 된 테이블

  • 예를 들어 20170730일, 20170731일, 20170801일 테이블을 아래와 같이 UNION 오퍼레이터를 사용하여 쿼리할 수 있습니다. 테이블 하나를 쿼리할 때는 15.9MB, 테이블 세개를 쿼리할 때는 43.5MB를 처리할 것이라고 검사기가 알려줍니다. 만약 30개 이상의 테이블을 쿼리하고 싶으면 30번 이상을 UNION 해도 되지만 간단한 방법이 있습니다.
빅쿼리 UNION ALL 오퍼레이터

  • UNION ALL 말고 UNION DISTINCT를 써도 됩니다. 빅쿼리에선 UNION 뒤에는 무조건 ALL 이나 DISTINCT를 써야합니다. UNION만 쓰면 ALL과 DISTINCT 중 하나를 쓰라고 에러 메세지가 뜹니다. UNION ALL은 중복, UNION DISTINCT는 중복 제거입니다. 일반 sql에서 union all 과 union의 차이와 같습니다.
빅쿼리 UNION Syntax

  • 와일드카드(*)를 사용한 쿼리를 해보겠습니다. 샘플 데이터셋의 모든 테이블을 쿼리하기 때문에 5.4GB를 처리할 것이라고 검사기가 알려줍니다. 우리는 30개 테이블을 쿼리해야 하니 _table_suffix를 사용하겠습니다.
빅쿼리 _TABLE_SUFFIX 사용법

  • 20170701 테이블부터 20170801 테이블까지 약 30개를 쿼리하겠습니다. WHERE 절에 _TABLE_SUFFIX 를 사용하고 범위를 주면 됩니다. (_table_suffix 소문자로 써도 됩니다. 빅쿼리에서 전부 소문자로 써도 다 읽힙니다. 빅쿼리 꽤 똑똑합니다.) 처리하는 용량도 많이 줄어든 것이 보입니다.
빅쿼리 _TABLE_SUFFIX 사용법

  • 혹시 Unrecognized name: _TABLE_SUFFIX 란 오류가 뜨면 테이블명에 와일드카드(*)를 깜빡하셔서 그렇습니다.
빅쿼리 Unrecognized name:_TABLE_SUFFIX 오류

** SELECT 뒤나 테이블명 뒤의 와일드카드(*)는 항상 조심해서 사용하세요.  한순간의 졸음 실행이 평생을 좌우합니다!

Comments