システムテーブルを使用したコストの監視
この記事では、system.billing.usage
テーブルを単独で使用したり、他のシステムテーブルと結合して使用したりして、アカウントの Databricks 使用状況を把握する方法について説明します。 次の機能固有の記事も利用できます。
使用量表の読み方
システムテーブルデータへのアクセス許可を持つユーザーは、 system.billing.usage
にあるアカウントの請求ログを表示およびクエリできます。 すべての請求レコードには、関連する特定のリソース、ID、および製品に使用量を割り当てる列が含まれています。
usage_metadata
列には、使用に関連するリソースまたはオブジェクトに関する情報を含む構造体が含まれています。identity_metadata
列には、使用量の原因となったユーザーまたはサービスプリンシパルに関する情報が含まれます。custom_tags
列には、使用状況に関連付けられているコンピュート リソースに適用されたタグが含まれます。これには、予算ポリシーによって追加されたタグも含まれており、サーバレスの使用状況を帰属させることができます。billing_origin_product
列とproduct_features
列には、使用されている正確な製品と機能に関する情報が表示されます。
usage テーブルの完全なリファレンスについては、 課金利用 システムテーブル リファレンスを参照してください。
請求データの運用化
Databricks AI/BI ダッシュボードを使用して、システムテーブルの請求データを使用してコスト モニタリング ダッシュボードを作成することをお勧めします。新しいダッシュボードを作成することも、アカウント管理者が事前に作成されたカスタマイズ可能なコストモニタリングダッシュボードをインポートすることもできます。 使用状況ダッシュボードを参照してください。
また、クエリにアラートを追加して、使用状況データに関する情報を入手することもできます。 「アラートを作成する」を参照してください。
サンプルクエリー
次のクエリは、 system.billing.usage
テーブルデータを使用してアカウントの使用状況を把握する方法の例を示しています。
今月は各製品の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 は、 Delta Live TablesUI でパイプラインを表示するときに、 パイプラインの [詳細] タブで確認できます。日付で消費を制限するには、開始日、終了日、または日付範囲を指定します。 次のクエリは、ID が 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
使用テーブル・ジョインの例
次の例は、usage テーブルを他のシステムテーブルと結合して、さらに理解を深める方法を示しています。
コンピュートオーナーにコストの帰属
コンピュートのコストを削減したい場合は、このクエリを使用して、アカウント内のどのクラスタリング所有者が最も多くの 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
テーブルを結合して、特定の使用量のリストコストを表示できます。
たとえば、次のクエリは、特定のタグに関連付けられた月の合計コストを返します。
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"