次の方法で共有


システム テーブルを使用してコストを監視する

この記事では、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 の数はいくつですか?

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-57958532ab5b2024-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"