2016-11-07 12 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' 

しかし、データの私の数は常に増加し、毎日が、価格があまりにも増加となっているため。たとえ同じ制限(同じクエリの例のような)で同じクエリを使用しても。

私の質問は、価格を最適化する最適な方法は何ですか?

先月のクエリごとに、私のデータ量が2倍になったため、今度は$ 0.2前後で請求されます。クエリあたり$ 0.4の請求額があります。私は毎日何百ものクエリを実行したので、管理していないと価格が非常に高くなる可能性があります。

私はいくつかのオプションがあります:BigQueryので

  1. 使用毎日パーティションオプションを、私は、私は それをしなかった場合、正しく(処理されたデータの数によって)価格は同じであるかわかりません。 (私はこれで何か間違ったことをしましたか?)

  2. user_data_activities_oct16、user_data_activities_nov16などのように月ごとに多くのテーブルにテーブルを分割します。 注:2016年8月31日から2016年11月5日までの ユーザーアクティビティのデータのような数か月間のデータを照会する必要がありますが、これは良い解決策ですか? 私はすべてのために開く

が示唆:)

はあなたがPartitioned Tablesを使用する必要が非常に多く

答えて

1

、ありがとうございました。

たとえば、日単位でパーティション化された表を作成する必要があります。そして、あなたはこのmydataset.table$20160519ように、毎日のデータに書き込むことができ、あなたはこのように照会します:あなたは疑似列_PARTITIONTIMEを見るように

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

唯一のパーティションに触れるためのクエリを制限する方法です。これは、クエリ価格は、上記の日付間隔の間にタッチされたデータにのみ計算され、テーブル全体には計算されないことを意味します。これにより、テーブル全体のクエリを実行することが停止されるわけでもありません。

関連する問題