이 페이지에서는 BigQuery로 내보내 BigQuery에 저장된 Cloud Billing 데이터를 쿼리하는 방법의 예시를 제공합니다.
BigQuery로 결제 데이터 내보내기에 대한 자세한 내용은 개요와 제한사항을 참조하세요.
쿼리에 사용할 테이블 이름 지정
이 예시에서는 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 테이블은 두 가지가 있습니다.
- 일일 비용 세부정보 테이블: BigQuery 데이터 세트에서 이 테이블의 이름은
gcp_billing_export_v1_<BILLING_ACCOUNT_ID>
입니다. - 가격 책정 테이블: BigQuery 데이터 세트에서 이 테이블의 이름은
cloud_pricing_export
입니다.
- 일일 비용 세부정보 테이블: 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 |
...
관련 주제
내보낸 Cloud Billing 데이터와 관련된 주제
Google Cloud Console에서 사용 가능한 비용 및 가격 책정 보고서
- Cloud Billing 보고서 및 비용 추세 보기
- 인보이스 또는 명세서의 비용 세부정보 조회 및 다운로드
- Google Cloud 서비스의 가격 보기 및 다운로드
- 비용 분석 보고서로 절감되는 비용 알아보기
- 약정 사용 할인의 효과 분석
- 비용 및 결제 내역 보기