다음을 통해 공유


시스템 테이블을 사용하여 비용 모니터링

이 문서에서는 system.billing.usage 테이블을 자체적으로 사용하거나 다른 시스템 테이블과 조인하여 계정의 Azure Databricks 사용 현황을 파악하는 방법을 설명합니다. 다음 특정 기능 관련 문서를 확인할 수 있습니다.

사용 현황 테이블을 읽는 방법

시스템 테이블 데이터에 액세스할 수 있는 권한이 있는 사용자는 system.billing.usage있는 계정의 청구 로그를 보고 쿼리할 수 있습니다. 모든 청구 레코드에는 관련 리소스, ID 및 제품에 대한 사용량의 특성을 지정하는 열이 포함됩니다.

  • usage_metadata 열에는 사용과 관련된 리소스 또는 개체에 대한 정보가 포함된 구조체가 포함되어 있습니다.
  • identity_metadata 열에는 사용량이 발생한 사용자 또는 서비스 주체에 대한 정보가 포함됩니다.
  • custom_tags 열에는 사용량과 연결된 컴퓨팅 리소스에 적용되는 태그가 포함됩니다. 여기에는 서버리스 사용량을 특성화할 수 있도록 예산 정책에 의해 추가된 태그도 포함됩니다.
  • billing_origin_productproduct_features 열은 사용되는 정확한 제품 및 기능에 대한 정보를 제공합니다.

사용 현황 테이블에 대한 전체 참조는 청구 가능한 사용량 시스템 테이블 참조 참조하세요.

청구 데이터를 운영화하다

Databricks는 AI/BI 대시보드 사용하여 시스템 테이블 청구 데이터를 사용하여 비용 모니터링 대시보드를 만드는 것이 좋습니다. 새 대시보드를 만들거나 계정 관리자가 미리 빌드된 사용자 지정 가능한 비용 모니터링 대시보드를 가져올 수 있습니다. 사용량 대시보드참조하세요.

또한 쿼리에 경고를 추가하여 사용량 현황 데이터에 대한 정보를 유지할 수 있습니다. 경고를만들기 참조하세요.

샘플 쿼리

다음 쿼리는 system.billing.usage 테이블 데이터를 사용하여 계정의 사용량에 대한 인사이트를 얻는 방법에 대한 예제를 제공합니다.

이번 달 동안 사용된 각 제품의 DPU는 몇 개입니까?

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

DTU를 가장 많이 사용한 작업은 무엇입니까?

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를 가져오려면 usage_metadata.dlt_pipeline_id 구체화된 뷰 또는 스트리밍 테이블과 연결된 파이프라인의 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로 설정된 레코드에 대한 청구 가능한 사용 시스템 테이블에 쿼리를 제출합니다. Delta Live Tables UI에서 파이프라인을 볼 때 파이프라인 세부 정보 탭에서 파이프라인 ID를 찾을 수 있습니다. 사용량을 날짜별로 제한하려면 시작 날짜, 종료 날짜 또는 날짜 범위를 지정합니다. 다음 쿼리는 00732f83-cd59-4c76-ac0d-57958532ab5b인 ID를 가진 파이프라인에 대한 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

테이블 조인 사용 예제

다음 예제에서는 사용 현황 테이블을 다른 시스템 테이블과 조인하여 추가 인사이트를 얻을 수 있는 방법을 보여 줍니다.

컴퓨트 소유자에게 비용을 할당하십시오

컴퓨팅 비용을 줄이려는 경우 이 쿼리를 사용하여 계정에서 가장 많은 DTU를 사용하는 클러스터 소유자를 확인할 수 있습니다.

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"