6

ソフトウェアアプリケーションによって生成されたユーザーデータを分析するために、BigQueryを実験しています。

私たちの作業テーブルは数億行で構成されており、それぞれが一意のユーザー「セッション」を表しています。それぞれに、タイムスタンプ、UUID、およびそのセッション中のユーザーの製品との対話を説明するその他のフィールドが含まれています。現在、1日あたり約2GBのデータ(約1,000万行)を生成しています。

データセット全体に対してクエリを実行することがよくあります(現在、約2か月の価値があり、増え続けています)。ただし、通常のクエリは1日、1週間、または1か月になります。テーブルが大きくなるにつれて、1日のクエリはますます高価になることがわかりました(BigQueryアーキテクチャで予想されるように)

データのサブセットをより効率的にクエリするための最良の方法は何ですか?私が考えることができる1つのアプローチは、データを日(または週、月など)ごとに別々のテーブルに「分割」してから、それらを結合してクエリすることです。

SELECT foo from mytable_2012-09-01, mytable_2012-09-02, mytable_2012-09-03;

これより良い方法はありますか?

4

2 に答える 2

3

BigQueryは、日付によるテーブルパーティションをサポートするようになりました。

https://cloud.google.com/blog/big-data/2016/03/google-bigquery-cuts-historical-data-storage-cost-in-half-and-accelerates-many-queries-by-10x

于 2016-06-16T02:32:33.553 に答える
1

こんにちはデビッド:これを処理する最良の方法は、多くのテーブル間でデータをシャーディングし、例で提案するようにクエリを実行することです。

より明確にするために、BigQueryには(設計による)インデックスの概念がないため、データを個別のテーブルにシャーディングすることは、クエリを可能な限り経済的に効率的に保つための有用な戦略です。

反対に、テーブルが多すぎることを心配している人にとってもう1つの便利な機能は、テーブルのexpirationTimeを設定することです。その後、テーブルは削除され、ストレージが再利用されます。そうしないと、テーブルは無期限に存続します。

于 2012-09-15T00:04:31.590 に答える