コンピュート システムテーブル リファレンス
この記事では、コンピュート テーブル システムのリファレンス ガイドを提供します。 これらのテーブルを使用して、アカウント内の従来の汎用コンピュート、ジョブ コンピュート、およびLakeFlow Spark宣言型パイプライン コンピュートのアクティビティとメトリクスを監視できます。 これらの古典的なコンピュート テーブルには次のものがあります。
clusters: コンピュートの設定をアカウントに記録します。node_types: 現在使用可能なノード・タイプごとに 1 つのレコード (ハードウェア情報を含む) が含まれます。node_timeline: コンピュートの利用メトリクスの分単位の記録が含まれます。instance_events: クラシック コンピュート インスタンスの状態遷移をキャプチャします。instance_poolsアカウント内のインスタンスプール構成を記録します。
クラスター テーブル スキーマ
クラスター テーブルは、汎用コンピュート、ジョブ コンピュート、Lakeflow Spark 宣言型パイプライン コンピュート、およびLakeflowメンテナンス コンピュートの長期にわたるSpark構成の完全な履歴を含む、ゆっくりと変化するディメンション テーブルです。
テーブルパス : このシステムテーブルは system.compute.clusters
列名 | データ型 | 説明 | 例 |
|---|---|---|---|
| string | このクラスターが作成されたアカウントの ID。 |
|
| string | このクラスターが作成されたワークスペースの ID。 |
|
| string | このレコードが関連付けられているクラスターの ID。 |
|
| string | クラスターのユーザー定義名。 |
|
| string | クラスター所有者のユーザー名。 デフォルトはクラスター作成者に与えられますが、Clusters APIを通じて変更可能です。 |
|
| タイムスタンプ | このコンピュート定義に対する変更のタイムスタンプ。 |
|
| タイムスタンプ | クラスターが削除された時点のタイムスタンプ。 クラスターが削除されていない場合、値は |
|
| string | ドライバー ノードの種類の名前。 これは、クラウドプロバイダーのインスタンスタイプ名と一致します。 |
|
| string | ワーカー ノードの種類の名前。 これは、クラウドプロバイダーのインスタンスタイプ名と一致します。 |
|
| bigint | ワーカーの数。 固定サイズのクラスターに対してのみ定義されます。 |
|
| bigint | 設定されたワーカーの最小数。 このフィールドは、オートスケール クラスターの場合にのみ有効です。 |
|
| bigint | 設定された最大ワーカー数。 このフィールドは、オートスケール クラスターの場合にのみ有効です。 |
|
| bigint | 設定された自動終了期間。 |
|
| ブーリアン | オートスケール ディスクの有効化ステータス。 |
|
| マップ | クラスターのユーザー定義タグ (デフォルト タグは含まれません)。 |
|
| string | クラスターのソース。 |
|
| 配列 | initスクリプトのパスのセットです。 |
|
| 構造体 | AWS 固有の設定。 |
|
| 構造体 | Azure 固有の設定。 |
|
| 構造体 | GCP 固有の設定。 このフィールドは空になります。 |
|
| string | インスタンス プール ID: ドライバーがインスタンス プールの上に構成されている場合。 |
|
| string | ワーカーがインスタンスプールの上に設定されている場合、インスタンスプールID。 |
|
| string | クラスターの Databricks Runtime 。 |
|
| タイムスタンプ | コンピュート定義の変更のタイムスタンプ。 |
|
| 日付 | 日付を変更します。 保持に使用されます。 |
|
| string | コンピュート リソースのアクセスモードです。 アクセス・モード・リファレンスを参照してください。 |
|
| string | クラスターのコンピュート ポリシーの ID(該当する場合)。 |
|
アクセス・モード・リファレンス
次の表は、 data_security_mode 列に含まれる可能性のある値を変換したものです。この列は、特定のパイプラインおよびシステム作成のクラスターに対して null することもできます。
Value | アクセスモード |
|---|---|
| Standard |
| 専用 |
従来のアクセスモードは、次の値で記録されます。
Value | アクセスモード |
|---|---|
| パススルー認証 (共有) |
| パススルー認証 (シングルユーザー) |
| カスタム |
| 分離なし共有 |
ノード タイプ テーブル スキーマ
ノードタイプテーブルは、現在使用可能なノードタイプとその基本的なハードウェア情報をキャプチャします。
テーブルパス :このシステムテーブルは system.compute.node_typesにあります。
列名 | データ型 | 説明 | 例 |
|---|---|---|---|
| string | このクラスターが作成されたアカウントの ID。 |
|
| string | ノードタイプの一意の識別子。 |
|
| double | インスタンスの vCPU の数。 |
|
| ロング | インスタンスの合計メモリ。 |
|
| ロング | インスタンスの GPU の数。 |
|
ノード タイムライン テーブル スキーマ
ノード タイムライン テーブルは、ノード レベルのリソース使用率データを分単位の粒度で取得します。各レコードには、インスタンスごとに指定された 1 分間のデータが含まれます。このテーブルは、アカウント内の汎用コンピュート、ジョブ コンピュート、 Lakeflow Spark宣言型パイプライン コンピュート、およびパイプライン メンテナンス コンピュート リソースのノード タイムラインをキャプチャします。
テーブルパス :このシステムテーブルは system.compute.node_timelineにあります。
列名 | データ型 | 説明 | 例 |
|---|---|---|---|
| string | このコンピュート リソースが実行されているアカウントの ID。 |
|
| string | このコンピュート リソースが実行されているワークスペースの ID。 |
|
| string | コンピュート リソースの ID。 |
|
| string | 特定のインスタンスの ID。 |
|
| タイムスタンプ | レコードの開始時刻 (UTC)。 |
|
| タイムスタンプ | レコードの終了時刻 (UTC)。 |
|
| ブーリアン | インスタンスがドライバー ノードかワーカー ノードか。 |
|
| double | CPU がユーザーランドで費やした時間の割合。 |
|
| double | CPU がカーネルに費やした時間の割合。 |
|
| double | CPU が I/O の待機に費やした時間の割合。 |
|
| double | 期間中に使用されたコンピュートのメモリの割合 (コンピュートで実行されているバックグラウンド プロセスによって使用されたメモリを含む)。 |
|
| double | メモリ スワップに起因するメモリ使用量の割合。 |
|
| bigint | ネットワーク トラフィックで送信されたバイト数。 |
|
| bigint | ネットワーク トラフィックから受信したバイト数。 |
|
| マップ | マウント・ポイント別にグループ化されたディスク使用率。 これは、コンピュートが実行されている間のみの一時的なストレージ プロビジョニングです。 |
|
| string | ノードの種類の名前。 これは、クラウドプロバイダーのインスタンスタイプ名と一致します。 |
|
| string | ノードに割り当てられたプライベートIPアドレス。 |
|
インスタンスイベントテーブルのスキーマ
プレビュー
このシステムテーブルは パブリック プレビュー段階です。
インスタンス イベント テーブルは、クラシック コンピュート インスタンスの状態遷移をキャプチャします。 各行は、単一インスタンスの状態変化を表します。このテーブルには、同じクラウド リージョン内に展開されたアカウント内のすべてのワークスペースからの汎用コンピュート、ジョブ コンピュート、およびLakeFlow Spark宣言型パイプライン コンピュートのレコードが含まれています。
テーブルパス :このシステムテーブルは system.compute.instance_eventsにあります。
列名 | データ型 | 説明 | 例 |
|---|---|---|---|
| string | このインスタンスが起動されたアカウントのID。 |
|
| string | このインスタンスが起動されたワークスペースのID。 |
|
| string | インスタンスのID。 |
|
| タイムスタンプ | イベントのタイムスタンプ。 |
|
| string | イベントの種類。可能な値は |
|
| string | インスタンスがプールに属している場合のインスタンス プール ID。 |
|
| string | このインスタンスが配置されているクラスターのID。 |
|
| string | ノードタイプの名前。これはクラウドプロバイダーのインスタンスタイプ名と一致します。 |
|
| string | インスタンスの状態。インスタンスの状態を参照してください。 |
|
| string | インスタンスの可用性タイプ。指定可能な値は、 |
|
インスタンスの状態
INSTANCE_LAUNCHINGインスタンスを初期化しています。INSTANCE_READYインスタンスは完全に初期化され、使用できる状態ですが、現在は使用されていません。INSTANCE_PLACEDインスタンスは現在使用中です(クラスターに参加しています)。INSTANCE_TERMINATEDインスタンスが終了しました。
cluster_idはいつ設定されますか?
cluster_idフィールドは、インスタンスがINSTANCE_PLACED状態にある場合にのみ入力されます。他のすべての状態( INSTANCE_LAUNCHING 、 INSTANCE_READY 、 INSTANCE_TERMINATED )では、 cluster_idはnullです。この動作は、プールされたインスタンスとプールされていないインスタンスの両方で一貫しています。
instance_eventsテーブルには、汎用、ジョブ、およびLakeFlow Spark宣言型パイプライン コンピュートの配置イベントのみが含まれています。 SQLウェアハウスなどの他のワークロードの配置イベントは、この表には含まれていません。
インスタンスプールのテーブルスキーマ
プレビュー
このシステムテーブルは パブリック プレビュー段階です。
インスタンス プール テーブルは、長期にわたるインスタンス プール構成の完全な履歴を含む、ゆっくりと変化するディメンション テーブルです。 設定が変更されると、新しい行が発行され、論理的に以前の行と置き換えられます。
テーブルパス :このシステムテーブルは system.compute.instance_poolsにあります。
列名 | データ型 | 説明 | 例 |
|---|---|---|---|
| string | このインスタンスプールが作成されたアカウントのID。 |
|
| string | このインスタンスプールが作成されたワークスペースのID。 |
|
| string | インスタンスプールのID。 |
|
| タイムスタンプ | インスタンスプール構成の変更日時。 |
|
| タイムスタンプ | インスタンスプール作成時のタイムスタンプ。 |
|
| タイムスタンプ | インスタンスプール削除のタイムスタンプ。インスタンスプールが削除されていない場合、値は |
|
| string | インスタンスプールのユーザー定義名。 |
|
| マップ | インスタンスプール用のユーザー定義タグ(デフォルトタグは含まれません)。 |
|
| string | プール内のインスタンスに使用されるノードタイプ。これはクラウドプロバイダーのインスタンスタイプ名と一致します。 |
|
| bigint | プールキャッシュ内のアイドル状態のインスタンスが、非アクティブ状態になってから自動的に終了されるまでの時間(分)。 |
|
| bigint | インスタンスプールに保持するアイドル状態のインスタンスの最小数。 |
|
| bigint | クラスターで使用されているインスタンスとアイドル状態のインスタンスの両方を含め、プールに保持する未処理インスタンスの最大数。 |
|
| ブーリアン | オートスケール Local Storage: 有効にすると、 Sparkワーカーのディスク容量が不足しているときに、このプール内のインスタンスが追加のディスク容量を動的に取得します。 |
|
| 構造体 | すべてのSparkコンテナに接続されるディスクの仕様。 |
|
| 配列 | プール上にカスタムDockerイメージがプリロードされています。 |
|
| string | プール用に事前にロードされた Spark イメージのバージョン(定義されている場合)。 |
|
| 構造体 | AWS上で稼働するインスタンスプールに関連する属性。 |
|
| 構造体 | Azure上で実行されているインスタンスプールに関連する属性。 |
|
| 構造体 | GCP上で稼働するインスタンスプールに関連する属性。 |
|
既知の制限事項
- 2023 年 10 月 23 日より前に削除済みとしてマークされたコンピュート リソースは、クラスター テーブルに表示されません。 これにより、
system.billing.usageテーブルからのジョインがクラスターテーブルのレコードと一致しなくなる可能性があります。 すべてのアクティブなコンピュート リソースがバックフィルされました。 - これらのテーブルには、汎用およびジョブ コンピュートのレコードのみが含まれます。 サーバレス コンピュートやSQLウェアハウスのレコードは含まれません。
- 実行時間が 10 分未満のノードは、
node_timelineテーブルに表示されない場合があります。
サンプル クエリ
次のサンプル クエリを使用して、一般的な質問に答えることができます。
- クラスターレコードを最新の請求レコードと結合する
- 平均使用率とピーク使用率が最も高いコンピュート リソースを特定します
- 各インスタンスプールの最新バージョンを取得します
- インスタンスのアイドル時間とアクティブ時間を計算します
これらの例の一部は、クラスター テーブルと system.billing.usage テーブルを結合します。 請求レコードはクロスリージョンであり、クラスター レコードはリージョン指定であるため、請求レコードはクエリを実行するリージョンのクラスター レコードのみと一致します。 別の地域のレコードを表示するには、その地域でクエリを実行してください。
クラスターレコードを最新の請求レコードと結合する
このクエリは、時間の経過に伴う支出を理解するのに役立ちます。 usage_start_timeを最新の請求期間に更新すると、請求レコードに対する最新の更新が取得され、クラスター データに結合されます。
各レコードは、その特定の実行中にクラスター所有者に関連付けられます。 そのため、クラスターの所有者が変更された場合、コストはクラスターが使用された時期に基づいて正しい所有者にロールアップされます。
SELECT
u.record_id,
c.cluster_id,
c.owned_by,
c.change_time,
u.usage_start_time,
u.usage_quantity
FROM
system.billing.usage u
JOIN system.compute.clusters c
JOIN (SELECT u.record_id, c.cluster_id, max(c.change_time) change_time
FROM system.billing.usage u
JOIN system.compute.clusters c
WHERE
u.usage_metadata.cluster_id is not null
and u.usage_start_time >= '2023-01-01'
and u.usage_metadata.cluster_id = c.cluster_id
and date_trunc('HOUR', c.change_time) <= date_trunc('HOUR', u.usage_start_time)
GROUP BY all) config
WHERE
u.usage_metadata.cluster_id is not null
and u.usage_start_time >= '2023-01-01'
and u.usage_metadata.cluster_id = c.cluster_id
and u.record_id = config.record_id
and c.cluster_id = config.cluster_id
and c.change_time = config.change_time
ORDER BY cluster_id, usage_start_time desc;
平均使用率とピーク使用率が最も高いコンピュート リソースを特定します
平均 CPU 使用率とピーク CPU 使用率が最も高い汎用コンピュートとジョブ コンピュートを特定します。
SELECT
distinct cluster_id,
driver,
avg(cpu_user_percent + cpu_system_percent) as `Avg CPU Utilization`,
max(cpu_user_percent + cpu_system_percent) as `Peak CPU Utilization`,
avg(cpu_wait_percent) as `Avg CPU Wait`,
max(cpu_wait_percent) as `Max CPU Wait`,
avg(mem_used_percent) as `Avg Memory Utilization`,
max(mem_used_percent) as `Max Memory Utilization`,
avg(network_received_bytes)/(1024^2) as `Avg Network MB Received per Minute`,
avg(network_sent_bytes)/(1024^2) as `Avg Network MB Sent per Minute`
FROM
node_timeline
WHERE
start_time >= date_add(now(), -1)
GROUP BY
cluster_id,
driver
ORDER BY
3 desc;
各インスタンスプールの最新バージョンを取得します
instance_poolsテーブルは SCD2 タイプであり、既存のレコードを更新するのではなく、変更が行われるたびに新しいレコードが作成されます。最新バージョンを取得するには、 change_timeが最も大きいエントリを選択します。
SELECT *
FROM system.compute.instance_pools
QUALIFY row_number() OVER (
PARTITION BY workspace_id, instance_pool_id
ORDER BY change_time DESC
) = 1;
インスタンスのアイドル時間とアクティブ時間を計算します
このクエリは、 instance_eventsテーブルの状態遷移を使用して、各インスタンスの合計アイドル時間とアクティブ時間を計算します。
WITH instance_states AS (
SELECT
*,
event_time AS start_time,
lead(event_time) OVER (
PARTITION BY workspace_id, instance_id
ORDER BY event_time
) AS end_time
FROM system.compute.instance_events
WHERE event_type IN ('INSTANCE_LAUNCHING', 'STATE_TRANSITION')
)
SELECT
workspace_id,
instance_id,
instance_pool_id,
sum(if(state = 'INSTANCE_READY',
TIMESTAMPDIFF(SECOND, start_time, end_time), 0)) / 60 AS idle_minutes,
sum(if(state = 'INSTANCE_PLACED',
TIMESTAMPDIFF(SECOND, start_time, end_time), 0)) / 60 AS active_minutes
FROM instance_states
GROUP BY workspace_id, instance_id, instance_pool_id;