이 문서에서는 BigQuery로 내보내 BigQuery에 저장된 Cloud Billing 데이터를 쿼리하는 방법의 예시를 제공합니다.
BigQuery로 결제 데이터 내보내기에 대한 자세한 내용은 개요와 제한사항을 참조하세요.
결제 보고서에서 SQL 쿼리 생성
BigQuery에서 결제 보고서의 결과와 동일한 결과를 반환하는 SQL 쿼리를 빠르게 작성하려면 Google Cloud 콘솔에서 제공되는 결제 보고서에서 쿼리 생성 기능을 사용하면 됩니다.
쿼리에 사용할 테이블 이름 지정
이 예시에서는 BigQuery에서 내보낸 Cloud Billing 데이터를 쿼리하려면 FROM
절에 테이블 이름의 전체 경로를 지정해야 합니다. 테이블 이름은 점으로 구분된 세 가지 값을 사용하여 결정됩니다.
project-ID.dataset_name.BQ_table_name
project-ID
는 BigQuery 데이터 세트가 포함된 설정한 Google Cloud 프로젝트의 ID입니다.dataset_name
는 내보낸 Cloud Billing 데이터가 있는 BigQuery 테이블을 포함하도록 설정한 BigQuery 데이터 세트의 이름입니다.BQ_table_name
는 쿼리하려는 내보낸 Cloud Billing 데이터가 포함된 BigQuery 테이블의 이름입니다.내보낸 Cloud Billing 데이터가 포함된 BigQuery 테이블에는 사용 설정한 내보내기 유형에 따라 이름이 자동으로 할당됩니다.
표준 사용량 비용 테이블: BigQuery 데이터 세트에서 이 테이블의 이름은
gcp_billing_export_v1_<BILLING-ACCOUNT-ID>
입니다.상세 사용량 비용 테이블: BigQuery 데이터 세트에서 이 테이블의 이름은
gcp_billing_export_resource_v1_<BILLING-ACCOUNT-ID>
입니다.가격 책정 테이블: BigQuery 데이터 세트에서 이 테이블의 이름은
cloud_pricing_export
입니다.
예를 들어 상세 사용량 비용 데이터를 내보내도록 구성된 Cloud Billing 계정과 다음과 같은 결제 내보내기 구성의 구성요소가 있다고 가정해 보겠습니다.
project-ID
:my-billing-project
dataset_name
:my_billing_dataset
BQ_table_name
:gcp_billing_export_resource_v1_<BILLING-ACCOUNT-ID>
BILLING-ACCOUNT-ID
:010101-F0FFF0-10X10X
– 내보내는 결제 데이터가 포함된 Cloud Billing 계정의 ID입니다. 결제 계정 ID를 찾는 방법을 알아보세요.
예시 값에 따라 FROM
절을 다음과 같이 작성합니다.
my-billing-project.my_billing_dataset.gcp_billing_export_resource_v1_010101-F0FFF0-10X10X
Cloud Billing 데이터 유형별 쿼리 예시
이 섹션에서는 표준 사용량 비용 데이터, 상세 사용량 비용 데이터, 가격 책정 데이터에 대한 쿼리 예시를 제공합니다.
상세 사용량 비용 데이터 내보내기를 선택한 경우에는 상세 사용량 비용 쿼리 예시 외에도 표준 사용량 비용 쿼리 예시도 사용할 수 있습니다.
표준 사용량 비용 데이터 | 상세 사용량 비용 데이터 | 가격 책정 데이터 |
---|---|---|
표준 사용량 비용 쿼리 예시 | 상세 사용량 비용 쿼리 예시 | 가격 책정 데이터 쿼리 예시 |
표준 사용량 비용 쿼리 예시
이 섹션에서는 BigQuery로 내보낸 Cloud Billing 표준 사용량 비용 데이터를 쿼리하는 방법에 대한 예시를 제공합니다.
이러한 쿼리 예시는 상세 사용량 비용 내보내기 옵션과 함께 제공된 리소스 수준 정보를 검색하기 위해 작성되지는 않지만 BigQuery로 내보낸 상세 사용량 비용 데이터와 함께 작동합니다.
예시 표준 비용 쿼리에서 사용된 공통 값
이 섹션의 쿼리 예시에서는 테이블 이름에 대해 project-ID.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 AS NUMERIC)) + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC)) FROM UNNEST(credits) AS c), 0))) AS total_exact FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` GROUP BY 1 ORDER BY 1 ASC ;
예를 들어 앞의 쿼리에 대한 결과는 다음과 같습니다.
Row | 월 | 합계 | 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 AS NUMERIC)) + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC)) FROM UNNEST(credits) AS c), 0))) AS total_exact FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` GROUP BY 1, 2 ORDER BY 1 ASC, 2 ASC ;
예를 들어 앞의 쿼리에 대한 결과는 다음과 같습니다.
Row | 월 | cost_type | 합계 | total_exact |
---|---|---|---|---|
1 | 201901 | regular | $1000.501209987994782 | $1000.50 |
2 | 201901 | rounding_error | –$0.500489920049387 | –$0.50 |
3 | 201901 | 세금 | $10.000329958477891 | $10.00 |
4 | 201901 | 조정 | –$5.002572999387045 | –$5.00 |
라벨이 있는 쿼리 예시
다음 예는 라벨로 데이터를 쿼리하는 다른 방법을 보여줍니다.
이 섹션의 예에서는 다음을 가정합니다.
- 2가지 앱 (grapefruit-squeezer 및 chocolate-masher)이 있습니다.
- 각 앱에는 두 가지 환경 (dev 및 prod)이 있습니다.
- dev 환경의 경우 앱마다 하나의 소형 인스턴스가 있습니다.
- 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-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`;
legacy SQL
TO_JSON_STRING not supported.
Row | sku.description | labels | cost |
---|---|---|---|
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-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` GROUP BY labels;
legacy SQL
TO_JSON_STRING not supported.
Row | labels | cost |
---|---|---|
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 |
라벨 값의 특정 키에 따라 그룹화
특정 라벨 키의 값에 따라 비용을 분류하는 경우가 많습니다. LEFT JOIN
를 사용하고 WHERE
가 아닌 JOIN
조건에 키 필터를 넣으면 이 키를 포함하지 않는 비용이 포함되므로 비용의 전체 보기가 수신됩니다.
표준 SQL
SELECT labels.value as environment, SUM(cost) as cost FROM `project-ID.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-ID:dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX] WHERE labels.key = "environment" OR labels.key IS NULL GROUP BY environment;
Row | environment | cost |
---|---|---|
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-ID.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-ID:dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX] GROUP BY key, value;
Row | key | value | cost |
---|---|---|---|
1 | null | null | $4 |
2 | 앱 | chocolate-masher | $9 |
3 | 앱 | grapefruit-squeezer | $11 |
4 | 환경 | dev | $5 |
5 | 환경 | prod | $15 |
합계 | $44 |
총합이 결제 금액보다 높습니다.
약정 사용 할인 쿼리
다음 쿼리는 내보낸 결제 데이터에서 약정 사용 할인과 관련된 수수료 및 크레딧을 확인하는 방법을 보여줍니다. 약정 요금 및 크레딧이 Cloud Billing 계정과 프로젝트에 적용되는 방식을 알아보려면 약정 사용 할인 기여 분석을 참조하세요.
약정 수수료 보기
결제 데이터 내보내기에서 약정 사용 할인에 대한 약정 수수료를 보려면 다음 샘플 쿼리를 사용하세요.
표준 SQL
SELECT invoice.month AS invoice_month, SUM(cost) as commitment_fees FROM `project-ID.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-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` LEFT JOIN UNNEST(credits) AS credits WHERE credits.type = "COMMITTED_USAGE_DISCOUNT" GROUP BY 1
리소스 계층 구조 필터를 사용하여 상위 항목 검토
리소스 계층 구조 필터를 사용하여 프로젝트, 폴더, 조직과 같은 계층 구조 요소에 따라 비용을 집계할 수 있습니다. 이러한 쿼리 예시는 리소스 계층 구조 요소로 필터링된 비용을 합산하고 프로젝트 상위 항목을 표시하기 위한 방법을 보여줍니다.
예시 1: 리소스 이름으로 필터링
이 예시에서는 프로젝트 상위 항목으로 비용을 그룹화하고 상대적 리소스 이름으로 식별되고, 지정된 계층 구조 요소에 따라 생성된 비용만 필터링하는 쿼리를 보여줍니다.
문자열 방법
SELECT invoice.month AS invoice_month, TO_JSON_STRING(project.ancestors) as ancestors, SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS net_cost FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq WHERE TO_JSON_STRING(project.ancestors) like "%resource_name\":\"folders/1234" GROUP BY invoice_month, ancestors ORDER BY invoice_month, ancestors
UNNEST 방법
SELECT invoice.month AS invoice_month, TO_JSON_STRING(project.ancestors) as ancestors, SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS net_cost FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq, UNNEST(project.ancestors) as ancestor WHERE ancestor.resource_name = "folders/1234" GROUP BY invoice_month, ancestors ORDER BY invoice_month, ancestors
예시 2: 표시 이름으로 필터링
이 예시에서는 프로젝트 상위 항목으로 비용을 그룹화하고 사용자가 제공한 표시 이름으로 식별되고, 지정된 계층 구조 요소에 따라 생성된 비용만 필터링하는 쿼리를 보여줍니다.
문자열 일치 방법
SELECT invoice.month AS invoice_month, TO_JSON_STRING(project.ancestors) as ancestors, SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS net_cost FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq WHERE TO_JSON_STRING(project.ancestors) like "%display_name\":\"MyFolderName%" GROUP BY invoice_month, ancestors ORDER BY invoice_month, ancestors
UNNEST 방법
SELECT invoice.month AS invoice_month, TO_JSON_STRING(project.ancestors) as ancestors, SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS net_cost FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq, UNNEST(project.ancestors) as ancestor WHERE ancestor.display_name = "MyFolderName" GROUP BY invoice_month, ancestors ORDER BY invoice_month, ancestors
태그가 있는 쿼리 예시
다음 예시는 태그를 사용하여 데이터를 쿼리하는 방법을 보여줍니다.
태그를 사용하여 인보이스 대상 월별 비용 계산
다음 쿼리는 cost_center
태그에 대해 인보이스 대상 월별로 반환 비용을 사용하는 방법을 보여줍니다.
SELECT invoice.month AS invoice_month, tag.value AS cost_center, ROUND((SUM(CAST(cost AS NUMERIC)) + SUM(IFNULL((SELECT SUM (CAST(c.amount AS NUMERIC)) FROM UNNEST(credits) AS c), 0))), 2) AS net_cost FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`, UNNEST(tags) AS tag WHERE tag.key = "cost_center" AND tag.namespace = "821092389413" GROUP BY invoice.month, tag.value ORDER BY invoice.month, tag.value;
예를 들어 앞의 쿼리에 대한 결과는 다음과 같습니다.
행 | invoice_month | cost_center | net_cost |
---|---|---|---|
1 | 202208 | android_mobile_apps | 9.93 |
2 | 202208 | ios_mobile_apps | 9.93 |
3 | 202209 | android_mobile_apps | 25.42 |
4 | 202209 | ios_mobile_apps | 25.4 |
5 | 202209 | 맞춤설정 | 16.08 |
태그가 지정되지 않은 리소스의 비용 보기
이 쿼리는 태그되지 않은 리소스의 인보이스 합계를 인보이스 대상 월별로 그룹화하여 표시합니다.
SELECT invoice.month AS invoice_month, ROUND((SUM(CAST(cost AS NUMERIC)) + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC)) FROM UNNEST(credits) AS c), 0))), 2) AS net_cost FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` WHERE "color" NOT IN (SELECT key FROM UNNEST(tags)) GROUP BY invoice_month ORDER BY invoice_month;
예를 들어 앞의 쿼리에 대한 결과는 다음과 같습니다.
행 | invoice_month | net_cost |
---|---|---|
1 | 202202 | 0 |
2 | 202203 | 16.81 |
3 | 202204 | 54.09 |
4 | 202205 | 55.82 |
5 | 202206 | 54.09 |
6 | 202207 | 55.83 |
7 | 202208 | 31.49 |
추가 쿼리 예시
지정된 인보이스 대상 월에 프로젝트별 비용 및 크레딧 쿼리
이 쿼리는 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-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` WHERE invoice.month = "202006" GROUP BY 1, 2 ORDER BY 1;
행 | 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 |
비용을 쿼리하여 지정된 인보이스 대상 월의 수정사항 또는 지연된 수익 창출 사용량 보기
이 간소화된 쿼리는 특정 인보이스 대상 월을 제공하고 사용일이 인보이스 대상 월 이전인 날짜별로 필터링하여 수정사항 또는 지연된 수익 창출 사용량의 비용 합계(이전 인보이스에 포함되어야 하는 요금)를 반환합니다.
표준 SQL
SELECT SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS total FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` WHERE invoice.month = '202403' AND DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) < '2024-03-01';
예를 들어 앞의 쿼리에 대한 결과는 다음과 같습니다.
행 | 합계 |
---|---|
1 | 3.531752 |
비용 세부정보를 쿼리하여 지정된 인보이스 대상 월의 서비스별 수정사항 또는 지연된 수익 창출 사용량 보기
이 예시는 인보이스 요금에 대해 서비스별 비용 분석을 반환하는 쿼리를 보여줍니다. 여기에서 사용일은 인보이스 대상 월 이전입니다. 이 쿼리는 수정사항 또는 지연된 수익 창출 사용량에 대해 서비스별 비용 및 크레딧 합계(이전 인보이스에 포함되어야 하는 요금)를 반환합니다.
이 쿼리 예시에서 WHERE
절은 인보이스 대상 월(YYYYMM 형식)이 2024년 3월인 모든 요금을 필터링한 다음, 결과를 조정하여 사용일이 2024년 3월 1일 이전인 인보이스 대상 월 요금만 반환합니다.
SELECT DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) AS `Day`, service.description AS `Service Description`, SUM(CAST(cost_at_list AS NUMERIC)) AS `List cost`, SUM(CAST(cost AS NUMERIC)) - SUM(CAST(cost_at_list AS NUMERIC)) AS `Negotiated savings`, SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('SUSTAINED_USAGE_DISCOUNT', 'DISCOUNT', 'SPENDING_BASED_DISCOUNT', 'COMMITTED_USAGE_DISCOUNT', 'FREE_TIER', 'COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE', 'SUBSCRIPTION_BENEFIT', 'RESELLER_MARGIN')), 0)) AS `Discounts`, SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('CREDIT_TYPE_UNSPECIFIED', 'PROMOTION')), 0)) AS `Promotions and others`, SUM(CAST(cost_at_list AS NUMERIC)) + SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('SUSTAINED_USAGE_DISCOUNT', 'DISCOUNT', 'SPENDING_BASED_DISCOUNT', 'COMMITTED_USAGE_DISCOUNT', 'FREE_TIER', 'COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE', 'SUBSCRIPTION_BENEFIT', 'RESELLER_MARGIN')), 0)) + SUM(CAST(cost AS NUMERIC)) - SUM(CAST(cost_at_list AS NUMERIC))+ SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('CREDIT_TYPE_UNSPECIFIED', 'PROMOTION')), 0)) AS `Subtotal` FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` WHERE invoice.month = '202403' AND DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) < '2024-03-01' GROUP BY Day, service.description ORDER BY Day DESC, Subtotal DESC;
예를 들어 앞의 쿼리에 대한 결과는 다음과 같습니다.
행 | 일 | 서비스 설명 | 정가 비용 | 협상 할인 | 할인 | 프로모션 및 기타 | 소계 |
---|---|---|---|---|---|---|---|
1 | 2024-02-29 | Compute Engine | 4.39916 | 0 | -1.00916 | 0 | 3.39000 |
2 | 2024-02-29 | 지원 | 0.131969 | 0 | 0 | 0 | 0.131969 |
3 | 2024-02-29 | BigQuery | 0.005502 | 0 | 0 | 0 | 0.005502 |
4 | 2024-02-29 | 네트워킹 | 0.010972 | 0 | -0.006691 | 0 | 0.004281 |
상세 사용량 비용 쿼리 예시
이 섹션에서는 BigQuery로 내보낸 Cloud Billing 상세 사용량 비용 데이터를 쿼리하는 방법에 대한 예시를 제공합니다.
상세 사용량 비용 스키마에는 표준 사용량 비용 스키마의 모든 필드가 포함되기 때문에, BigQuery로 내보낸 표준 데이터에 대해 제공된 쿼리 예시는 내보내는 상세 데이터와 함께 작동합니다. 표준 쿼리 예시는 상세 사용량 비용 내보내기 옵션과 함께 제공되는 리소스 수준 정보를 검색하기 위해 작성되지 않습니다. 상세 데이터에 대한 쿼리를 생성할 때, 템플릿으로 표준 쿼리 예시를 사용하고 테이블 이름을 업데이트하고 상세 사용량 비용 스키마에서 사용할 수 있는 필드를 추가할 수 있습니다.
내보낸 상세 데이터의 추가 요구사항 및 제한사항은 상세 사용량 비용 데이터의 스키마를 참조하세요.
상세 비용 쿼리 예시에서 사용된 공통 값
이 섹션의 쿼리 예시에서는 테이블 이름에 대해 project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX
값을 사용합니다.
인보이스의 리소스 수준 비용 반환
다음 쿼리는 내보낸 결제 데이터를 사용하여 인보이스에서 리소스 수준 비용 및 크레딧 값을 볼 수 있는 두 가지 방법을 보여줍니다.
total
필드는 부동 소수점 비용과 크레딧 값을 직접 합산하므로 부동 소수점 반올림 오차가 발생할 수 있습니다.total_exact
필드는 비용과 크레딧 값을 합산하기 전 micro로 변환한 다음 합산 후에 다시 dollar로 변환하므로, 부동 소수점 반올림 오차가 방지됩니다.
인보이스당 각 리소스의 합계 비용
이 쿼리는 일반 비용 합계로 월별 각 resource.name
의 인보이스 합계, 세금, 조정, 반올림 오류를 보여줍니다. 리소스 수준 항목과 연관되지 않은 모든 비용은 해당 월에 대해 null
이름으로 집계됩니다.
표준 SQL
SELECT invoice.month, resource.name, SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS total, (SUM(CAST(cost AS NUMERIC)) + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC)) FROM UNNEST(credits) AS c), 0))) AS total_exact FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX` GROUP BY 1, 2 ORDER BY 1 ASC, 2 ASC ;
예를 들어 앞의 쿼리에 대한 결과는 다음과 같습니다.
Row | 월 | name | 합계 | total_exact |
---|---|---|---|---|
1 | 201901 | null | $1005.004832999999984 | $1005.00 |
2 | 201901 | backend1 | $781.8499760000028 | $781.85 |
3 | 201902 | null | $953.0034923645475983 | $953.03 |
4 | 201902 | backend1 | $992.3101739999999717 | $992.31 |
5 | 201902 | bitnami-launchpad-wordpress-1-wordpress | $1.2817819999999998 | $1.28 |
인보이스 월별 각 리소스의 비용 유형별 세부정보 반환
이 쿼리에서는 월별 각 resource.name
의 각 cost_type
에 대한 합계를 보여줍니다. 비용 유형에는 일반 비용, 세금, 조정 및 반올림 오류가 포함됩니다. 리소스 수준 항목과 연관되지 않은 모든 비용은 해당 월에 대해 null
이름으로 집계됩니다.
표준 SQL
SELECT invoice.month, cost_type, resource.name, SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS total, (SUM(CAST(cost AS NUMERIC)) + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC)) FROM UNNEST(credits) AS c), 0))) AS total_exact FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX` GROUP BY 1, 2, 3 ORDER BY 1 ASC, 2 ASC, 3 ASC ;
예를 들어 앞의 쿼리에 대한 결과는 다음과 같습니다.
Row | 월 | cost_type | name | 합계 | total_exact |
---|---|---|---|---|---|
1 | 201901 | regular | null | $1000.501209987994782 | $1000.50 |
2 | 201901 | rounding_error | null | –$0.500489920049387 | –$0.50 |
3 | 201901 | 세금 | null | $10.000329958477891 | $10.00 |
4 | 201901 | 조정 | null | –$5.002572999387045 | –$5.00 |
5 | 201901 | regular | backend1 | $410.998795012082947 | $411.00 |
2 | 201901 | rounding_error | backend1 | –$0.2404900489920378 | –$0.24 |
3 | 201901 | 세금 | backend1 | $4.105840329977189 | $4.11 |
Google Kubernetes Engine(GKE) 클러스터 비용 분석
이 섹션에서는 BigQuery Export 보고서에서 GKE 클러스터 비용을 필터링하는 예시를 제공합니다. GKE 클러스터 비용에 대한 자세한 내용은 클러스터 비용 분석 보기를 참조하세요.
GKE 비용 필터링
다음 쿼리 예시는 지원되는 리소스 유형에 대해 클러스터 이름, 네임스페이스, 라벨별로 GKE 비용을 필터링하고 그룹화하는 방법을 보여줍니다.
크레딧 이전 GKE 클러스터 비용
SELECT SUM(cost) AS cost_before_credits, labels.value AS cluster_name FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX` LEFT JOIN UNNEST(labels) as labels ON labels.key = "goog-k8s-cluster-name" GROUP BY labels.value ;
네임스페이스별 크레딧 이후 GKE 비용
SELECT labels.value as namespace, SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS cost_after_credits, FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX` LEFT JOIN UNNEST(labels) as labels ON labels.key = "k8s-namespace" GROUP BY namespace ;
SKU별 GKE 비용
SELECT project.id AS project_id, labels.value AS cluster_name, sku.id AS sku_id, sku.description AS sku_description, SUM(cost) AS cost FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX` JOIN UNNEST(labels) AS labels ON labels.key = "goog-k8s-cluster-name" GROUP BY cluster_name, project_id, sku_description, sku_id ;
가격 책정 데이터 쿼리 예시
이 섹션에서는 BigQuery로 내보낸 Cloud Billing 가격 책정 데이터를 쿼리하는 다양한 예시를 제공합니다.
가격 책정 쿼리 예시에 사용되는 공통 값
이 섹션의 쿼리 예시에서는 다음 값을 사용합니다.
- 테이블 이름:
project-ID.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-ID.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-ID.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 project-ID.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 `project-ID.dataset.cloud_pricing_export` as sku_pricing, 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-ID.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-ID.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 Tasks | GCP |
서버리스 | |||||
Cloud Tasks | |||||
기타 | |||||
2 | FE08-0A74-7AFD | Cloud Tasks GOOGLE-API 이그레스 | F3A6-D7B7-9BDA | Cloud Tasks | GCP |
서버리스 | |||||
Cloud Tasks | |||||
기타 | |||||
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-ID.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 |
컴퓨팅 | |||||||
GCE | |||||||
VMs On Demand | |||||||
메모리: GB별 | |||||||
2 | C3B9-E891-85ED | 버지니아에서 실행되는 단독 테넌시 인스턴스 Ram | 6F81-5844-456A | Compute Engine | 리전 | us-east4 | GCP |
컴퓨팅 | |||||||
GCE | |||||||
VMs On Demand | |||||||
메모리: GB별 | |||||||
3 | 6E2A-DCD9-87ED | N1 사전 정의된 인스턴스 Ram은 버지니아에서 실행됨 | 6F81-5844-456A | Compute Engine | 리전 | us-east4 | GCP |
컴퓨팅 | |||||||
GCE | |||||||
VMs On Demand | |||||||
메모리: GB별 |
가격 책정 데이터와 상세 사용량 비용 데이터 조인
이 쿼리는 가격 및 비용 데이터 내보내기를 조인하여 비용과 함께 자세한 가격 책정 정보를 확인하는 방법을 보여줍니다. 상세 사용량 비용 데이터(Exports
로서)에서 내보낸 데이터를 가져오고 사용량 비용 데이터를 내보낸 가격 책정 데이터(Prices
로서)와 조인하도록 이 쿼리를 구성할 수 있습니다.
상세 사용량 비용 테이블 이름을 사용하여 Exports
데이터를 가져옵니다.
gcp_billing_export_resource_v1_<BILLING_ACCOUNT_ID>
Prices
데이터에 가격 책정 테이블 이름을 사용합니다.
project-ID.dataset.cloud_pricing_export
WITH Exports AS ( SELECT * FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX` ), Prices AS ( SELECT * FROM `project-ID.dataset.cloud_pricing_export` ) SELECT Exports.sku.description AS sku_description, Exports.cost, Exports.usage, FlattenedPrices.pricing_unit_description, FlattenedPrices.account_currency_amount, FlattenedPrices.account_currency_code, FROM Exports JOIN (SELECT * FROM Prices CROSS JOIN UNNEST(Prices.list_price.tiered_rates)) AS FlattenedPrices ON Exports.sku.id = FlattenedPrices.sku.id AND Exports.price.tier_start_amount = FlattenedPrices.start_usage_amount WHERE DATE(Exports.export_time) = '2023-06-30' AND DATE(FlattenedPrices.export_time) = '2023-06-30' AND cost > 0 LIMIT 1000
예를 들어 앞의 쿼리에 대한 결과는 다음과 같습니다.
sku_description | 비용 | 사용량 | pricing_unit_description | account_currency_amount | account_currency_code |
---|---|---|---|---|---|
분산된 PD 용량 | 0.001345 | { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } | 기가바이트 월 | 0.1 | USD |
분산된 PD 용량 | 0.001344 | { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } | 기가바이트 월 | 0.1 | USD |
분산된 PD 용량 | 0.001346 | { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } | 기가바이트 월 | 0.1 | USD |
관련 주제
내보낸 Cloud Billing 데이터와 관련된 주제
Google Cloud 콘솔에서 사용 가능한 비용 및 가격 책정 보고서
- Cloud Billing 보고서 및 비용 추세 보기
- 인보이스 또는 명세서의 비용 세부정보 조회 및 다운로드
- Google Cloud 서비스의 가격 보기 및 다운로드
- 비용 분석 보고서로 절감되는 비용 알아보기
- 약정 사용 할인의 효과 분석
- 비용 및 결제 내역 보기