🕟

RDSからBigQueryへのデータ同期で知っておきたいmax_staleness

2025/01/26に公開

RDSからBigQueryへのデータ同期で知っておきたいmax_staleness

Google Cloud の Datastream を利用して、AWS の RDS データベースから BigQuery にデータを同期するケースを考えます。
参考:Datastream for BigQuery のご紹介

RDS のリードレプリカのように、データの変更が即座に BigQuery に反映されるわけではありません。この反映タイミングについては、以下のドキュメントが参考になります。
テーブルの未更新を管理する
BigQuery のmax_staleness オプションで、最新のデータを取得する必要がない場合にクエリのコストや処理時間を削減できるようです。
max_staleness を設定すると、BigQuery はその間隔(例: 15分や30分)内に 最低1回 はテーブルに変更内容を適用します。
つまり、間隔内の変更はまとめて適用される可能性があります。このことで頻繁な更新に伴う計算コストを削減します。
ただし、間隔内の変更をまとめて適用するので、リアルタイム性が求められるユースケースには適しません。

max_staleness とは

max_staleness オプションはどこで設定できるのでしょうか?
Google Cloud のコンソール画面には、この項目が見当たりませんが、
Datastream のストリーム作成時に指定するあの値 のことです。

以下が設定画面の例です。

デフォルトでは 15分 に設定されています。
BigQuery 側に出来たテーブルの max_staleness の値は、ストリーム作成時に指定された、この値になってます。

max_staleness の確認

BigQuery に作成されたテーブルの max_staleness を確認するには、次の SQL を使用します。
例として、sales_data データセットの foods テーブルの値を取得します。

SELECT
  option_name,
  option_value
FROM
  sales_data.INFORMATION_SCHEMA.TABLE_OPTIONS
WHERE
  option_name = 'max_staleness'
  AND table_name = 'foods';

max_staleness の変更

テーブルの max_staleness を変更するには、以下の SQL を実行します。
例として、demo_sales_project プロジェクトの sales_data データセットにある foods テーブルの max_staleness30分 に変更します。

ALTER TABLE demo_sales_project.sales_data.foods
SET OPTIONS (
  max_staleness = INTERVAL 30 MINUTE);

以上が max_staleness の簡単な概要と操作方法です。

Discussion