2016-11-07 2 views
1

Google BigQuery를 사용하여 내 앱에 사용자 데이터 활동을 저장하고 있습니다.Google BigQuery 가격 최적화

BigQuery에서 테이블을 만들었으며이를 "user_activities_data"라고합니다.

이 데이터에는 항상 초마다 업데이트되는 많은 데이터 사용자 작업이 포함됩니다. 초마다 수천 개의 새로운 데이터가 테이블에 삽입됩니다.

이 테이블에 대해 많은 쿼리를 수행합니다.

BigQuery는 사용자가 수행하는 모든 쿼리에 사용하는 데이터의 양에 따라 요금이 부과됩니다. 데이터 크기를 사용하여 가능한 한 낮은 수준으로 사용하도록 쿼리를 최적화하려고합니다 (필요한 열만 선택하여). 예를 들어

:

SELECT username,activity FROM user_activities_data WHERE date_activities>='2016-10-01' and date_activities<='2016-10-31' 

그러나 모든 일 때문에 데이터의 내 번호는 항상 증가

,가 가격이 너무 증가. 위의 쿼리 예제와 같은 동일한 제한을 사용하여 같은 쿼리를 사용하더라도.

제 질문은 가격을 최적화하는 가장 좋은 방법입니다.

각 쿼리에 대한 지난 달 내 데이터 양이 두 배가되어 쿼리 당 $ 0.4의 청구서가 있었기 때문에 이번 달에는 약 0.2 달러가 청구될 예정입니다. 매일 수백 건의 쿼리를 수행 했으므로 가격이 너무 비싸게 관리 될 수 있습니다.

나는 몇 가지 옵션이 있습니다 BigQuery의에서

  1. 를 사용하여 매일 파티션 옵션을,하지만 난 그게 (처리 된 데이터의 수에 의하여) 가격 올바르게 그랬다면 나도 같은 모르겠어요. (내가 뭔가 잘못 했습니까?)

  2. user_data_activities_oct16, user_data_activities_nov16 등의 테이블을 한 달에 여러 테이블로 나눕니다. 참고 : 2016 년 8 월 31 일부터 2016 년 11 월 5 일까지 개의 사용자 활동 데이터와 같이 몇 달 간의 데이터를 쿼리해야 할 때가 있습니까? 은 좋은 해결책입니까? 내가 어떤을 위해 열

: 당신에게 당신은 Partitioned Tables를 사용할 필요가

답변

1

대단히 감사합니다 제안합니다.

예를 들어 일별로 파티셔닝 된 테이블을 만들어야합니다. 그리고 당신이 mydataset.table$20160519 같은 매일 데이터로 쓸 수 있습니다, 당신은 다음과 같이 질의합니다 :

SELECT 
    field1 
FROM 
    mydataset.partitioned_table 
WHERE 
    _PARTITIONTIME BETWEEN TIMESTAMP("2016-05-01") 
    AND TIMESTAMP("2016-05-06") 

을 당신이 의사 열 _PARTITIONTIME는 파티션을 터치 쿼리를 제한 할 수있는 방법을 참조한다. 즉, 쿼리 가격은 언급 된 날짜 간격 동안 만 건드린 데이터에 대해서만 계산되며 전체 테이블에는 계산되지 않습니다. 또한 전체 테이블 쿼리를 수행하는 것을 중단하지 않습니다.