BigQuery のストレージを最適化する

このページでは、BigQuery ストレージの最適化のポイントについて説明します。BigQuery はカラム型形式でデータを保存します。列指向データベースは、非常に多くのレコードからデータを集計する分析ワークロード用に最適化されています。列は通常、行よりも冗長性が高いため、この特性により、ランレングス圧縮などの手法を使用して、より大規模なデータ圧縮を実現できます。BigQuery のデータの保存方法の詳細については、BigQuery ストレージの概要をご覧ください。BigQuery ストレージを最適化すると、クエリのパフォーマンスが向上し、コストが抑制されます。

BigQuery は、リソースのストレージ消費に関する詳細を提供します。テーブル ストレージ メタデータを表示するには、次の INFORMATION_SCHEMA ビューに対してクエリを実行します。

テーブルデータをクラスタ化する

ベスト プラクティス: クラスタ化テーブルを作成します。

クエリ用にストレージを最適化するには、まずテーブルデータをクラスタ化します。頻繁に使用される列をクラスタリングすることで、クエリでスキャンするデータの合計量を削減できます。クラスタを作成する方法については、クラスタ化テーブルを作成して使用するをご覧ください。

テーブルのデータを分割する

ベスト プラクティス: 大きなテーブルをパーティションで分割します。

パーティションを使用すると、整数列、時間単位の列、取り込み時間など、定義済みの列の特性でデータをグループ化して並べ替えることができます。パーティショニングにより、クエリのパフォーマンスを高めたり、クエリによって読み取られるバイト数を減らしてコストを抑えたりできます。

パーティションの詳細については、パーティション分割テーブルの概要をご覧ください。

テーブルとパーティションの有効期限の設定を使用する

ベスト プラクティス:ストレージを最適化するには、データセットテーブルパーティション分割テーブルデフォルトの有効期限設定を構成します。

データセット内で新しく作成されたテーブルにデフォルトのテーブル有効期限を設定することで、ストレージ費用を制御し、ストレージ使用率を最適化できます。テーブルの有効期限が切れると、テーブル内のすべてのデータとともに削除されます。データセットの作成時にプロパティを設定した場合、そのデータセットで作成されたテーブルは有効期限の経過後に削除されます。データセットの作成後にプロパティを設定した場合、設定後に作成した新しいテーブルのみが有効期限の経過後に削除されます。

たとえば、デフォルトのテーブルの有効期限を 7 日に設定した場合、1 週間を経過したデータは自動的に削除されます。

このオプションは、最新のデータのみにアクセスする必要がある場合に役立ちます。試験運用版のデータで、データ保存の必要がない場合にも役立ちます。

テーブルが日付で分割されている場合は、データセットのデフォルトのテーブル有効期限が個々のパーティションに適用されます。また、bq コマンドライン ツールの time_partitioning_expiration フラグか、API の expirationMs 構成設定を使用して、パーティションの有効期限を制御することもできます。パーティションが期限切れになると、パーティション内のデータは削除されますが、テーブルが空の場合でもパーティション分割テーブルは破棄されません。たとえば、次のコマンドを使用するとパーティションは 3 日後に有効期限切れになります。

bq mk \
--time_partitioning_type=DAY \
--time_partitioning_expiration=259200 \
project_id:dataset.table

データを BigQuery に保存する

ベスト プラクティス: データを BigQuery に保存します。

Cloud Storage から BigQuery へデータを読み込むオペレーションは課金対象外ですが、Cloud Storage へのデータの保存では料金が発生します。BigQuery に読み込まれたデータには、BigQuery のストレージ料金が適用されます。タイムトラベル ストレージ ブロックを含む、テーブルで消費する物理ストレージまたは論理ストレージに対して課金されます。

古いデータを別のストレージ オプション(Cloud Storage など)にエクスポートするのではなく、BigQuery の長期保存の料金を活用します。

90 日間連続して編集されていないテーブルがある場合、そのテーブルのストレージ料金は自動的に 50% 減少します。パーティション分割テーブルがある場合、各パーティションは、パーティション分割されていないテーブルと同じルールに従って、長期料金の対象となるかどうか個別に検討されます。

長期または短期のデータを特定する

ベスト プラクティス: 行レベルのデータを長期間保存する必要があるかどうかを特定し、集計データのみを長期間保存します。

多くの場合、トランザクション レベルまたは行レベルのデータに含まれる詳細は短期的には有用ですが、長期的にはあまり参照されなくなります。このような状況では、集計クエリを作成してこのデータに関連付けられた指標を計算して保存し、テーブルまたはパーティションの有効期限を使用して行レベルのデータを体系的に削除できます。これにより、ストレージ料金を削減しながら、長期的に利用可能な指標を保持できます。

タイムトラベル期間を短縮する

ベスト プラクティス: 要件に応じて、タイムトラベル期間を短縮できます。

タイムトラベル日数をデフォルト値の 7 から短縮すると、オブジェクトに保存されるストレージ ブロックの総数が減少します。タイムトラベル期間はデータセット レベルで設定されます。

Cloud Storage にデータをアーカイブする

ベスト プラクティス: Cloud Storage にデータをアーカイブすることを検討します。

アーカイブのビジネスニーズに応じて、BigQuery から Cloud Storage にデータを移動できます。BigQuery からデータをエクスポートする前に、BigQuery の長期的な料金を検討することをおすすめします。

次のステップ