BigQuery を使用して Bigtable データのクエリと分析を行う

BigQuery は、SQL クエリを使用して Bigtable データのクエリと分析を行うためのマネージド データ ウェアハウスです。BigQuery は、データ アナリスト、データ エンジニア、データ サイエンティストなどが、Bigtable データを使用してビジネス上の疑問の答えを見つけるために役立ちます。

BigQuery では、BigQuery から Bigtable データをクエリできます。この機能は、Bigtable データを BigQuery テーブルに結合する場合に有用です。

このドキュメントでは、BigQuery を使用して Bigtable データをクエリする方法の概要について説明します。このページを読む前に、Bigtable の概要BigQuery の概要を理解する必要があります。

BigQuery を使用して Bigtable テーブルに対してクエリを実行することは、すべての行で同じ列ファミリーと列修飾子を持つテーブルに最適です。

外部テーブルの作成

Bigtable データに対してクエリを実行する前に、ユーザーまたは組織内の管理者は、外部テーブルを作成する必要があります。外部テーブルとは、Bigtable へのメタデータ ポインタを含む BigQuery テーブルで、クエリの送信先となります。外部テーブルの詳細については、外部データソースの概要をご覧ください。

外部テーブルは、Bigtable テーブルと同じリージョンに作成する必要があります。たとえば、テーブルが europe-central2-a(ワルシャワ)、europe-west1-c(ベルギー)、asia-east1-a(東京)にクラスタがあるインスタンスにある場合、外部テーブルはワルシャワ、ベルギー、東京のいずれかに作成する必要があります。

ほとんどの場合、外部テーブルを作成する場合は、readRowkeyAsStringignoreUnspecifiedColumnFamiliestrue に設定します。

ignoreUnspecifiedColumnFamilies が true の場合、列ファミリーの一部の列のみを含むテーブル定義を作成するときに、選択した列のみが外部テーブルの列として昇格されます。選択されていない列のデータは、一般的な column 列の下にグループ化されます。

外部テーブルを作成するには、Bigtable 外部テーブルを作成するの手順に沿って操作します。

外部テーブルのデータをクエリする

Bigtable テーブルの外部テーブルを作成したら、次のいずれかの方法で SQL クエリを送信できます。

クエリを作成して実行する方法については、クエリを実行するをご覧ください。必要な権限とコードサンプルなど、Bigtable 固有の手順については、Bigtable データにクエリを実行するをご覧ください。

スケジュールされたクエリ

スケジュールされたクエリは、Bigtable データを定期的に BigQuery にインポートする場合に便利です。また、データ パイプラインを構築してデータを BigQuery にストリーミングする必要があるユースケースにも役立ちます。スケジュールされたクエリの管理手順については、クエリのスケジューリングをご覧ください。

テーブルのフルスキャンを回避する

Bigtable テーブルに直接読み取りリクエストを送信する場合と同様に、外部テーブルにテーブルをクエリするとき、通常はテーブル全体のスキャンを回避したいと考えます。テーブルのフルスキャンでは CPU 使用率が増加し、選択的なクエリよりもかなり時間がかかります。また、BigQuery のスループットの向上も必要とされます。

クエリにすべての行が関係する場合は、テーブルのフルスキャンがトリガーされます。一方、クエリを制限して行の範囲または指定された非連続行をリクエストした場合、テーブル全体のスキャンができません。GoogleSQL 構文でクエリを制限する例を次に示します。

  • WHERE rowkey = "abc123"
  • WHERE rowkey BETWEEN "abc123" PRECEDING AND "abc999" FOLLOWING
  • WHERE rowkey > 999999(行キーを文字列として読み取る場合)

結合

結合を使用して、Bigtable テーブルデータを他のソースのデータと組み合わせて分析する場合は、予定している結合のために Bigtable から関連フィールドを抽出するサブクエリを作成する必要があります。テーブルの結合に関するその他のベスト プラクティスについては、クエリ計算を最適化するをご覧ください。

費用

外部テーブルを作成してクエリを実行すると、BigQuery の料金と、トラフィックの処理に必要な Bigtable ノードの増加に対して料金が発生します。外部テーブルは Bigtable テーブルと同じリージョンにあるため、ネットワーク費用は発生しません。

通常の営業時間内にクエリを実行する傾向がある場合は、Bigtable の自動スケーリングを有効にして、必要に応じてノード数を増やし、ジョブの完了後に減らすことを検討してください。厳密な期限がないスケジュール設定されたクエリを実行する場合にも、自動スケーリングは効果的な戦術です。

費用を制限するもう 1 つの方法は、テーブル全体のスキャンを回避することです。

BigQuery の費用の最適化の詳細については、費用の見積もりと管理をご覧ください。

制限事項

次の制限が適用されます。

  • BigQuery を使用して、JSON 形式で保存されている Bigtable データをクエリすることはできません。
  • プロトコル バッファ(protobuf)や Avro 形式など、ネストされた型を持つシリアル化されたデータを含むクエリ結果は、正しくレンダリングされないか、Google Cloud コンソールで読み取るのが困難な場合があります。

次のステップ