システム テーブルを使用してコストを監視する
この記事では、system.billing.usage
テーブルを単独で使用する方法、または他のシステム テーブルと結合して、アカウントの Azure Databricks の使用状況を把握する方法について説明します。 次の機能固有の記事も利用できます。
使用状況テーブルを読み取る方法
システム テーブル データにアクセスするアクセス許可を持つユーザーは、system.billing.usage
にあるアカウントの課金ログを表示および照会できます。 すべての課金レコードには、使用金額を関連する特定のリソース、ID、製品に属性付けする列が含まれます。
-
usage_metadata
列には、使用状況に関係するリソースまたはオブジェクトに関する情報を含む構造体が含まれています。 -
identity_metadata
列には、使用状況を発生したユーザーまたはサービス プリンシパルに関する情報が含まれます。 -
custom_tags
列には、使用状況に関連付けられているコンピューティング リソースに適用されるタグが含まれています。 これには、サーバーレスの使用状況を属性付けできるように、予算ポリシーによって追加されたタグも含まれます。 -
billing_origin_product
列とproduct_features
列には、使用されている正確な製品と機能に関する情報が表示されます。
使用状況テーブルの完全なリファレンスについては、課金対象の使用状況システム テーブルのリファレンスを参照してください。
課金データの運用化
Databricks では、AI/BI ダッシュボード を使用して、システム テーブルの課金データを使用してコスト監視ダッシュボードを作成することをお勧めします。 新しいダッシュボードを作成することも、アカウント管理者が事前に構築されたカスタマイズ可能なコスト監視ダッシュボードをインポートすることもできます。 使用状況ダッシュボード を参照してください。
また、使用状況データに関する最新情報を得るために、クエリにアラートを追加することもできます。 「アラートの作成」を参照してください。
サンプル クエリ
次のクエリでは、system.billing.usage
テーブル データを使用してアカウントの使用状況に関する分析情報を得る方法の例を示します。
- 今月中に使用された各製品の DBU の数はいくつですか?
- 最も多くの DBU を消費したジョブはどれですか?
- 特定のタグを持つリソースにどの程度の使用量を属性付けできますか?
- 使用量が増加している製品を表示
- 汎用コンピューティング (Photon) の使用傾向は何ですか?
- 具体化されたビューまたはストリーミング テーブルの DBU 消費量は何ですか?
- サーバーレス DLT パイプラインの DBU 使用量は何ですか?
- DBU 消費量の毎日の傾向は何ですか?
今月中に使用された各製品の DBU の数はいくつですか?
SELECT
billing_origin_product,
usage_date,
sum(usage_quantity) as usage_quantity
FROM system.billing.usage
WHERE
month(usage_date) = month(NOW())
AND year(usage_date) = year(NOW())
GROUP BY billing_origin_product, usage_date
最も多くの DBU を消費したジョブはどれですか?
SELECT
usage_metadata.job_id as `Job ID`, sum(usage_quantity) as `Usage`
FROM
system.billing.usage
WHERE
usage_metadata.job_id IS NOT NULL
GROUP BY
`Job ID`
ORDER BY
`Usage` DESC
特定のタグを持つリソースにどの程度の使用量を属性付けできますか?
さまざまな方法でコストを分割できます。 この例では、カスタム タグによってコストを分割する方法を示します。 クエリのカスタム タグのキーと値は必ず置き換えてください。
SELECT
sku_name, usage_unit, SUM(usage_quantity) as `Usage`
FROM
system.billing.usage
WHERE
custom_tags [:key] = :value
GROUP BY 1, 2
使用量が増加している製品を表示する
SELECT
after.billing_origin_product, before_dbus, after_dbus, ((after_dbus - before_dbus)/before_dbus * 100) AS growth_rate
FROM
(SELECT
billing_origin_product, sum(usage_quantity) as before_dbus
FROM
system.billing.usage
WHERE
usage_date BETWEEN "2024-04-01" and "2024-04-30"
GROUP BY
billing_origin_product
) as before
JOIN
(SELECT
billing_origin_product, sum(usage_quantity) as after_dbus
FROM
system.billing.usage
WHERE
usage_date
BETWEEN
"2024-05-01" and "2024-05-30"
GROUP BY
billing_origin_product
) as after
WHERE
before.billing_origin_product = after.billing_origin_product
SORT BY
growth_rate DESC
汎用コンピューティング (Photon) の使用傾向は何ですか?
SELECT
sku_name,
usage_date,
sum(usage_quantity) as `DBUs consumed`
FROM
system.billing.usage
WHERE
year(usage_date) = year(CURRENT_DATE)
AND
sku_name = "ENTERPRISE_ALL_PURPOSE_COMPUTE_(PHOTON)"
AND
usage_date > "2024-04-15"
GROUP BY
sku_name, usage_date
具体化されたビューまたはストリーミング テーブルの DBU 消費量は何ですか?
特定の具体化されたビューまたはストリーミング テーブルの DBU 使用状況と SKU を取得するには、具体化されたビューまたはストリーミング テーブルに関連付けられているパイプラインの ID に usage_metadata.dlt_pipeline_id
が設定されているレコードの課金対象の使用状況システム テーブルにクエリを送信します。 具体化されたビューまたはストリーミング テーブルを表示するときに、カタログ エクスプローラーの [詳細] タブでパイプライン ID を確認できます。 日付による消費を制限するには、開始日、終了日、または日付範囲を指定します。 次のクエリでは、ID 00732f83-cd59-4c76-ac0d-57958532ab5b
と 2024-05-30
の使用開始日を使用して、パイプラインの DBU 使用量を取得します。
SELECT
sku_name,
usage_date,
SUM(usage_quantity) AS `DBUs`
FROM
system.billing.usage
WHERE
usage_metadata.dlt_pipeline_id = :dlt_pipeline_id
AND usage_start_time > :usage_start_time
GROUP BY
ALL
サーバーレス DLT パイプラインの DBU 使用量は何ですか?
サーバーレス DLT パイプラインの DBU 使用量と SKU を取得するには、usage_metadata.dlt_pipeline_id
がパイプラインの ID に設定されているレコードの課金対象の使用状況システム テーブルにクエリを送信します。 パイプライン ID は、DLT UI でパイプラインを表示するときに、[パイプラインの詳細] タブで確認できます。 日付による消費を制限するには、開始日、終了日、または日付範囲を指定します。 次のクエリは、ID 00732f83-cd59-4c76-ac0d-57958532ab5b
を持つパイプラインに対する 2024 年 12 月の DBU 使用量を取得します。
SELECT
sku_name,
usage_date,
SUM(usage_quantity) AS `DBUs`
FROM
system.billing.usage
WHERE
usage_metadata.dlt_pipeline_id = :dlt_pipeline_id
AND usage_start_time >= :usage_start_time
AND usage_end_time < :usage_end_time
GROUP BY
ALL
DBU 消費量の毎日の傾向は何ですか?
SELECT
usage_date as `Date`, sum(usage_quantity) as `DBUs Consumed`
FROM
system.billing.usage
WHERE
sku_name = "STANDARD_ALL_PURPOSE_COMPUTE"
GROUP BY
usage_date
ORDER BY
usage_date ASC
使用状況テーブルの結合の例
次の例では、使用状況テーブルを他のシステム テーブルと結合して、追加の分析情報を得る方法を示します。
コンピューティング所有者にコストを属性付けする
コンピューティング コストを削減する場合は、このクエリを使用して、アカウント内のどのクラスター所有者が最も多くの DBU を使用しているか確認できます。
SELECT
u.record_id record_id,
c.cluster_id cluster_id,
max_by(c.owned_by, c.change_time) owned_by,
max(c.change_time) change_time,
any_value(u.usage_start_time) usage_start_time,
any_value(u.usage_quantity) usage_quantity
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 c.change_time <= u.usage_start_time
GROUP BY 1, 2
ORDER BY cluster_id, usage_start_time desc;
ジョブ名を使用して使用量を強化する
with jobs as (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM system.lakeflow.jobs QUALIFY rn=1
)
SELECT
usage.*,
coalesce(usage_metadata.job_name, jobs.name) as job_name
FROM system.billing.usage
LEFT JOIN jobs ON usage.workspace_id=jobs.workspace_id AND usage.usage_metadata.job_id=jobs.job_id
WHERE
billing_origin_product="JOBS"
価格と使用状況テーブルを結合する
list_prices
テーブルには、利用可能な SKU ごとの一定期間の表示価格が含まれています。
usage
テーブルを結合して、特定の使用状況の一覧のコストを表示できます。
たとえば、次のクエリでは、1 か月間に特定のタグに起因する合計コストが返されます。
SELECT
SUM(usage.usage_quantity * list_prices.pricing.effective_list.default)
as `Total Dollar Cost`
FROM system.billing.usage
JOIN system.billing.list_prices ON list_prices.sku_name = usage.sku_name
WHERE usage.custom_tags [:key] = :value
AND usage.usage_end_time >= list_prices.price_start_time
AND (list_prices.price_end_time IS NULL OR usage.usage_end_time < list_prices.price_end_time)
AND usage.usage_date BETWEEN "2024-05-01" AND "2024-05-31"
前の暦月の使用量のアドオン コストを見積もる
このクエリは、期間内のすべての使用状況に単純な割合を適用します。 これは、一部のアドオンの権利の管理方法により、実際の収益化とは若干異なる場合があることに注意してください。 アドオンレートをアカウントのレートに置き換えます。
SELECT SUM(usage.usage_quantity * list_prices.pricing.effective_list.default) * :add_on_rate as `Total Add-On Dollar Cost`
FROM system.billing.usage
JOIN system.billing.list_prices ON list_prices.sku_name = usage.sku_name
WHERE usage.usage_end_time >= list_prices.price_start_time
AND (list_prices.price_end_time IS NULL OR usage.usage_end_time < list_prices.price_end_time)
AND usage.usage_date BETWEEN "2024-02-01" AND "2024-02-29"