빅쿼리(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 DISTINCT를 써도 됩니다. 빅쿼리에선 UNION 뒤에는 무조건 ALL 이나 DISTINCT를 써야합니다. UNION만 쓰면 ALL과 DISTINCT 중 하나를 쓰라고 에러 메세지가 뜹니다. UNION ALL은 중복, UNION DISTINCT는 중복 제거입니다. 일반 sql에서 union all 과 union의 차이와 같습니다.
- 와일드카드(*)를 사용한 쿼리를 해보겠습니다. 샘플 데이터셋의 모든 테이블을 쿼리하기 때문에 5.4GB를 처리할 것이라고 검사기가 알려줍니다. 우리는 30개 테이블을 쿼리해야 하니 _table_suffix를 사용하겠습니다.
- 20170701 테이블부터 20170801 테이블까지 약 30개를 쿼리하겠습니다. WHERE 절에 _TABLE_SUFFIX 를 사용하고 범위를 주면 됩니다. (_table_suffix 소문자로 써도 됩니다. 빅쿼리에서 전부 소문자로 써도 다 읽힙니다. 빅쿼리 꽤 똑똑합니다.) 처리하는 용량도 많이 줄어든 것이 보입니다.
Comments
Post a Comment