BigQuery のストレージを最適化する
このページでは、BigQuery ストレージの最適化のポイントについて説明します。BigQuery はカラム型形式でデータを保存します。列指向データベースは、非常に多くのレコードからデータを集計する分析ワークロード用に最適化されています。列は通常、行よりも冗長性が高いため、この特性により、ランレングス圧縮などの手法を使用して、より大規模なデータ圧縮を実現できます。BigQuery のデータの保存方法の詳細については、BigQuery ストレージの概要をご覧ください。BigQuery ストレージを最適化すると、クエリのパフォーマンスが向上し、コストが抑制されます。
BigQuery は、リソースのストレージ消費に関する詳細を提供します。テーブル ストレージ メタデータを表示するには、次の INFORMATION_SCHEMA
ビューに対してクエリを実行します。
INFORMATION_SCHEMA.TABLE_STORAGE
INFORMATION_SCHEMA.TABLE_STORAGE_BY_ORGANIZATION
INFORMATION_SCHEMA.TABLE_STORAGE_USAGE_TIMELINE
INFORMATION_SCHEMA.TABLE_STORAGE_USAGE_TIMELINE_BY_ORGANIZATION
テーブルデータをクラスタ化する
ベスト プラクティス: クラスタ化テーブルを作成します。
クエリ用にストレージを最適化するには、まずテーブルデータをクラスタ化します。頻繁に使用される列をクラスタリングすることで、クエリでスキャンするデータの合計量を削減できます。クラスタを作成する方法については、クラスタ化テーブルを作成して使用するをご覧ください。
テーブルのデータを分割する
ベスト プラクティス: 大きなテーブルをパーティションで分割します。
パーティションを使用すると、整数列、時間単位の列、取り込み時間など、定義済みの列の特性でデータをグループ化して並べ替えることができます。パーティショニングにより、クエリのパフォーマンスを高めたり、クエリによって読み取られるバイト数を減らしてコストを抑えたりできます。
パーティションの詳細については、パーティション分割テーブルの概要をご覧ください。
テーブルとパーティションの有効期限の設定を使用する
ベスト プラクティス:ストレージを最適化するには、データセット、テーブル、パーティション分割テーブルデフォルトの有効期限設定を構成します。
データセット内で新しく作成されたテーブルにデフォルトのテーブル有効期限を設定することで、ストレージ費用を制御し、ストレージ使用率を最適化できます。テーブルの有効期限が切れると、テーブル内のすべてのデータとともに削除されます。データセットの作成時にプロパティを設定した場合、そのデータセットで作成されたテーブルは有効期限の経過後に削除されます。データセットの作成後にプロパティを設定した場合、設定後に作成した新しいテーブルのみが有効期限の経過後に削除されます。
たとえば、デフォルトのテーブルの有効期限を 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 の長期ストレージを使用して、古いデータの費用を削減します。
BigQuery ストレージにデータを読み込むと、そのデータには BigQuery のストレージ料金が適用されます。古いデータを別のストレージ オプション(Cloud Storage など)にエクスポートするのではなく、BigQuery の長期保存の料金を活用できます。
90 日間連続して変更されていないテーブルがある場合、そのテーブルのストレージ料金は自動的に 50% 減少します。パーティション分割テーブルがある場合、各パーティションは、パーティション分割されていないテーブルと同じルールに従って、長期料金の対象となるかどうか個別に検討されます。
ストレージの課金モデルを構成する
ベスト プラクティス: 使用パターンに基づいてストレージの課金モデルを最適化します。
BigQuery は、論理バイト(非圧縮)、物理バイト(圧縮)、またはその両方の組み合わせによるストレージ課金をサポートしています。各データセットに構成されたストレージ課金モデルによってストレージの料金が変化しますが、クエリのパフォーマンスには影響しません。
INFORMATION_SCHEMA
ビューを使用すると、使用パターンに基づいて最適なストレージ課金モデルを特定できます。
長期または短期のデータを特定する
ベスト プラクティス: 行レベルのデータを長期間保存する必要があるかどうかを特定し、集計データのみを長期間保存します。
多くの場合、トランザクション レベルまたは行レベルのデータに含まれる詳細は短期的には有用ですが、長期的にはあまり参照されなくなります。このような状況では、集計クエリを作成してこのデータに関連付けられた指標を計算して保存し、テーブルまたはパーティションの有効期限を使用して行レベルのデータを体系的に削除できます。これにより、ストレージ料金を削減しながら、長期的に利用可能な指標を保持できます。
タイムトラベル期間を短縮する
ベスト プラクティス: 要件に応じて、タイムトラベル期間を短縮できます。
タイムトラベル期間をデフォルト値の 7 日から短縮すると、テーブルから削除または変更されたデータの保持期間が短縮されます。タイムトラベル ストレージの料金は、物理(圧縮)ストレージの課金モデルを使用している場合にのみ発生します。
タイムトラベル期間はデータセット レベルで設定されます。
Cloud Storage にデータをアーカイブする
ベスト プラクティス: Cloud Storage にデータをアーカイブすることを検討します。
アーカイブのビジネスニーズに応じて、BigQuery から Cloud Storage にデータを移動できます。BigQuery からデータをエクスポートする前に、BigQuery の長期的な料金を検討することをおすすめします。