Cloud Billing 데이터 내보내기의 쿼리 예시

이 페이지에서는 BigQuery로 내보내 BigQuery에 저장된 Cloud Billing 데이터를 쿼리하는 방법의 예시를 제공합니다.

쿼리에 사용할 테이블 이름 지정

이 예시에서는 BigQuery에서 Cloud Billing 데이터를 쿼리하려면 FROM 절에 테이블 이름을 지정해야 합니다. 테이블 이름은 project.dataset.BQ_table_name의 세 가지 값을 사용하여 결정됩니다.

  • project는 BigQuery 데이터 세트가 포함되어 있는 설정한 Cloud 프로젝트의 ID입니다.
  • dataset는 내보낸 Cloud Billing 데이터가 있는 BigQuery 테이블을 포함하도록 설정한 BigQuery 데이터 세트입니다.
  • BQ_table_name은 쿼리하려는 내보낸 Cloud Billing 데이터가 포함된 BigQuery 테이블의 이름입니다. Cloud Billing 데이터가 포함된 BigQuery 테이블은 두 가지가 있습니다.

Cloud Billing 데이터 유형별 쿼리 예시

이 페이지에서는 일일 비용 세부정보 데이터가격 책정 데이터에 대한 쿼리 예시를 제공합니다.

일일 비용 세부정보 데이터 가격 책정 데이터
일일 비용 세부정보 쿼리 예시 가격 책정 데이터 쿼리 예시

일일 비용 세부정보 쿼리 예시

이 섹션에서는 BigQuery로 내보낸 Cloud Billing 일일 비용 세부정보 데이터를 쿼리하는 방법의 다양한 예시를 제공합니다.

비용 세부정보 쿼리 예시에 사용된 공통 값

이 섹션의 쿼리 예시에서는 다음 값을 사용합니다.

  • 테이블 이름: project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX

인보이스의 총 비용 반환

다음 쿼리는 내보낸 결제 데이터를 사용해서 비용 및 크레딧 값을 볼 수 있는 두 가지 방법을 보여줍니다.

  • total 필드는 부동 소수점 비용과 크레딧 값을 직접 합산하므로 부동 소수점 반올림 오차가 발생할 수 있습니다.
  • total_exact 필드는 비용과 크레딧 값을 합산하기 전 micro로 변환한 다음 합산 후에 다시 dollar로 변환하므로, 부동 소수점 반올림 오차가 방지됩니다.

예시 1: 인보이스당 모든 비용 합계

이 쿼리는 일반 비용 합계로 된 각 월의 인보이스 합계, 세금, 조정 및 반올림 오류를 보여줍니다.

표준 SQL

SELECT
  invoice.month,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost * 1000000 AS int64))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
                  FROM UNNEST(credits) c), 0))) / 1000000
    AS total_exact
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
GROUP BY 1
ORDER BY 1 ASC
;

예를 들어 앞의 쿼리에 대한 결과는 다음과 같습니다.

month total total_exact
1 201901 $1005.004832999999984 $1005.00
2 201902 $992.3101739999999717 $992.31
3 201903 $1220.761089999999642 $1220.76

예시 2: 인보이스 대상 월당 비용 유형별 세부정보 반환

이 쿼리에서는 월별로 각 cost_type의 합계를 보여줍니다. 비용 유형에는 일반 비용, 세금, 조정 및 반올림 오류가 포함됩니다.

표준 SQL

SELECT
  invoice.month,
  cost_type,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM   UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost * 1000000 AS int64))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
                  FROM UNNEST(credits) c), 0))) / 1000000
    AS total_exact
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
GROUP BY 1, 2
ORDER BY 1 ASC, 2 ASC
;

예를 들어 앞의 쿼리에 대한 결과는 다음과 같습니다.

month cost_type total total_exact
1 201901 regular $1000.501209987994782 $1000.50
2 201901 rounding_error –$0.500489920049387 –$0.50
3 201901 tax $10.000329958477891 $10.00
4 201901 adjustment –$5.002572999387045 –$5.00

라벨이 있는 쿼리 예시

다음 예는 라벨로 데이터를 쿼리하는 다른 방법을 보여줍니다.

이 섹션의 예시에서는 다음을 가정합니다.

  • 2가지 앱(grapefruit-squeezer 및 chocolate-masher)이 있습니다.
  • 각 앱에는 2가지 환경(dev 및 prod)이 있습니다.
  • dev 환경의 경우 앱마다 1개의 소형 인스턴스가 있습니다.
  • prod 환경의 경우 미국에 소형 인스턴스 1개, 아시아에 소형 인스턴스 1개가 있습니다.
  • 각 인스턴스에 앱 및 환경 라벨이 지정됩니다.
  • 실험에 사용되며 라벨이 없는 인스턴스가 1개 있습니다.

총 청구 요금은 $24이며 상세 내역은 다음과 같습니다.

인스턴스 라벨 총 비용
소형 인스턴스(VCPU 1개), 미국에서 실행 없음 $4
소형 인스턴스(VCPU 1개), 미국에서 실행 앱: chocolate-masher
환경: dev
$2
소형 인스턴스(VCPU 1개), 미국에서 실행 앱: grapefruit-squeezer
환경: dev
$3
소형 인스턴스(VCPU 1개), 미국에서 실행 앱: chocolate-masher
환경: prod
$3.25
소형 인스턴스(VCPU 1개), 아시아에서 실행 앱: chocolate-masher
환경: prod
$3.75
소형 인스턴스(VCPU 1개), 미국에서 실행 앱: grapefruit-squeezer
환경: prod
$3.50
소형 인스턴스(VCPU 1개), 아시아에서 실행 앱: grapefruit-squeezer
환경: prod
$4.50

그룹화 없이 모든 행 쿼리

이러한 비용을 가장 자세히 보려면 그룹화 없이 모든 행을 쿼리해야 합니다. 라벨 및 SKU 설명을 제외한 프로젝트, 서비스 등의 모든 필드는 동일하다고 가정합니다.

표준 SQL

SELECT
  sku.description,
  TO_JSON_STRING(labels) as labels,
 cost as cost
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`;

legacy SQL

TO_JSON_STRING not supported.
sku.description 라벨 비용
1 소형 인스턴스(VCPU 1개), 미국에서 실행 [] $4
2 소형 인스턴스(VCPU 1개), 미국에서 실행 [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}] $2
3 소형 인스턴스(VCPU 1개), 미국에서 실행 [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}] $3
4 소형 인스턴스(VCPU 1개), 미국에서 실행 [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] $3.25
5 소형 인스턴스(VCPU 1개), 아시아에서 실행 [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] $3.75
6 소형 인스턴스(VCPU 1개), 미국에서 실행 [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] $3.50
7 소형 인스턴스(VCPU 1개), 아시아에서 실행 [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] $4.50
합계 $24

라벨 맵에 따라 JSON 문자열로 그룹화

빠르고 쉽게 비용을 라벨 조합별로 분류하는 방법입니다.

표준 SQL

SELECT
  TO_JSON_STRING(labels) as labels,
  sum(cost) as cost
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
GROUP BY labels;

legacy SQL

TO_JSON_STRING not supported.
라벨 비용
1 [] $4
2 [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}] $2
3 [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}] $3
4 [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] $7
5 [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] $8
합계 $24

라벨 값의 특정 키에 따라 그룹화

특정 라벨 키의 값에 따라 비용을 분류하는 경우가 많습니다. WHERE 대신 LEFT JOIN을 사용하고 JOIN 조건에 키 필터를 넣으면 이 키를 포함하지 않는 비용이 포함되므로 비용의 전체 보기가 수신됩니다.

표준 SQL

SELECT
  labels.value as environment,
  SUM(cost) as cost
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
LEFT JOIN UNNEST(labels) as labels
  ON labels.key = "environment"
GROUP BY environment;

legacy SQL

SELECT
  labels.value as environment,
  SUM(cost) as cost
FROM [project:dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX]
WHERE labels.key = "environment" OR labels.key IS NULL
GROUP BY environment;
환경 비용
1 prod $15
2 dev $5
3 null $4
합계 $24

키-값 쌍으로 그룹화

이 결과를 해석하거나 내보낼 때는 주의해야 합니다. 여기에서 개별 행은 중복 합산되지 않은 올바른 합계를 표시하지만 다른 행과 조합해서는 안 됩니다. 키가 동일하거나, 같은 리소스에 키가 설정되지 않은 것이 확실한 경우에는 괜찮습니다.

표준 SQL

SELECT
  labels.key as key,
  labels.value as value,
  SUM(cost) as cost
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
LEFT JOIN UNNEST(labels) as labels
GROUP BY key, value;

legacy SQL

SELECT
  labels.key as key,
  labels.value as value,
  SUM(cost)
FROM [project:dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX]
GROUP BY key, value;
비용
1 null null $4
2 app chocolate-masher $9
3 app grapefruit-squeezer $11
4 environment dev $5
5 environment prod $15
합계 $44

총합이 결제 금액보다 높습니다.

약정 사용 할인 쿼리

다음 쿼리는 내 보낸 결제 데이터에서 약정 사용 할인과 관련된 수수료 및 크레딧을 확인하는 방법을 보여줍니다.

약정 수수료 보기

결제 데이터 내보내기에서 약정 사용 할인에 대한 약정 요금을 보려면 다음 샘플 쿼리를 사용하세요.

표준 SQL

SELECT
    invoice.month AS invoice_month,
    SUM(cost) as commitment_fees
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
WHERE LOWER(sku.description) LIKE "commitment%"
GROUP BY 1

약정 크레딧 보기

결제 데이터 내보내기에서 약정 사용 할인 크레딧을 보려면 다음 샘플 쿼리를 사용하세요.

표준 SQL

SELECT
    invoice.month AS invoice_month,
    SUM(credits.amount) as CUD_credits
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
LEFT JOIN UNNEST(credits) AS credits
WHERE LOWER(credits.name) LIKE "committed use discount%"
GROUP BY 1

추가 쿼리 예시

지정된 인보이스 대상 월에 프로젝트별 비용 및 크레딧 쿼리

이 쿼리는 2020년 6월의 특정 인보이스 대상 월(YYYYMM 형식)을 제공하여 프로젝트별로 그룹화된 비용 및 크레딧 보기를 반환합니다.

표준 SQL

SELECT
  project.name,
  TO_JSON_STRING(project.labels) as project_labels,
  sum(cost) as total_cost,
  SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) as total_credits
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
WHERE invoice.month = "202006"
GROUP BY 1, 2
ORDER BY 1;

legacy SQL

TO_JSON_STRING not supported.
name project_labels total_cost total_credits
1 CTG - Dev [{"key":"ctg_p_env","value":"dev"}] 79.140979 -4.763796
2 CTG - Prod [{"key":"ctg_p_env","value":"prod"},{"key":"ctg_team","value":"eng"}] 32.466272 -3.073356
3 CTG - Sandbox [{"key":"ctg_p_env","value":"dev"}] 0 0
4 CTG - Storage [{"key":"ctg_p_env","value":"prod"},{"key":"ctg_team","value":"data"}] 7.645793 -0.003761

가격 책정 데이터 쿼리 예시

이 섹션에서는 BigQuery로 내보낸 Cloud Billing 가격 책정 데이터를 쿼리하는 다양한 예시를 제공합니다.

가격 책정 쿼리에 사용되는 공통 값

이 섹션의 쿼리 예시에서는 다음 값을 사용합니다.

  • 테이블 이름: project.dataset.cloud_pricing_export
  • SKU ID: 2DA5-55D3-E679(Cloud Run - 요청)

특정 SKU의 정가 가져오기

이 예시에서는 지정된 SKU의 각 가격 책정 등급에 대한 list_price를 반환하는 간단한 쿼리를 보여줍니다.

표준 SQL

SELECT sku.id,  sku.description, list_price.*
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

_PARTITIONTIME는 BigQuery에서 자동 생성되는 필드이며, 데이터가 속한 날짜를 나타냅니다. _PARTITIONTIME 대신 Cloud Billing 내보내기가 명시적으로 생성하는 필드(예: pricing_as_of_time)를 사용할 수 있습니다.

다음은 pricing_as_of_time 필드를 사용하도록 구성된 동일한 쿼리입니다.

SELECT sku.id,  sku.description, list_price.*
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(pricing_as_of_time) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

쿼리 결과

id 설명 pricing_unit aggregation_info.
aggregation_level
aggregation_info.
aggregation_interval
tiered_rates.
pricing_unit_quantity
tiered_rates.
start_usage_amount
tiered_rates.
usd_amount
tiered_rates.
account_currency_amount
1 2DA5-55D3-E679 요청 COUNT 계정 월별 1000000 0 0 0
          1000000 2000000 0.4 0.4

특정 SKU의 정가를 가져오고 서비스 설명을 포함

이 섹션의 두 예시에서는 지정된 SKU의 각 가격 책정에 대해 list_price를 반환하는 쿼리를 보여주며 SKU 설명 및 서비스 설명이 포함되어 있습니다.

  • 예시 1은 가격 책정 등급이 중첩된 데이터로 표시된 행당 하나의 SKU를 반환합니다.
  • 예시 2는 가격 책정 등급별로 SKU당 하나의 행을 반환하기 위해 데이터의 중첩을 보여줍니다.

예시 1: 중첩 데이터 반환

이 예시에서는 단일 SKU를 쿼리하여 list_price 데이터를 반환합니다. 이 SKU에는 여러 가격 책정 등급이 있습니다. 목록 가격 필드 값은 SKU ID 행 아래에 중첩된 개별 행에 표시됩니다.

표준 SQL

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       list_price.*
FROM my-billing-admin-project.my_billing_dataset.cloud_pricing_export
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

쿼리 결과:

sku_id sku_description service_id service_description aggregation_info.
aggregation_level
aggregation_info.
aggregation_interval
tiered_rates.
pricing_unit_quantity
tiered_rates.
start_usage_amount
tiered_rates.
usd_amount
tiered_rates.
account_currency_amount
1 2DA5-55D3-E679 요청 152E-C115-5142 Cloud Run 계정 월별 1000000 0 0 0
            1000000 2000000 0.4 0.4

예시 2: 동일한 테이블과 결합되지 않은 데이터를 반환

이 예시에서는 단일 SKU를 쿼리하여 list price를 반환합니다. SKU에는 여러 가격 책정 등급이 있습니다. 이 쿼리는 UNNEST 연산자를 사용하여 tiered_rates 배열을 평면화하고 필드를 동일한 표에 조인하여 결과적으로는 가격 등급당 하나의 행이 생깁니다.

표준 SQL

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       tier.*
FROM `my-billing-admin-project.my_billing_dataset.cloud_pricing_export`, UNNEST (sku_pricing.list_price.tiered_rates) as tier
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

쿼리 결과:

sku_id sku_description service_id service_description pricing_unit_quantity start_usage_amount usd_amount account_currency_amount
1 2DA5-55D3-E679 요청 152E-C115-5142 Cloud Run 1000000.0 0.0 0.0 0.0
2 2DA5-55D3-E679 요청 152E-C115-5142 Cloud Run 1000000.0 2000000.0 0.4 0.4

제품 분류 및 지역 분류를 사용하여 SKU 쿼리

  • 상품 분류Serverless, Cloud Run 또는 VMs On Demand과 같이 SKU에 적용되는 제품 카테고리 목록입니다.
  • 지역 분류는 유형 및 리전 값으로 구성된 SKU에 적용되는 지리정보 메타데이터입니다.

SKU의 상품 분류 가져오기

이 예시는 지정된 SKU에 대해 product_taxonomy 목록을 반환하는 쿼리를 보여줍니다. 여기에서 SKU ID = 2DA5-55D3-E679(Cloud Run - 요청)입니다.

표준 SQL

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       product_taxonomy
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

쿼리 결과:

sku_id sku_description service_id service_description product_taxonomy
1 2DA5-55D3-E679 요청 152E-C115-5142 Cloud Run GCP
        서버리스
        Cloud Run
        기타

특정 제품 분류에 대한 모든 SKU 가져오기

이 예시에서는 지정된 product_taxonomy와 일치하는 모든 SKU를 반환하는 쿼리를 보여줍니다. 이 쿼리에서는 서버리스product taxonomy 값으로 지정합니다.

표준 SQL

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       product_taxonomy
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
     AND "Serverless" in UNNEST(product_taxonomy)
LIMIT 10
;

쿼리 결과:

sku_id sku_description service_id service_description product_taxonomy
1 0160-BD7B-4C40 Cloud Tasks 네트워크 리전 내 이그레스 F3A6-D7B7-9BDA Cloud 작업 GCP
        서버리스
        Cloud 작업
        기타
2 FE08-0A74-7AFD Cloud Tasks GOOGLE-API 이그레스 F3A6-D7B7-9BDA Cloud 작업 GCP
        서버리스
        Cloud 작업
        기타
3 A81A-32A2-B46D 태스크 큐 저장소 솔트레이크시티 F17B-412E-CB64 App Engine GCP
        서버리스
        GAE
        기타
        TaskQueue

...

특정 지역 분류 및 제품 분류에 대한 모든 SKU 가져오기

이 예시에서는 지정된 geo_taxonomy 리전 및 지정된 product_taxonomy와 일치하는 모든 SKU를 반환하는 쿼리를 보여줍니다. 여기서 region = us -east4이고 product_taxonomy = VMs On Demand입니다.

표준 SQL

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       geo_taxonomy,
       product_taxonomy
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND "VMs On Demand" in UNNEST(product_taxonomy)
      AND geo_taxonomy.type = "REGIONAL"
      AND "us-east4" in UNNEST (geo_taxonomy.regions)
;

쿼리 결과:

sku_id sku_description service_id service_description geo_taxonomy.type geo_taxonomy.regions product_taxonomy
1 9174-81EE-425B 버지니아에서 실행하는 단독 테넌시 인스턴스용 단독 테넌시 6F81-5844-456A Compute Engine 리전 us-east4 GCP
            Compute
            GCE
            VMs On Demand
            Memory: Per GB
2 C3B9-E891-85ED 버지니아에서 실행되는 단독 테넌시 인스턴스 Ram 6F81-5844-456A Compute Engine 리전 us-east4 GCP
            Compute
            GCE
            VMs On Demand
            Memory: Per GB
3 6E2A-DCD9-87ED N1 사전 정의된 인스턴스 Ram은 버지니아에서 실행됨 6F81-5844-456A Compute Engine 리전 us-east4 GCP
            Compute
            GCE
            VMs On Demand
            Memory: Per GB

...

Google Cloud Console에서 사용 가능한 비용 및 가격 책정 보고서