BigQuery で Bigtable の変更ログをクエリする
このページでは、BigQuery で Bigtable 変更ログを処理する際に役立つガイダンスとサンプルクエリについて説明します。
このページは、以下を完了しているユーザーを対象としています。
- Bigtable 変更ストリーム対応テーブルを設定する。
- 変更ログを BigQuery に書き込む Dataflow テンプレートを実行する。設定方法については、クイックスタートをご覧ください。
このガイドは、BigQuery についてある程度の知識があることを前提としています。詳細については、データの読み込みとクエリの方法を説明するクイックスタートをご覧ください。
変更ログテーブルを開く
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] ペインでプロジェクト を展開します。
データセットを開きます。
サフィックス
_changelog
の付いたテーブルをクリックします。
表形式
出力スキーマ全体にはいくつかの列が含まれます。このガイドでは、行を列と値に接続し、値を解析して分析可能な形式に変換することに重点を置いて説明します。
基本的なクエリ
このセクションの例では、Bigtable テーブルを使用してクレジット カードによる売上を追跡します。このテーブルには、1 つの列ファミリー(cf
)と次の列があります。
credit card number
#transaction timestamp
形式の行キー- 販売者
- 金額
- カテゴリ
- 取引日
1 つの列をクエリする
WHERE
句を使用して、結果を 1 つの列ファミリーと 1 つの列だけにフィルタリングします。
SELECT row_key, column_family, column, value, timestamp,
FROM your_dataset.your_table
WHERE
mod_type="SET_CELL"
AND column_family="cf"
AND column="merchant"
LIMIT 1000
値を解析する
すべての値は文字列またはバイト文字列として格納されます。変換関数を使用して、値を目的の型にキャストします。
SELECT row_key, column_family, column, value, CAST(value AS NUMERIC) AS amount
FROM your_dataset.your_table
WHERE
mod_type="SET_CELL"
AND column_family="cf"
AND column="amount"
LIMIT 1000
集計を実行する
数値の集計など、その他の操作も実行できます。
SELECT SUM(CAST(value AS NUMERIC)) as total_amount
FROM your_dataset.your_table
WHERE
mod_type="SET_CELL"
AND column_family="cf"
AND column="amount"
データをピボット処理する
複数の Bigtable 列が関係するクエリを実行するには、テーブルをピボットにする必要があります。新しい BigQuery の各行には、変更ストリームによって Bigtable テーブルの対応行から返された 1 つのデータ変更レコードが含まれます。スキーマによっては、行キーとタイムスタンプの組み合わせを使用してデータをグループ化できます。
SELECT * FROM (
SELECT row_key, timestamp, column, value
FROM your_dataset.your_table
)
PIVOT (
MAX(value)
FOR column in ("merchant", "amount", "category", "transaction_date")
)
動的な列セットを使用したピボット
列の動的セットがある場合は、追加の処理を行って、すべての列を取得し、プログラムでクエリに入れることができます。
DECLARE cols STRING;
SET cols = (
SELECT CONCAT('("', STRING_AGG(DISTINCT column, '", "'), '")'),
FROM your_dataset.your_table
);
EXECUTE IMMEDIATE format("""
SELECT * FROM (
SELECT row_key, timestamp, column, value
FROM your_dataset.your_table
)
PIVOT (
MAX(value)
FOR column in %s
)""", cols);
JSON データ
すべての値を JSON で設定する場合は、値を解析して、キーに基づいて値を抽出する必要があります。JSON オブジェクトから値を導出したら、解析関数を使用します。これらの例では、以前にご紹介したクレジット カード販売データを使用していますが、複数の列にデータを書き込むのではなく、1 つの列として JSON オブジェクトとしてデータが書き込まれます。
SELECT
row_key,
JSON_VALUE(value, "$.category") as category,
CAST(JSON_VALUE(value, "$.amount") AS NUMERIC) as amount
FROM your_dataset.your_table
LIMIT 1000
JSON を使用した集計クエリ
JSON 値を使用して集計クエリを実行できます。
SELECT
JSON_VALUE(value, "$.category") as category,
SUM(CAST(JSON_VALUE(value, "$.amount") AS NUMERIC)) as total_amount
FROM your_dataset.your_table
GROUP BY category
次のステップ
- Bigtable 変更ストリームの詳細を確認する。
- BigQuery テンプレートへの Cloud Bigtable 変更ストリームのリファレンス ページを参照する。
- Bigtable change stream to BigQuery テンプレートの設定方法を学習する。