2017-11-06 8 views
1

table_201710까지 sample 및 table_201606, table_201607이라는 데이터 세트가 있습니다. 그렇다면 내가하고 싶은 일은 table_201710 인 최신 TABLE SUFFIX에서 데이터를 가져 오는 것입니다.BigQuery의 최신 테이블 파티션 와일드 카드

 WITH max_table_time AS(
     SELECT 
      TIMESTAMP_ADD(MAX(time), INTERVAL 1 HOUR) AS max_time, 
      FORMAT_DATE("%Y%m", DATE(MAX(time))) AS par 
     FROM 
      `sample.table_*` 
    ), 


    xyz as(
     SELECT id, sum(total_a) as total_b, sum(total_c) as sum_total 
     FROM `sample.table_*` 
     WHERE _TABLE_SUFFIX = (SELECT par from play_partitions) 
     GROUP BY video_id 
    ) 

    SELECT * FROM xyz 

어떻게 든 모든 (table_201710까지 table_201606에서) 테이블하지만 결과를 통해 위의 쿼리, 스캔 (table_201710 데이터) 괜찮 : 다음은 내 쿼리입니다. 내가하려고 할 때

그러나, 결과는 다른이 :

WITH max_table_time AS(
     SELECT 
      TIMESTAMP_ADD(MAX(time), INTERVAL 1 HOUR) AS max_time, 
      FORMAT_DATE("%Y%m", DATE(MAX(time))) AS par 
     FROM 
      `sample.table_*` 
    ), 


    xyz as(
     SELECT id, sum(total_a) as total_b, sum(total_c) as sum_total 
     FROM `sample.table_*` 
     WHERE _TABLE_SUFFIX = '201710' 
     GROUP BY video_id 
    ) 

    SELECT * FROM xyz 

위의 쿼리, table_201710에 자리 잡고 단지 스캔 table_201710 및 결과 데이터. 첫 번째 쿼리와 달리이 테이블은 모든 테이블을 스캔하지만 table_201710에있는 올바른 데이터를 얻습니다.

어떻게 첫 번째 쿼리가 모든 테이블을 스캔 할 수 있습니까? 왜냐하면 첫 번째 쿼리를 수행 할 때 BigQuery 콘솔은 프로세스에서 처리 된 200MB 데이터를 사용하는 두 번째 쿼리 대신 10GB 데이터를 사용한다고 말하기 때문입니다.

이유가 무엇인지, 누군가 설명 할 수 있습니까?

답변

0

그냥주의의 BigQuery에서 와일드 카드 테이블을 읽고 다음 문장을 발견

_TABLE_SUFFIX 크게 쿼리를 실행의 비용을 절감 스캔 바이트의 수를 줄일 수 있습니다 사용. 하위 쿼리를 포함하는 _TABLE_SUFFIX의 필터를 사용하여 와일드 카드 테이블에 대해 검색된 테이블 수를 제한 할 수 없습니다. 예를 들어, 다음 쿼리는 내가 그 쿼리를 수행하기 전에 RTFM을하고 있지 않다 와일드 카드 테이블 BigQuery의-공공 data.noaa_gsod.gsod19 *

검사 테이블을 제한하지 않습니다. : D