BigQuery 쿼리로 결제 내보내기 예제

다음은 내보낸 결제 데이터에 BigQuery 쿼리를 사용하는 방법의 몇 가지 예입니다.

인보이스의 총 비용 반환

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

  • 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개), 미국에서 실행 app: chocolate-masher
environment: dev
$2
소형 인스턴스(VCPU 1개), 미국에서 실행 app: grapefruit-squeezer
environment: dev
$3
소형 인스턴스(VCPU 1개), 미국에서 실행 app: chocolate-masher
environment: prod
$3.25
소형 인스턴스(VCPU 1개), 아시아에서 실행 app: chocolate-masher
environment: prod
$3.75
소형 인스턴스(VCPU 1개), 미국에서 실행 app: grapefruit-squeezer
environment: prod
$3.50
소형 인스턴스(VCPU 1개), 아시아에서 실행 app: grapefruit-squeezer
environment: prod
$4.50

그룹화 없이 모든 행 쿼리

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

표준 SQL

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

이전 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.table`
GROUP BY labels;

이전 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.table`
LEFT JOIN UNNEST(labels) as labels
  ON labels.key = "environment"
GROUP BY environment;

이전 SQL

SELECT
  labels.value as environment,
  SUM(cost) as cost
FROM [project:dataset.table]
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.table`
LEFT JOIN UNNEST(labels) as labels
GROUP BY key, value;

이전 SQL

SELECT
  labels.key as key,
  labels.value as value,
  SUM(cost)
FROM [project:dataset.table]
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

총합이 결제 금액보다 큰 것을 확인할 수 있습니다.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Cloud Billing 문서
도움이 필요하시나요? 지원 페이지를 방문하세요.