【BigQuery】テーブルの種類を整理してみる

Google Cloud

2024.6.13

Topics

概要

BigQueryのテーブルには複数の種類のものがあります。
本記事ではそれらについて整理してみようと思います。

参考:
テーブルの概要
標準のBigQueryテーブル
パーティション分割テーブルの概要
クラスタ化テーブルの概要
テーブルクローン
テーブルスナップショット
BigLakeテーブル
オブジェクトテーブル
BigLake以外の外部テーブル
ビュー
マテリアライズドビュー
マルチステートメントクエリで一時テーブルを使用する

物理テーブルと仮想テーブルと一時テーブル

リレーショナルデータベースでも物理テーブルと仮想テーブルと一時テーブルという3種類のものがあります。
(BigQueryはリレーショナルデータを処理できますが、リレーショナルデータベースではありません。)
BigQueryのテーブルの種類についてみていく前にそれぞれのテーブルの違いをはっきりとさせておきます。

物理テーブル

リレーショナルデータベースの基本的なテーブルのことを指します。
データベース内に実際のデータが格納されています。

特徴
– データベースのストレージに物理的にデータが保存される。
– インデックスや制約を加えることができる。

仮想テーブル

リレーショナルデータベースにおいてビューと呼ばれる他のテーブルデータを参照する論理的なテーブルです。
実際の記憶領域を使わずに複雑なクエリを再利用可能にし、テーブルと同じようなクエリで参照を行なえます。

特徴
– 実際のデータを保存しない。
– 参照のたびに元のテーブルにアクセスするため、古いデータを参照することはない。
– 主に複雑なクエリの再利用に使われる。

一時テーブル

一時的なデータの保存に使われるテーブルです。
セッション終了やトランザクション完了時に自動的に削除されます。
PostgreSQLでは他のテーブルと異なるtemp_buffersという一時メモリを利用します。

特徴
– セッションまたはトランザクションが終了すると削除される。
– 一時的なデータの操作や中間結果の保存に使用。
– 通常、他のセッションからはアクセスできない。

RDBにおける各テーブルの比較

特徴 物理テーブル 仮想テーブル(ビュー) 一時テーブル
データの保存 保存する 保存しない 一時的に保存する
使用目的 永続的なデータストレージ データの再利用、アクセス制御 一時的なデータの操作、中間結果の保存
存続期間 永続的 永続的 セッションまたはトランザクション終了まで
データの更新 直接更新が可能 基になる物理テーブルが更新されると自動的に反映 更新可能だが、永続化されない
他セッションからのアクセス 可能 可能 通常は不可能

BigQueryのテーブルの種類

標準のBigQueryテーブル(物理テーブル)

BigQueryストレージに格納された構造化データ

  • 標準テーブル
  • パーティション分割テーブル
  • クラスタ化テーブル
  • テーブルクローン
  • テーブルスナップショット

外部テーブル(仮想テーブル)

BigQueryのサービス外に格納されたデータを参照するテーブル

  • BigLakeテーブル
  • オブジェクトテーブル
  • BigLake以外の外部テーブル

ビュー(仮想テーブル)

SQLクエリを使用して定義される論理テーブル

  • ビュー
  • マテリアライズドビュー

マルチステートメントクエリの一時テーブル(一時テーブル)

データセット外のBigQueryによって管理される一時的なテーブル

標準のBigQueryテーブル(物理テーブル)

テーブル

BigQueryでクエリの対象になる、標準のBigQueryテーブルです。
構造化データが含まれており、BigQueryストレージにカラムナフォーマットで格納されています。
テーブルには通常のテーブル以外にクエリのパフォーマンスを向上するためにパーティション分割やクラスタ化を行ったテーブルがあります。

パーティション分割テーブル

パーティションと呼ばれるセグメントに分割しているテーブルです。
パーティションに分割することで、クエリのパフォーマンスを高めたり、クエリによって読み取られるバイト数を減らしてコストを抑えることができます。
テーブルの分割に使用するパーティション列を指定することで分割を行えます。

クラスタ化テーブル

クラスタ化列を使用したユーザー定義の列並び替え順序があるテーブルです。
クラスタ化テーブルを使用することで、クエリのパフォーマンスを向上させ、クエリ費用を削減できます。
複数の列を使用してクラスタ化を行った時にはクラスタ化を指定した順番でクラスタがつくられます。
クエリ費用を厳密に見積もる必要のある時やパーティション分割してもパーティションごとの容量がそれぞれ大きい時などに、パーティション分割ではなくクラスタ化が検討されるようになります。

テーブルクローン

別のテーブルの軽量かつ書き込み可能なコピーです。
最初は元のテーブルのストレージにのみ課金されるのでストレージコストは発生しません。
クエリや削除を行なえますが、元のテーブルとは独立しているため変更しても元のテーブルには反映されません。

テーブルスナップショット

特定の時点でのテーブルの内容を保持できます。
テーブルスナップショットからは読み取り専用ですが、標準のテーブルと同じようにクエリを実行できます。
スナップショットからテーブルを復元でき、復元したテーブルは標準のテーブルなので変更が可能です。

外部テーブル(仮想テーブル)

BigLakeテーブル

BigLakeテーブルでは、アクセス権の委任を使用して外部データストアの構造化データをクエリできます。
アクセス権を委任することでCloud Storageなどの外部データストアに対する権限と切り離して権限付与を行なえます。
アクセス権の委任にはクラウドリソース接続を使用する必要があります。
以下データストアがサポートされています。

  • Amazon S3(BigQuery Omni を使用)
  • Blob Storage(BigQuery Omni を使用)
  • Cloud Storage

オブジェクトテーブル

オブジェクトテーブルはCloud Storage内にある非構造データオブジェクトの読み取り専用のテーブルです。
リモート関数で分析を行う、またはBigQuery MLを使用し推論を実行して、これらのオペレーションの結果をBigQueryの残りの構造化データと結合できます。
BigLakeテーブルと同様にアクセス権の委任を利用できます。
オブジェクトテーブル内のメタデータは他のBigQueryと同様にクエリできます。
ただし、メタデータへのクエリから得られる情報は少なく、画像やPDFなどの非構造化データをリモート関数やBigQuery MLを利用して分析できることがオブジェクトテーブルの強みとなります。

BigLake以外の外部テーブル

BigLake以外の外部テーブルでは外部データストアの構造化データをクエリできます。
BigLakeと異なる点は外部テーブルと外部データソースの両方に対する権限が必要になることです。
以下データストアがサポートされています。

  • Bigtable
  • Cloud Storage
  • Google ドライブ
  • Cloud SQL
  • Spanner

ビュー(仮想テーブル)

ビュー

ビューはSQLクエリによって定義される仮想テーブルです。
複雑なクエリやアクセスするデータを絞ったクエリなどを再利用でき、他のユーザーのアクセスを承認できます。
ビューにはテーブルと同様にクエリを実行できます。
呼び出す度にビューに保存されているSQLが実行されるため、大規模なビューや計算負荷の高いビューを頻繁にクエリする場合は、マテリアライズドビューの作成を検討する必要があります。
BigQueryビューは読み取り専用のため自動更新が可能なビューでも、データの挿入、更新、削除するクエリは実行できません。
ビューに対してデータの挿入、更新、削除を行なおうとするとエラーが起こります。

マテリアライズドビュー

BigQueryのマテリアライズドビューは事前に計算されたビューで、パフォーマンスと効率を向上させるためにクエリの結果を定期的にキャッシュに保存します。
BigQueryは、事前に計算されたマテリアライズドビューの結果を利用し、可能な場合にはベーステーブルからの差分のみを読み取って最新の結果を計算します。
直接マテリアライズドビューにクエリするのに参照されるだけでなく、ベーステーブルに対するクエリでもBigQueryオプティマイザーによってマテリアライズドビューを使用するクエリに書き換えられることもあります。
マテリアライズドビューの主な特徴は次の通りです。

  • メンテナンス不要
    ベーステーブルが変更されると変更箇所がマテリアライズドビューに自動で追加されます。

  • 最新のデータ
    マテリアライズドビューは最新のデータを返します。
    ベーステーブルの更新によって最新のデータが返せない場合、増分を取得もしくはベーステーブルから直接読み取るのを自動で行われます。

  • スマートな調整
    ベーステーブルに対するクエリがマテリアライズドビューへのクエリによって解決できる場合はマテリアライズドビューにクエリが行われます。
    これによりパフォーマンスと効率が向上します。
    また、ベーステーブルがパーティショニングに対応していればマテリアライズドビューのパーティショニングを行なえます。

ビューとの違いはコンピューティングの最適化を行えることと増分更新やクエリの書き換えが行えることです。
参考:他のBigQuery技術との比較

マテリアライズドビューの利用にはいくつかの制約があります。
例えば、定義したSQLを変更できないことやSQLの構文に制限があることなどがあります。
詳しい制約については公式ドキュメントをご覧ください。
参考:制限事項

マルチステートメントクエリの一時テーブル(一時テーブル)

一時テーブルを使用すると中間結果をテーブルに保存できます。
データセット内には保存されず、BigQueryによって管理されます。
24時間後に自動的に削除されますが、手動で削除しストレージ費用を最小限に抑えることもできます。
保持された一時テーブルは名前が保持されませんが、クエリ履歴より確認できるランダムな名前を使って_SESSION.${ランダムな名前}で呼び出すことができます。

BigQueryの用途に応じたテーブルの使い分け方

テーブルを用途別にまとめてみました。
()はテーブル以外の選択肢です。
標準テーブルを使うと(外部テーブル以外の)いずれの用途も満たすことができます。

テーブルデータが大規模な場合

  • パーティション分割テーブル
  • クラスタ化テーブル

複雑なクエリを保存・再利用したい場合

  • ビュー
  • マテリアライズドビュー
  • (クエリの保存)

中間の集計結果から参照する複雑なクエリを実行したい場合

  • ビュー
  • マテリアライズドビュー
  • 一時テーブル
  • (CTEやサブクエリ)

BigQuery外のデータを参照したい場合

  • BigLakeテーブル
  • オブジェクトテーブル
  • BigLake以外の外部テーブル

テーブルを保管したい場合

  • テーブルスナップショット
  • (テーブルの長期保存機能※ストレージ料金が約50%になります。)
  • (テーブルエクスポート)

テーブルを一部のみ変更したい場合

  • テーブルクローン

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

reono

2022年4月、NHNテコラスに新卒入社。大学時代は山に登ったり、インドに行ったりしてました。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら