メインコンテンツまでスキップ

イベントログで取り込みゲートウェイの進行状況を監視する

適用対象 :赤い×印のアイコン SaaSコネクタ緑色のチェックマークデータベースコネクタ

イベント Logs を使用して、インジェクションゲートウェイの進行状況をリアルタイムで監視する方法を学びます。ゲートウェイはスナップショットフェーズとチェンジデータキャプチャ(CDC)フェーズの両方についてテーブルごとのメトリクスを出力するため、パイプラインの健全性を追跡し、停滞しているテーブルを特定し、構造化イベントデータからアラートとダッシュボードを作成できます。

進捗イベントでは次のことが可能になります。

  • パイプラインの完了を待たずに、テーブルごとに取り込まれた行数とバイト数を追跡します。
  • 大規模な初回ロードのスナップショットの進捗状況と完了予定時間を監視します。
  • 各テーブルについて、ソースの commit から Unity Catalog ボリュームまでの CDC レイテンシを測定します。
  • データに変更がない場合でも、パイプラインがアクティブに実行されていることを確認します。

進捗イベントの仕組み​

ゲートウェイは、パイプライン内の各テーブルについて 5 分ごとに次のイベント型を出力します。最初のイベントは、パイプラインの開始から 5 分以内に表示されます。

  • flow_progress: スナップショットとCDCフローの両方に対して発行されます。アップサートされた行、削除された行(CDCのみ)、および前回のイベント以降の出力バイト数を報告します。CDCフローの場合は、レイテンシーメトリクスも報告します。
  • operation_progress: スナップショット フローでのみ出力されます。スナップショット完了率とスナップショットが終了するまでの推定残り時間をレポートします。

イベントは、前のイベントから変更がないテーブルを含め、すべてのテーブルに対して発行されます。0 行のテーブルはアイドル状態です。イベントが報告されないテーブルは、パイプラインによって取得されていません。

両方のイベントタイプで METRICS ログレベルが使用されます。SQL を使用してイベントログテーブルからこれらをクエリーできます。

アクセス進行イベント​

進行状況イベントはイベント ログ テーブルに保存されます。アクセスするには:

  1. Databricks ワークスペースでゲートウェイに移動します。
  2. UI でイベントを表示するには、 「イベント ログ」 タブをクリックします。
  3. 詳細な分析を行うには、SQL を使用してイベント ログ テーブルを直接クエリします。

イベントログテーブルをクエリする​

flow_progressイベントの行数とバイト数を照会するには:

SQL
SELECT
timestamp,
CONCAT(origin.catalog_name, '.', origin.schema_name, '.', origin.dataset_name) AS table_name,
details:flow_progress:metrics:num_upserted_rows::bigint AS rows_upserted,
COALESCE(details:flow_progress:metrics:num_deleted_rows::bigint, 0) AS rows_deleted,
details:flow_progress:metrics:num_output_bytes::bigint AS output_bytes,
CASE
WHEN origin.flow_name LIKE '%_snapshot_flow' THEN 'snapshot'
WHEN origin.flow_name LIKE '%_cdc_flow' THEN 'cdc'
ELSE 'unknown'
END AS ingestion_phase
FROM event_log('<pipeline-id>')
WHERE event_type = 'flow_progress'
AND level = 'METRICS'
AND origin.pipeline_type = 'INGESTION_GATEWAY'
ORDER BY timestamp DESC

スナップショットの進行状況パーセンテージを取得するために、 operation_progressイベントを照会するには:

SQL
SELECT
timestamp,
origin.flow_name AS flow_name,
details:operation_progress:status::string AS status,
details:operation_progress:progress_percent::double AS progress_pct
FROM event_log('<pipeline-id>')
WHERE event_type = 'operation_progress'
AND level = 'METRICS'
AND origin.pipeline_type = 'INGESTION_GATEWAY'
ORDER BY timestamp DESC

<pipeline-id>ゲートウェイ ID に置き換えます。

イベントの構造を理解する​

以下の例は、各イベントタイプのJSON構造を示しています。

スナップショットフローの進行状況イベント構造

JSON
{
"id": "01234567-89ab-cdef-0123-456789abcdef",
"timestamp": "2025-10-14T13:33:14.175Z",
"level": "METRICS",
"event_type": "flow_progress",
"origin": {
"pipeline_type": "INGESTION_GATEWAY",
"pipeline_name": "MyPipeline",
"dataset_name": "customers",
"catalog_name": "main",
"schema_name": "sales",
"flow_name": "main.sales.customers_snapshot_flow",
"ingestion_source_type": "SQLSERVER"
},
"message": "Completed a streaming update of 'main.sales.customers_snapshot_flow'.",
"details": {
"flow_progress": {
"status": "RUNNING",
"metrics": {
"num_upserted_rows": 7512704,
"num_deleted_rows": null,
"num_output_bytes": 458752000
}
}
},
"maturity_level": "STABLE"
}

CDCフロー進行イベント構造

JSON
{
"id": "01234567-89ab-cdef-0123-456789abcdef",
"timestamp": "2025-10-14T13:33:57.426Z",
"level": "METRICS",
"event_type": "flow_progress",
"origin": {
"pipeline_type": "INGESTION_GATEWAY",
"pipeline_name": "MyPipeline",
"dataset_name": "customers",
"catalog_name": "main",
"schema_name": "sales",
"flow_name": "main.sales.customers_cdc_flow",
"ingestion_source_type": "SQLSERVER"
},
"message": "Completed a streaming update of 'main.sales.customers_cdc_flow'.",
"details": {
"flow_progress": {
"status": "RUNNING",
"metrics": {
"num_upserted_rows": 25,
"num_deleted_rows": 3,
"num_output_bytes": 18432
},
"streaming_metrics": {
"discovery_latency_ms": 12450,
"batch_processing_time_ms": 8100,
"event_time": {
"max": "2025-10-14T13:33:45.000Z"
}
}
}
},
"maturity_level": "STABLE"
}

スナップショット操作の進行状況イベント構造

JSON
{
"id": "01234567-89ab-cdef-0123-456789abcdef",
"timestamp": "2025-10-14T13:33:14.175Z",
"level": "METRICS",
"event_type": "operation_progress",
"origin": {
"pipeline_type": "INGESTION_GATEWAY",
"pipeline_name": "MyPipeline",
"dataset_name": "customers",
"catalog_name": "main",
"schema_name": "sales",
"flow_name": "main.sales.customers_snapshot_flow",
"ingestion_source_type": "SQLSERVER"
},
"message": "Snapshot in progress for 'main.sales.customers'.",
"details": {
"operation_progress": {
"type": "CDC_SNAPSHOT",
"status": "IN_PROGRESS",
"duration_ms": 3600000,
"progress_percent": 65.5,
"estimated_completion_ms": 1885000,
"cdc_snapshot": {
"target_table_name": "main.sales.customers",
"snapshot_timestamp": 1737542400000,
"snapshot_reason": "NEW_TABLE"
}
}
},
"maturity_level": "STABLE"
}

イベントフィールド​

次の表は、進行状況イベントの主要なフィールドについて説明しています。

フィールド

Type

説明

event_type

String

flow_progress (スナップショットとCDCの行数とバイト数のカウンター)またはoperation_progress (スナップショットの進行状況のパーセンテージ)。

level

String

常にMETRICS 。

timestamp

String

イベントが生成された際の ISO 8601 タイムスタンプ。

origin.pipeline_type

String

常にINGESTION_GATEWAY 。

origin.pipeline_name

String

ゲートウェイの名前。

origin.dataset_name

String

取り込まれるテーブルの名前。

origin.catalog_name

String

Unity Catalogカタログ名。

origin.schema_name

String

Unity Catalogスキーマ名。

origin.flow_name

String

取り込みフェーズを示すフロー識別子。形式: 初期ロードの場合は{catalog}.{schema}.{table}_snapshot_flow 、増分変更の場合は{catalog}.{schema}.{table}_cdc_flow 。

origin.ingestion_source_type

String

ソース データベースの種類 (例: SQLSERVER 、 MYSQL 、 POSTGRESQL 、 ORACLE )。

details:flow_progress:status

String

現在のフローのステータス。通常はRUNNING 。

details:flow_progress:metrics:num_upserted_rows

Integer

前回のイベント以降に挿入または更新された行数。Deltaメトリクス。行とバイトのカウンターを参照してください。

details:flow_progress:metrics:num_deleted_rows

Integer

前回のイベント以降に削除された行数。Deltaメトリクス。スナップショットフローの nullです。

details:flow_progress:metrics:num_output_bytes

Integer

最後のイベント以降にボリュームにuploadされた圧縮バイト数。Deltaメトリクス。クエリーベースのコネクタスナップショットについては報告されません。クエリーベースのコネクタスナップショットを参照してください。

details:flow_progress:streaming_metrics:discovery_latency_ms

Integer

event_time:maxにおけるソースの変化からこのイベントが発信されるまでの時間(ミリ秒)。CDCフローのみです。ソースが変更タイムスタンプを公開していない場合、「null」になります。

details:flow_progress:streaming_metrics:batch_processing_time_ms

Integer

ゲートウェイが最新の変更バッチの読み取りとアップロードに費やしたミリ秒。ソース側の遅延は含まれません。CDCフローのみです。最初のバッチが完了するまで、null になります。

details:flow_progress:streaming_metrics:event_time:max

String

このテーブルについてゲートウェイが読み取った最新のソース変更のISO 8601タイムスタンプです。CDCフローのみです。

details:operation_progress:type

String

操作の種類。スナップショット操作の場合はCDC_SNAPSHOT 。

details:operation_progress:status

String

現在の稼働状況。スナップショットが実行されている間IN_PROGRESS、終了COMPLETED。その他の値としては、STARTED、CANCELED、FAILEDなどがあります。クエリベースのコネクタスナップショットを実行するゲートウェイも、テーブルがキューに入っている間にこの SCHEDULED を報告します。クエリーベースのコネクタスナップショットを参照してください。

details:operation_progress:duration_ms

Integer

操作にかかった合計時間(ミリ秒)。

details:operation_progress:progress_percent

Double

スナップショットの完了率 (0.0 - 100.0)。累積。スナップショットの進行状況と予定終了時刻を参照してください。

details:operation_progress:estimated_completion_ms

Integer

スナップショットが終了するまでにかかる推定残り時間(ミリ秒)。スナップショットの進行状況と到着予定時刻を参照してください。

details:operation_progress:cdc_snapshot:target_table_name

String

スナップショットを作成するテーブルの完全修飾名。

maturity_level

String

常にSTABLE 。

フィールド

Type

説明

event_type

String

flow_progress (スナップショットとCDCの行数とバイト数のカウンター)またはoperation_progress (スナップショットの進行状況のパーセンテージ)。

level

String

常にMETRICS 。

timestamp

String

イベントが生成された際の ISO 8601 タイムスタンプ。

origin.pipeline_type

String

常にINGESTION_GATEWAY 。

origin.pipeline_name

String

ゲートウェイの名前。

origin.dataset_name

String

取り込まれるテーブルの名前。

origin.catalog_name

String

Unity Catalogカタログ名。

origin.schema_name

String

Unity Catalogスキーマ名。

origin.flow_name

String

取り込みフェーズを示すフロー識別子。形式: 初期ロードの場合は{catalog}.{schema}.{table}_snapshot_flow 、増分変更の場合は{catalog}.{schema}.{table}_cdc_flow 。

origin.ingestion_source_type

String

ソース データベースの種類 (例: SQLSERVER 、 MYSQL 、 POSTGRESQL 、 ORACLE )。

details:flow_progress:status

String

現在のフローのステータス。通常はRUNNING 。

details:flow_progress:metrics:num_upserted_rows

Integer

前回のイベント以降に挿入または更新された行数。Deltaメトリクス。行とバイトのカウンターを参照してください。

details:flow_progress:metrics:num_deleted_rows

Integer

前回のイベント以降に削除された行数。Deltaメトリクス。スナップショットフローの nullです。

details:flow_progress:metrics:num_output_bytes

Integer

最後のイベント以降にボリュームにuploadされた圧縮バイト数。Deltaメトリクス。クエリーベースのコネクタスナップショットについては報告されません。クエリーベースのコネクタスナップショットを参照してください。

details:flow_progress:streaming_metrics:discovery_latency_ms

Integer

event_time:maxにおけるソースの変化からこのイベントが発信されるまでの時間(ミリ秒)。CDCフローのみです。ソースが変更タイムスタンプを公開していない場合、「null」になります。

details:flow_progress:streaming_metrics:batch_processing_time_ms

Integer

ゲートウェイが最新の変更バッチの読み取りとアップロードに費やしたミリ秒。ソース側の遅延は含まれません。CDCフローのみです。最初のバッチが完了するまで、null になります。

details:flow_progress:streaming_metrics:event_time:max

String

このテーブルについてゲートウェイが読み取った最新のソース変更のISO 8601タイムスタンプです。CDCフローのみです。

details:operation_progress:type

String

操作の種類。スナップショット操作の場合はCDC_SNAPSHOT 。

details:operation_progress:status

String

現在の稼働状況。スナップショットが実行されている間IN_PROGRESS、終了COMPLETED。その他の値としては、STARTED、CANCELED、FAILEDなどがあります。クエリベースのコネクタスナップショットを実行するゲートウェイも、テーブルがキューに入っている間にこの SCHEDULED を報告します。クエリーベースのコネクタスナップショットを参照してください。

details:operation_progress:duration_ms

Integer

操作にかかった合計時間(ミリ秒)。

details:operation_progress:progress_percent

Double

スナップショットの完了率 (0.0 - 100.0)。累積。スナップショットの進行状況と予定終了時刻を参照してください。

details:operation_progress:estimated_completion_ms

Integer

スナップショットが終了するまでにかかる推定残り時間(ミリ秒)。スナップショットの進行状況と到着予定時刻を参照してください。

details:operation_progress:cdc_snapshot:target_table_name

String

スナップショットを作成するテーブルの完全修飾名。

maturity_level

String

常にSTABLE 。

進捗のメトリクスの解釈​

行およびバイトカウンター​

num_upserted_rows、num_deleted_rows、および num_output_bytes に適用されます。

  • 各値は差分です。これは累積合計ではなく、前のイベントからの変化を表します。合計を計算するには、各イベントの値を合計してください。行数クエリーをご覧ください。
  • データに変更がない場合でもイベントは発行されます。ゼロ値は、パイプラインが実行されていることを確認するライブネスシグナルとして機能します。
  • num_deleted_rows はスナップショットフローの null です。スナップショットは削除を生成しないためです。
  • カウンターは、パイプラインが再起動、更新、または再開されるとResetされます。再起動前に出力されたイベントは、イベントログに残ります。

スナップショットの進捗状況と完了予定時刻​

progress_percentおよびestimated_completion_msに適用されます。

  • progress_percent は累積的です。スナップショットのライフサイクル全体にわたって 0.0 から 100.0 まで累積します。
  • progress_percent は (completed_chunks / total_chunks) × 100 として計算されるため、正確な行レベルのパーセンテージではなく、概算です。複数のチャンクに分割されていないテーブル(通常は小さいテーブル)は、0.0 から直接 100.0 にジャンプします。多くのチャンクに分割される大きなテーブルは、各チャンクの完了に伴い徐々に更新されます。
  • COMPLETEDステータスはprogress_percent = 100.0を報告します。
  • パイプラインを再起動すると、progress_percent を含む進捗メトリクスがReset される可能性があります。
  • estimated_completion_ms イベントが発行された時点での見積もりを反映します。スナップショットの進行に伴って減少し、完了すると 0 になります。進捗が遅くなると一時的に増加する可能性があり、見積もりを作成するのに十分なデータが処理されるまで null となります。

CDCレイテンシ​

event_time:max、 discovery_latency_ms、および batch_processing_time_msに適用されます。これらのメトリクスは、CDCフローに対してのみ報告されます。

  • 各値は、イベントが発行された瞬間のメトリクスの状態を反映しています。
  • これらは、インジェクションゲートウェイの遅延です。これらは、ソースデータベースからゲートウェイを経由して Unity Catalog ボリュームに至るパスを測定します。これらには、Unity Catalog ボリュームから宛先テーブルまでのダウンストリームの遅延は含まれません。これらはインジェクションパイプラインのイベントログで別途報告されます。
  • ソース側のラグを推定するには、discovery_latency_ms から batch_processing_time_ms を減算します。
  • discovery_latency_ms また、結果が負になる場合は、 batch_processing_time_msは 0として報告されます。

これらのメトリクスの関係から、ゲートウェイパスのどの地点でレイテンシが集中しているかがわかります:

パターン

意味

discovery_latency_ms と batch_processing_time_ms の両方が小文字

CDC は実行中で、最新の状態です。

discovery_latency_ms 高い、batch_processing_time_ms 低い

ソース側の遅延。ゲートウェイは速やかに読んでいます。ソースからコミットが遅延しました(レプリケーションの遅延、ソースログのバックログ、実行時間の長いソーストランザクション)。

両方とも高い

ゲートウェイ側の遅延。アップロードパイプラインはボトルネックです。ゲートウェイコンピュートリソースおよびUnity Catalogボリュームへのネットワークパスを確認してください。

discovery_latency_ms 1つのテーブルのみに限定されます。

テーブルごとのソースの問題(DDL処理中、ロック競合、ブロックされたレプリケーションスロット、スキーマ変更)

discovery_latency_ms 各テーブルで増分されます

ゲートウェイ全体での問題(リソース、ボリューム接続、ソース CDC ログバックログ、すべてのキャプチャに影響)

event_time:max 複数の排出物にわたって進んでいない

ソースはアイドル状態です、またはゲートウェイがソースデータベースへの接続を失いました。ソース CDC の有効化とゲートウェイログを確認してください。

パターン

意味

discovery_latency_ms と batch_processing_time_ms の両方が小文字

CDC は実行中で、最新の状態です。

discovery_latency_ms 高い、batch_processing_time_ms 低い

ソース側の遅延。ゲートウェイは速やかに読んでいます。ソースからコミットが遅延しました(レプリケーションの遅延、ソースログのバックログ、実行時間の長いソーストランザクション)。

両方とも高い

ゲートウェイ側の遅延。アップロードパイプラインはボトルネックです。ゲートウェイコンピュートリソースおよびUnity Catalogボリュームへのネットワークパスを確認してください。

discovery_latency_ms 1つのテーブルのみに限定されます。

テーブルごとのソースの問題(DDL処理中、ロック競合、ブロックされたレプリケーションスロット、スキーマ変更)

discovery_latency_ms 各テーブルで増分されます

ゲートウェイ全体での問題(リソース、ボリューム接続、ソース CDC ログバックログ、すべてのキャプチャに影響)

event_time:max 複数の排出物にわたって進んでいない

ソースはアイドル状態です、またはゲートウェイがソースデータベースへの接続を失いました。ソース CDC の有効化とゲートウェイログを確認してください。

クエリーベースのコネクタスナップショット​

ゲートウェイがクエリーベースのコネクタ(QBC)メソッドを使用して初期スナップショットを実行すると、このページで説明されているのと同じスナップショットメトリクスが出力されます。行数には flow_progress イベント、進捗率と推定残り時間 (estimated_completion_ms) には operation_progress イベントが使用されます。

これらのメトリクスは、取り込みゲートウェイからのみ取得されます。ゲートウェイなしで実行されるクエリーベースのコネクタパイプライン(接続を介してソースを直接読み取るパイプライン)はそれらを出力しないため、そのイベントlogsにはスナップショットの進捗イベントが含まれません。

QBC スナップショットは、以下の点でゲートウェイ スナップショット(レガシー)と異なります。

  • 出力バイト数は報告されません。 flow_progressイベントは行数(num_upserted_rows)を報告しますが、num_output_bytesは報告しません。出力バイトクエリーにあるような、出力バイトを読み取るクエリーは、QBCスナップショットのデータを返しません。代わりに、行数メトリクスを使用してボリュームを追跡してください。
  • テーブルはSCHEDULEDステータスを報告します。 各テーブルはスナップショット開始前にキュー中に SCHEDULED を報告します。ゲートウェイのスナップショット(レガシー)はキュー状態を報告しません。
  • 一部の operation_progress フィールドが入力されていません。 duration_ms フィールドと cdc_snapshot.snapshot_reason フィールドは、QBC スナップショットには設定されていません。

QBCスナップショットを監視するには、スナップショット進捗クエリーでスナップショットの進行状況クエリーを使用し、推定残余時間のテーブルごとのスナップショットETAクエリーも含めて使用してください。

QBCスナップショットがキュー中のテーブルをどのように報告するかのクエリーを調整してください。そのセクションのクエリーは、 0の進行率でキュー中のテーブルを識別しますが、QBCスナップショットは SCHEDULED ステータスのテーブルを報告し、進捗率は報告しません。正しく分類またはカウントするには、以下の条件を変更してステータスを確認してください。

  • progress_pct = 0 条件を status = 'SCHEDULED' に置き換えます。
  • 「テーブルごとのスナップショット ETA」クエリーにキューに入れられたテーブルを含めるには、その status = 'IN_PROGRESS' フィルターを status IN ('IN_PROGRESS', 'SCHEDULED') に変更します。

サンプルクエリ​

以下のサンプルクエリは、行数、出力バイト数、スナップショットの進捗状況とETA、およびCDCレイテンシーメトリクスを使用してゲートウェイを監視する方法を示しています。各クエリで、<pipeline-id>をゲートウェイIDに置き換えます。

ヒント

取り込みゲートウェイ プログレスモニターノートブックには、このセクションのすべてのクエリーが含まれています。ゲートウェイが実行されているワークスペースにノートブックをインポートし、ゲートウェイ ID を指定してください。スナップショットの進捗、CDCレイテンシー、および行数を検査するためにノートブックを実行してください。モニタリング要件に合わせてSLAしきい値を調整することもできます。

行数クエリ​

テーブルごとの売上高(過去24時間)​

過去24時間における各テーブルのアップサートと削除の合計数。取り込みフェーズはフロー名の接尾辞から分類されます。これをダッシュボードの見出しとして使用すれば、どのテーブルが最も多くのデータを移動したかを確認できます。

SQL
WITH row_events AS (
SELECT
origin.flow_name AS flow_name,
CASE
WHEN origin.flow_name LIKE '%_snapshot_flow' THEN 'SNAPSHOT'
WHEN origin.flow_name LIKE '%_cdc_flow' THEN 'CDC'
ELSE 'OTHER'
END AS phase,
details:flow_progress:metrics:num_upserted_rows::bigint AS upserts,
details:flow_progress:metrics:num_deleted_rows::bigint AS deletes
FROM event_log('<pipeline-id>')
WHERE event_type = 'flow_progress'
AND level = 'METRICS'
AND timestamp >= current_timestamp() - INTERVAL 24 HOURS
)
SELECT
flow_name,
phase,
SUM(upserts) AS rows_upserted_24h,
SUM(COALESCE(deletes, 0)) AS rows_deleted_24h,
SUM(upserts) + SUM(COALESCE(deletes, 0)) AS total_rows_moved_24h
FROM row_events
GROUP BY flow_name, phase
ORDER BY total_rows_moved_24h DESC

サイレントテーブルまたはスタックテーブルを特定する​

イベントを発信しているにもかかわらず、過去60分間にアップサートと削除がゼロであると報告しているテーブルは、「スタック」状態になる可能性が高い。番号を変更する必要があるかどうか、さらに調査してください。 CDCの表のうち、実際に利用されていないもの(例えば、夜間など)もここに表示されます。

SQL
WITH recent_window AS (
SELECT
origin.flow_name AS flow_name,
CASE
WHEN origin.flow_name LIKE '%_snapshot_flow' THEN 'SNAPSHOT'
WHEN origin.flow_name LIKE '%_cdc_flow' THEN 'CDC'
ELSE 'OTHER'
END AS phase,
COUNT(*) AS emissions_in_window,
SUM(details:flow_progress:metrics:num_upserted_rows::bigint) AS upserts_in_window,
SUM(COALESCE(details:flow_progress:metrics:num_deleted_rows::bigint, 0)) AS deletes_in_window,
MAX(timestamp) AS last_event
FROM event_log('<pipeline-id>')
WHERE event_type = 'flow_progress'
AND level = 'METRICS'
AND timestamp >= current_timestamp() - INTERVAL 60 MINUTES
GROUP BY origin.flow_name
)
SELECT
flow_name,
phase,
emissions_in_window,
upserts_in_window,
deletes_in_window,
last_event,
ROUND(TIMESTAMPDIFF(MINUTE, last_event, current_timestamp()), 0) AS minutes_since_last_event
FROM recent_window
WHERE upserts_in_window = 0
AND deletes_in_window = 0
ORDER BY minutes_since_last_event DESC

テーブルごとのタイムラインと累計値​

過去24時間における、単一のフローに関するイベントごとの完全な履歴と、累積行数。<flow-pattern> SQL LIKEパターン (例: '%customers%_cdc_flow' ) に置き換えます。

SQL
SELECT
origin.flow_name AS flow_name,
origin.update_id AS update_id,
timestamp,
details:flow_progress:metrics:num_upserted_rows::bigint AS upserts_this_period,
COALESCE(details:flow_progress:metrics:num_deleted_rows::bigint, 0) AS deletes_this_period,
SUM(details:flow_progress:metrics:num_upserted_rows::bigint)
OVER (PARTITION BY origin.flow_name, origin.update_id
ORDER BY timestamp
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_upserts_this_run,
SUM(COALESCE(details:flow_progress:metrics:num_deleted_rows::bigint, 0))
OVER (PARTITION BY origin.flow_name, origin.update_id
ORDER BY timestamp
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_deletes_this_run
FROM event_log('<pipeline-id>')
WHERE event_type = 'flow_progress'
AND level = 'METRICS'
AND origin.flow_name LIKE '<flow-pattern>'
AND timestamp >= current_timestamp() - INTERVAL 24 HOURS
ORDER BY timestamp

出力バイトクエリ​

テーブルあたりのバイト数(過去24時間)​

過去24時間にテーブルごとにボリュームにアップロードされた合計バイト数(MBおよびGB単位)。最もデータ量の多いテーブルを表示するには、降順で並べ替えてください。

SQL
WITH byte_events AS (
SELECT
origin.flow_name AS flow_name,
CASE
WHEN origin.flow_name LIKE '%_snapshot_flow' THEN 'SNAPSHOT'
WHEN origin.flow_name LIKE '%_cdc_flow' THEN 'CDC'
ELSE 'OTHER'
END AS phase,
details:flow_progress:metrics:num_output_bytes::bigint AS output_bytes
FROM event_log('<pipeline-id>')
WHERE event_type = 'flow_progress'
AND level = 'METRICS'
AND timestamp >= current_timestamp() - INTERVAL 24 HOURS
)
SELECT
flow_name,
phase,
SUM(output_bytes) AS bytes_24h,
ROUND(SUM(output_bytes) / 1024.0 / 1024.0, 2) AS mb_24h,
ROUND(SUM(output_bytes) / 1024.0 / 1024.0 / 1024.0, 3) AS gb_24h
FROM byte_events
GROUP BY flow_name, phase
ORDER BY bytes_24h DESC

スループットの傾向(MB/分)​

過去24時間における全フローでのアップロードバイト数の、1分ごとの時系列データ。スループットのパターンや停滞箇所を特定するために、折れ線グラフとして表示します。

SQL
SELECT
DATE_TRUNC('MINUTE', timestamp) AS ts_minute,
origin.flow_name AS flow_name,
CASE
WHEN origin.flow_name LIKE '%_snapshot_flow' THEN 'SNAPSHOT'
WHEN origin.flow_name LIKE '%_cdc_flow' THEN 'CDC'
ELSE 'OTHER'
END AS phase,
ROUND(SUM(details:flow_progress:metrics:num_output_bytes::bigint) / 1024.0 / 1024.0, 2) AS mb_per_minute
FROM event_log('<pipeline-id>')
WHERE event_type = 'flow_progress'
AND level = 'METRICS'
AND timestamp >= current_timestamp() - INTERVAL 24 HOURS
GROUP BY DATE_TRUNC('MINUTE', timestamp), origin.flow_name
ORDER BY origin.flow_name, ts_minute

行あたりの平均バイト数(ワイドテーブルまたはLOB検出器)​

num_output_bytesと行数を結合して、テーブルごとの行ごとの平均バイト数を計算します。 高い値は通常、スループットコストを押し上げるLOBテーブルまたはワイドスキーマテーブルを示しています。キャパシティプランニングやスキーマレビューに役立ちます。

SQL
WITH joined AS (
SELECT
origin.flow_name AS flow_name,
CASE
WHEN origin.flow_name LIKE '%_snapshot_flow' THEN 'SNAPSHOT'
WHEN origin.flow_name LIKE '%_cdc_flow' THEN 'CDC'
ELSE 'OTHER'
END AS phase,
SUM(details:flow_progress:metrics:num_output_bytes::bigint) AS total_bytes,
SUM(details:flow_progress:metrics:num_upserted_rows::bigint) AS total_upserts,
SUM(COALESCE(details:flow_progress:metrics:num_deleted_rows::bigint, 0)) AS total_deletes
FROM event_log('<pipeline-id>')
WHERE event_type = 'flow_progress'
AND level = 'METRICS'
AND timestamp >= current_timestamp() - INTERVAL 24 HOURS
GROUP BY origin.flow_name
)
SELECT
flow_name,
phase,
total_upserts + total_deletes AS total_rows,
ROUND(total_bytes / 1024.0 / 1024.0, 2) AS total_mb,
ROUND(total_bytes / NULLIF(total_upserts + total_deletes, 0), 0) AS avg_bytes_per_row
FROM joined
WHERE total_bytes > 0
ORDER BY avg_bytes_per_row DESC

スナップショットの進捗状況に関するクエリ​

全体的なスナップショットの進捗状況​

次のクエリは、完了、進行中、またはキューにあるテーブルの数の単一行の概要を返します。結果には、イベントログの保持期間内におけるすべてのパイプライン更新を通じて、テーブルごとに報告された最新の状態が反映されます。そのため、以前の更新で完了したテーブルは、更新または再起動後も引き続きtables_completedにカウントされます。

SQL
WITH latest_per_table AS (
SELECT
origin.flow_name AS flow_name,
details:operation_progress:status::string AS status,
details:operation_progress:progress_percent::double AS progress_pct,
ROW_NUMBER() OVER (PARTITION BY origin.flow_name ORDER BY timestamp DESC) AS rn
FROM event_log('<pipeline-id>')
WHERE event_type = 'operation_progress'
AND level = 'METRICS'
AND origin.flow_name IS NOT NULL
AND origin.pipeline_type = 'INGESTION_GATEWAY'
)
SELECT
COUNT(*) AS total_tables,
SUM(CASE WHEN status = 'COMPLETED' THEN 1 ELSE 0 END) AS tables_completed,
SUM(CASE WHEN status = 'IN_PROGRESS' AND progress_pct > 0 AND progress_pct < 100 THEN 1 ELSE 0 END) AS tables_in_progress,
SUM(CASE WHEN progress_pct = 0 THEN 1 ELSE 0 END) AS tables_not_started,
ROUND(AVG(progress_pct), 2) AS overall_progress_pct,
ROUND(SUM(CASE WHEN status = 'COMPLETED' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) AS pct_tables_done
FROM latest_per_table
WHERE rn = 1

テーブルごとのスナップショットステータスボード​

以下のクエリは、パイプライン内の各テーブルと、その最新の報告ステータスおよび進捗率を返します。結果には、以前の更新で完了したテーブルが含まれます。そのため、欠落している行として表示されるテーブルはありません。

SQL
WITH table_status AS (
SELECT
origin.flow_name AS flow_name,
details:operation_progress:status::string AS status,
details:operation_progress:progress_percent::double AS progress_pct,
timestamp,
ROW_NUMBER() OVER (PARTITION BY origin.flow_name ORDER BY timestamp DESC) AS rn
FROM event_log('<pipeline-id>')
WHERE event_type = 'operation_progress'
AND level = 'METRICS'
AND origin.flow_name IS NOT NULL
AND origin.pipeline_type = 'INGESTION_GATEWAY'
)
SELECT
flow_name,
status,
ROUND(progress_pct, 2) AS progress_pct,
timestamp AS last_update,
CASE
WHEN status = 'COMPLETED' THEN 'Done'
WHEN progress_pct = 0 THEN 'Queued'
ELSE 'Active'
END AS phase
FROM table_status
WHERE rn = 1
ORDER BY
CASE status WHEN 'IN_PROGRESS' THEN 0 WHEN 'COMPLETED' THEN 1 ELSE 2 END,
progress_pct ASC

現在の更新で読み込まれたスナップショットの行数とバイト数​

次のクエリは、現在のスナップショット実行における各テーブルの進捗率、アップサートされた行、およびアップロードされたバイト数を組み合わせています。

SQL
WITH latest_update AS (
SELECT origin.update_id AS update_id
FROM event_log('<pipeline-id>')
WHERE event_type = 'create_update'
ORDER BY timestamp DESC LIMIT 1
),
progress AS (
SELECT
origin.flow_name AS flow_name,
details:operation_progress:progress_percent::double AS progress_pct,
details:operation_progress:status::string AS status,
ROW_NUMBER() OVER (PARTITION BY origin.flow_name ORDER BY timestamp DESC) AS rn
FROM event_log('<pipeline-id>')
WHERE event_type = 'operation_progress'
AND level = 'METRICS'
AND origin.flow_name IS NOT NULL
AND origin.pipeline_type = 'INGESTION_GATEWAY'
AND origin.update_id = (SELECT update_id FROM latest_update)
),
volume AS (
SELECT
origin.flow_name AS flow_name,
SUM(details:flow_progress:metrics:num_upserted_rows::bigint) AS rows_loaded,
SUM(details:flow_progress:metrics:num_output_bytes::bigint) AS bytes_loaded
FROM event_log('<pipeline-id>')
WHERE event_type = 'flow_progress'
AND level = 'METRICS'
AND origin.flow_name IS NOT NULL
AND origin.pipeline_type = 'INGESTION_GATEWAY'
AND origin.flow_name LIKE '%_snapshot_flow'
AND origin.update_id = (SELECT update_id FROM latest_update)
GROUP BY origin.flow_name
)
SELECT
p.flow_name,
p.status,
ROUND(p.progress_pct, 2) AS progress_pct,
v.rows_loaded,
ROUND(v.bytes_loaded / 1024.0 / 1024.0, 2) AS mb_loaded,
ROUND(v.bytes_loaded / 1024.0 / 1024.0 / 1024.0, 3) AS gb_loaded
FROM progress p
LEFT JOIN volume v ON p.flow_name = v.flow_name
WHERE p.rn = 1
ORDER BY p.progress_pct ASC

停止したスナップショットの検出​

次のクエリは、過去30分間にprogress_percentが変更されていないスナップショットテーブルを返します。停止しているが、まだアクティブであるスナップショットを特定するために使用します。

SQL
WITH latest_update AS (
SELECT origin.update_id AS update_id
FROM event_log('<pipeline-id>')
WHERE event_type = 'create_update'
ORDER BY timestamp DESC LIMIT 1
),
recent AS (
SELECT
origin.flow_name AS flow_name,
details:operation_progress:progress_percent::double AS progress_pct,
details:operation_progress:status::string AS status,
timestamp
FROM event_log('<pipeline-id>')
WHERE event_type = 'operation_progress'
AND level = 'METRICS'
AND origin.flow_name IS NOT NULL
AND origin.pipeline_type = 'INGESTION_GATEWAY'
AND origin.update_id = (SELECT update_id FROM latest_update)
AND timestamp >= current_timestamp() - INTERVAL 30 MINUTES
)
SELECT
flow_name,
ROUND(MIN(progress_pct), 2) AS min_pct_30min,
ROUND(MAX(progress_pct), 2) AS max_pct_30min,
ROUND(MAX(progress_pct) - MIN(progress_pct), 2) AS pct_change_30min,
COUNT(*) AS events_in_window,
MAX(timestamp) AS last_event_ts
FROM recent
WHERE status = 'IN_PROGRESS'
GROUP BY flow_name
HAVING MAX(progress_pct) - MIN(progress_pct) = 0
AND MAX(progress_pct) < 100
ORDER BY max_pct_30min ASC

テーブルごとのスナップショット完了予定時刻​

以下のクエリは、アクティブなスナップショット実行における各テーブルの現在の進捗率および完了までの推定時間を返します。IN_PROGRESS のステータスのテーブルのみが返されます。完了済みおよびキューにあるテーブルを含めるには、status = 'IN_PROGRESS'フィルターを削除します。

SQL
WITH latest_update AS (
SELECT origin.update_id AS update_id
FROM event_log('<pipeline-id>')
WHERE event_type = 'create_update'
ORDER BY timestamp DESC LIMIT 1
),
latest_per_flow AS (
SELECT
origin.flow_name AS flow_name,
details:operation_progress:status::string AS status,
details:operation_progress:progress_percent::double AS progress_pct,
details:operation_progress:estimated_completion_ms::bigint AS eta_ms,
timestamp,
ROW_NUMBER() OVER (PARTITION BY origin.flow_name ORDER BY timestamp DESC) AS rn
FROM event_log('<pipeline-id>')
WHERE event_type = 'operation_progress'
AND level = 'METRICS'
AND origin.flow_name IS NOT NULL
AND origin.pipeline_type = 'INGESTION_GATEWAY'
AND origin.update_id = (SELECT update_id FROM latest_update)
)
SELECT
flow_name,
status,
ROUND(progress_pct, 2) AS progress_pct,
eta_ms,
ROUND(eta_ms / 1000.0 / 60.0, 1) AS eta_minutes,
ROUND(eta_ms / 1000.0 / 3600.0, 2) AS eta_hours,
timestamp AS last_update
FROM latest_per_flow
WHERE rn = 1
AND status = 'IN_PROGRESS'
ORDER BY eta_ms DESC NULLS LAST

CDC レイテンシークエリ​

これらのクエリーが返す値を解釈するには、 CDCのレイテンシーを参照してください。

CDCのテーブルごとの最新性​

次のクエリーは、各CDCテーブルの直近30分間のCDC鮮度イベントを返します。5分おきにイベントが送信されるため、テーブルごとに約6行が生成されます。結果はdiscovery_latency_msでソートされているため、最も遅延しているテーブルが先に表示されます。

SQL
SELECT
origin.flow_name AS flow_name,
details:flow_progress:streaming_metrics:event_time:max::string AS latest_source_commit_seen,
details:flow_progress:streaming_metrics:discovery_latency_ms::bigint AS discovery_latency_ms,
details:flow_progress:streaming_metrics:batch_processing_time_ms::bigint AS batch_processing_time_ms,
timestamp AS emission_ts
FROM event_log('<pipeline-id>')
WHERE event_type = 'flow_progress'
AND level = 'METRICS'
AND origin.flow_name IS NOT NULL
AND origin.pipeline_type = 'INGESTION_GATEWAY'
AND origin.flow_name LIKE '%_cdc_flow'
AND details:flow_progress:streaming_metrics IS NOT NULL
AND timestamp >= current_timestamp() - INTERVAL 30 MINUTES
ORDER BY discovery_latency_ms DESC NULLS LAST, flow_name, emission_ts DESC

CDC レイテンシ時系列​

以下のクエリは、直近24時間における各CDCフローのdiscovery_latency_msとbatch_processing_time_msの時間平均を返します。鮮度が低下した時期を特定するためにご利用ください。多数のCDCフローを含むパイプラインでは、結果セットを絞り込むには、フロー名でフィルタリングしてください。

SQL
SELECT
DATE_TRUNC('HOUR', timestamp) AS ts_hour,
origin.flow_name AS flow_name,
ROUND(AVG(details:flow_progress:streaming_metrics:discovery_latency_ms::bigint) / 1000.0, 2) AS avg_discovery_latency_sec,
ROUND(AVG(details:flow_progress:streaming_metrics:batch_processing_time_ms::bigint) / 1000.0, 2) AS avg_batch_processing_sec
FROM event_log('<pipeline-id>')
WHERE event_type = 'flow_progress'
AND level = 'METRICS'
AND origin.flow_name IS NOT NULL
AND origin.pipeline_type = 'INGESTION_GATEWAY'
AND origin.flow_name LIKE '%_cdc_flow'
AND details:flow_progress:streaming_metrics IS NOT NULL
AND timestamp >= current_timestamp() - INTERVAL 24 HOURS
GROUP BY DATE_TRUNC('HOUR', timestamp), origin.flow_name
ORDER BY origin.flow_name, ts_hour

トラブルシューティング​

進行イベントが表示されない​

イベント ログに進行状況イベントが表示されない場合は、次の手順を実行します。

  1. パイプラインが起動してから少なくとも5分間お待ちください。
  2. パイプラインがアクティブに実行され、取り込まれていることを確認します。
  3. クエリーが level = 'METRICS' と正しいイベント タイプ (flow_progress または operation_progress) でフィルター処理されていることを確認してください。
  4. イベントがまだ欠落している場合、または5分以外の間隔でイベントが到着する場合は、Databricksサポートにお問い合わせください。

パイプラインの再起動後にメトリクスがゼロになる​

パイプラインの再起動、更新、または再開により、進捗メトリクスがResetされる場合があります。ゲートウェイはすぐに新しい値のレポートを開始し、再起動前に出力されたイベントはイベントログに残ります。進捗メトリクスの解釈を参照してください。

一部のテーブルにメトリクスがありません​

一部のテーブルに進行状況イベントが表示されない場合:

  1. テーブルがゲートウェイ設定に含まれており、フィルタで除外されていないことを確認してください。
  2. CDCフェーズでは、ソーステーブルでCDCまたは変更追跡が有効になっていることを確認してください。
  3. operation_progressイベントはスナップショットフローに対してのみ発行されることに注意してください。CDCには完了の概念がないため、CDCフローはoperation_progressイベントを発行しません。

スナップショットの推定到着時刻(ETA)またはCDCレイテンシのフィールドは null​

一部のフィールドは、Gatewayが報告に必要な十分な情報を持つまでnullとなります。各フィールドがnullの場合の詳細は、イベントフィールドと進行状況メトリクスの解釈を参照してください。

その他のリソース​