標準データのエクスポートの構造

このドキュメントでは、BigQuery の各テーブルにエクスポートされる Cloud Billing の標準的な使用料金データのスキーマのリファレンス情報を提供します。

標準の使用料金データのスキーマ

BigQuery データセットで、標準の Google Cloud の使用料金データが gcp_billing_export_v1_<BILLING_ACCOUNT_ID> というデータテーブルに読み込まれます。

以下の情報は、BigQuery にエクスポートされる Google Cloud の標準の使用料金データのスキーマについて説明したものです。このスキーマには、アカウント ID、請求書の日付、サービス、SKU、プロジェクト、ラベル、ロケーション、費用、使用量、クレジット、調整、通貨など、標準の Cloud 請求先アカウントの使用料金情報が含まれます。

BigQuery で標準使用料金データを使用する場合は、次の点に注意してください。

  • 標準の使用料金データに BigQuery データセットを選択または作成するときに、Cloud Billing データの使用がサポートされているデータセットのロケーションを選択できます。
  • Cloud Billing で標準の使用料金データのエクスポートを初めて有効にする場合、マルチリージョン ロケーション(EU または米国)に構成されたデータセットを選択すると、前月初日からさかのぼって Cloud Billing データを利用できるようになります。データは時系列でエクスポートされます。エクスポートされたデータの最初のバックフィルでは、Cloud Billing データの遡及的なエクスポートが完了して最新の使用状況データが表示されるまでに最大で 5 日ほどかかる場合があります。
  • 標準の使用料金データのエクスポートを有効にして、サポートされているリージョン ロケーションを使用するように構成されたデータセットを選択すると、エクスポートを有効にした日付から Cloud Billing データを利用できるようになります。
  • 標準の使用料金データのエクスポートを有効して無効にし、その後に再び有効にした場合、明示的に無効にした期間の Cloud Billing データを利用できなくなる可能性があります。
  • BigQuery テーブルへのデータの読み込み頻度をご覧ください。
  • 標準の使用料金データには、サービス使用料が発生する仮想マシンまたは SSD などのリソースレベルの費用データは含まれません。リソースレベルの費用データを BigQuery にエクスポートして分析する場合は、詳細な使用料金データのエクスポート有効化を検討してください。エクスポートされた詳細な使用料金データには、標準の使用料金データに含まれるすべてのフィールドと情報が含まれます。
  • 顧客管理の暗号鍵(CMEK)が有効になっているデータセットなど、BigQuery への課金データのエクスポートに影響する可能性のある他の制限事項をご覧ください。
フィールド タイプ 説明
billing_account_id 文字列

使用量が関連付けられている Cloud 請求先アカウント ID

販売パートナー向け: Cloud Billing サブアカウントで生成された使用料金の場合、これはサブアカウントの ID になります。親である販売パートナーの Cloud 請求先アカウントの ID ではありません。

invoice.month 文字列

費用項目を含む請求書の年と月(YYYYMM)。たとえば、「201901」は 2019 年 1 月に相当します。

このフィールドを使用して、請求書の合計金額を取得できます。BigQuery への Cloud Billing エクスポートに対するクエリの例をご覧ください。

invoice.publisher_type 文字列

トランザクションに関連付けられているパブリッシャーを示します。このフィールドは、Google と直接行った取引(ファーストパーティ)とパートナーと行った取引(サードパーティ)の間で請求書を分割することをサポートしています。また、取引に適用される規制も示します。

有効な値は次のとおりです。
  • GOOGLE: Google Cloud によるファーストパーティの規制対象外取引。
  • PARTNER: パートナーによる、規制対象または規制対象外のサードパーティ取引。
cost_type 文字列

この明細が表す費用のタイプ(通常、税、調整、または丸め誤差)。

service.id 文字列 使用量が関連付けられているサービスの ID。
service.description 文字列 Cloud Billing データを報告した Google Cloud サービス。
sku.id 文字列 サービスが使用するリソースの ID。SKU の詳細な一覧については、Google Cloud SKU をご覧ください。
sku.description 文字列 サービスで使用されるリソースタイプの説明。たとえば、Cloud Storage のリソースタイプは Standard Storage US です。
usage_start_time タイムスタンプ 指定された費用の計算が開始された時間(時間単位)すべてのサービスの使用量と費用は時間単位で表示されます。つまり、長時間実行されるサービスの場合、作業時間が複数の時間単位のウィンドウにまたがります。

詳細については、BigQuery ドキュメントの タイムスタンプ データ型に関する説明をご覧ください。 エクスポートされたデータと請求書の相違もご覧ください。

usage_end_time タイムスタンプ 指定された費用の計算が終了した時間(時間単位)。すべてのサービスの使用量と費用は時間単位で表示されます。つまり、長時間実行されるサービスの場合、作業時間が複数の時間単位のウィンドウにまたがります。

詳細については、BigQuery ドキュメントの タイムスタンプ データ型に関する説明をご覧ください。 エクスポートされたデータと請求書の相違もご覧ください。

project 構造体 project には、ID、番号、名前、祖先の番号、ラベルなど、Cloud Billing プロジェクトを記述するフィールドが含まれます。
project.id 文字列 Cloud Billing データを生成した Google Cloud プロジェクトの ID。
project.number 文字列 Cloud Billing データを生成した Google Cloud プロジェクトの一意の識別子(内部で生成されて匿名化される)。サポートケースや他のお客様とのコミュニケーションでは、Google はプロジェクト番号でプロジェクトを参照します。
project.name 文字列 Cloud Billing データを生成した Google Cloud プロジェクトの名前。
project.ancestry_numbers 文字列 指定された project.id(たとえば、my-project-123)で識別されるプロジェクトのリソース階層に含まれる祖先。

たとえば、/ParentOrgNumber/ParentFolderNumber/ のようになります。詳細については、リソース階層をご覧ください。

project.ancestors 構造体

このフィールドには、プロジェクト、フォルダ、組織など、費用項目のリソース階層の構造と値が表示されます。祖先はノードからルート(プロジェクト、フォルダ、組織)へ向けて並べられます。

project.ancestors.resource_name 文字列 各祖先の相対的なリソース名。形式は resourceType/resourceNumber です。project.ancestors.resource_name を使用すると、project.ancestry_numbers の全体を確認できます。
project.ancestors.display_name 文字列 コンソールでリソースに作成した名前。
project.labels.key 文字列 ラベルがある場合、使用量が発生した Google Cloud プロジェクトのラベルを構成する Key-Value ペアの Key の部分です。ラベルの使用について詳しくは、ラベルの使用についての記事をご確認ください。
project.labels.value 文字列 ラベルがある場合、使用量が発生した Google Cloud プロジェクトのラベルを構成する Key-Value ペアの Value の部分です。ラベルの使用について詳しくは、ラベルの使用についての記事をご確認ください。
labels.key 文字列 ラベルがある場合、使用量が発生した Google Cloud リソースのラベルを構成する Key-Value ペアの Key の部分です。ラベルの使用について詳しくは、ラベルの使用についての記事をご確認ください。
labels.value 文字列 ラベルがある場合、使用量が発生した Google Cloud リソースのラベルを構成する Key-Value ペアの Value の部分です。ラベルの使用について詳しくは、ラベルの使用についての記事をご確認ください。
system_labels.key 文字列 システムラベルが存在する場合、使用量が発生したリソースのシステムラベルを構成する Key-Value ペアの Key の部分です。使用可能なシステムラベルもご覧ください。
system_labels.value 文字列 システムラベルが存在する場合、使用量が発生したリソースのシステムラベルを構成する Key-Value ペアの Value の部分です。使用可能なシステムラベルもご覧ください。
location.location 文字列 使用が発生したマルチリージョン、国、リージョンまたはゾーンレベルでのロケーション。 特定のロケーションのないリソースglobal です。詳細については、地域とリージョンGoogle Cloud のロケーションをご覧ください。
location.country String location.location が国、リージョンまたはゾーンの場合、このフィールドは国になります(例: US)。詳細については、地域とリージョンGoogle Cloud のロケーションをご覧ください。
location.region String location.location がリージョンまたはゾーンの場合、このフィールドは使用量が発生したリージョンになります(例: us-central1)。詳細については、地域とリージョンGoogle Cloud のロケーションをご覧ください。
location.zone String location.location がゾーンの場合、このフィールドはゾーンになります(例: us-central1-a)。詳細については、地域とリージョンGoogle Cloud のロケーションをご覧ください。
cost 浮動小数点数 クレジットが適用される前の使用料(小数点以下 6 桁の精度で)。クレジットを含む合計費用を算出するには、credits.amount を費用に追加する必要があります。詳しくは、このクエリ例をご覧ください。
currency 文字列 費用の請求で使用されている通貨。詳しくは、現地通貨での請求と支払いをご確認ください。
currency_conversion_rate 浮動小数点数 米ドルから現地通貨への為替レート。つまり、cost÷currency_conversion_rate が米ドルでの金額になります。
usage.amount 浮動小数点数 使用された usage.unit の量。
usage.unit 文字列 リソースの使用状況を測定する基本単位。たとえば、標準ストレージの基本単位はバイト秒です。
usage.amount_in_pricing_units 浮動小数点数 使用された usage.pricing_unit の量。
usage.pricing_unit String Cloud Billing Catalog API によるリソース使用量の測定単位。
credits 構造体 credits には、Google Cloud と Google Maps Platform の SKU に関連付けられたクレジットの構造と値を記述するフィールドが含まれています。
credits.id 文字列 存在する場合は、クレジットが商品の SKU に関連付けられていることを示します。 credits.id 値は英数字の一意の識別子(たとえば、12-b34-c56-d78)とクレジットの種類の説明(確約利用割引 CPU など)のいずれかです。

credits.id フィールドが空の場合、商品の SKU はクレジットに関連付けられていません。

credits.full_name String プロダクトの SKU に関連付けられたクレジットの名前。これは、英数字 credits.id についての人が読める形式の説明です。たとえば、 無料トライアルのクレジット 費用ベースの確約利用割引などがあります。

credits.full_name 値は、英数字の credits.id を持つ SKU にのみ存在します。credits.id の値がクレジットの種類の説明( 確約利用割引 CPU など)の場合、credits.full_name フィールドは空になります。

credits.type String このフィールドは、credits.id の目的または送信元を示します。 以下のようなクレジットの種類があります。
  • COMMITTED_USAGE_DISCOUNT: VM 使用量に応じて大幅な割引価格が適用される Compute Engine 用に購入したリソースベースの確約利用契約。
  • COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE: 最小限の使用量分の費用を支払うことの確約と引き換えにサービスに対して購入した費用ベースの確約利用契約。
  • DISCOUNT: 割引クレジットの種類は、契約上の基準費用額を満たしたことで獲得されたクレジットに使用されます。Google Cloud コンソールで利用可能な Cloud Billing レポートには、割引クレジットの種類は費用ベースの割引(契約上)と表示されます。
  • FREE_TIER: 一部のサービスでは、指定された上限まで無料でリソースを使用できます。これらのサービスでは、無料枠の使用にクレジットが適用されます。
  • PROMOTION: プロモーション クレジットの種類には、Google Cloud の無料トライアルとマーケティング キャンペーンのクレジット、または Google Cloud を使用するための他の資金援助があります。プロモーション クレジットが利用可能な場合は、お支払い方法とみなされ、自動的に適用されて合計請求額が下がります。
  • RESELLER_MARGIN: 販売パートナーの場合、販売パートナーのマージンのクレジットの種類が、すべての有効な項目で獲得された販売パートナー プログラム割引であることを示します。
  • SUBSCRIPTION_BENEFIT: 割引の代わりにサービスへの長期サブスクリプションを購入することで獲得したクレジット。
  • SUSTAINED_USAGE_DISCOUNT: 継続利用割引のクレジットの種類は、請求月の一定の割合の特定の Compute Engine リソースを実行することで獲得される自動的に適用される割引です。
credits.name String Cloud 請求先アカウントに適用されたクレジットの説明。
credits.amount 浮動小数点数 使用量に適用されるクレジットの金額。
adjustment_info 構造体 adjustment_info には、Cloud 請求先アカウントに関連付けられた費用項目に対する調整の構造と値を記述するフィールドが含まれています。

adjustment_info 値は、費用項目が Cloud Billing の変更に対して生成された場合にのみ表示されます。変更は、修正のために行われる場合もあれば、修正以外の理由で発生する場合もあります。adjustment_info タイプには、エラーを修正するために発行されたのか、その他の理由なのかなど、調整に関する詳細が含まれます。

adjustment_info.id 文字列 表示される場合、費用項目と調整が関連付けられたことを示します。adjustment_info.id は、問題に関連付けられたすべての調整の一意の ID です。
adjustment_info.description 文字列 調整と原因の説明。
adjustment_info.type 文字列

調整のタイプ。

以下のようなタイプがあります。

  • USAGE_CORRECTION: 間違った使用状況報告に伴う修正。
  • PRICE_CORRECTION: 価格設定ルールの誤りに伴う修正。
  • METADATA_CORRECTION: 費用を変更せずにメタデータを訂正する修正。
  • GOODWILL: お客様の信用に応じて発行されるクレジット。
  • SALES_BASED_GOODWILL: 契約の一部としてお客様の信用に応じて発行されるクレジット。
  • SLA_VIOLATION: サービスレベル目標(SLO)違反のためユーザーに発行されるクレジット。
  • BALANCE_TRANSFER: 1 つのお支払いアカウントから別のお支払いアカウントに資金移動するときの調整。
  • ACCOUNT_CLOSURE: 閉鎖された口座の残高をゼロにする調整。
  • GENERAL_ADJUSTMENT: 一般的な請求先アカウントの変更。
adjustment_info.mode 文字列

調整を発行する方法。

以下のようなモードがあります。

  • PARTIAL_CORRECTION: 元の使用量と費用を部分的に無効にする修正です。
  • COMPLETE_NEGATION_WITH_REMONETIZATION: 元の使用量と費用を完全に無効にし、更新された使用量と費用を含む修正後の項目を発行する修正です。
  • COMPLETE_NEGATION: 元の使用量と費用を完全に無効にし、それ以上使用しても費用は再収益化されない修正です。
  • MANUAL_ADJUSTMENT: 調整は費用と使用量に手動で割り当てられます。
export_time タイムスタンプ Cloud Billing データの追加に関連する処理時間。 これは、新しいエクスポートごとに常に増加します。
以下のエクスポートされたデータと請求書の相違もご覧ください。
tags 構造体

キー、値、名前空間などのタグを記述するフィールド。

tags.key String

この特定のタグに関連付けられたキーの略称または表示名。

tags.value String

tags.key に接続されているリソース。特定のキーのリソースに付加できる値は、常に 1 つだけです。

tags.inherited ブール値

タグ バインディングが継承されるか(Tags Inherited = True)、直接 / 非継承か(Tags Inherited = False)を示します。リソース階層で、親リソースへのタグ バインディングを作成できます。

tags.namespace String

タグキーと値を定義するリソース階層を表します。名前空間をタグキーとタグ値の略称と組み合わせることで、タグキーまたはタグ値にグローバルに一意の完全修飾名を作成できます。

cost_at_list 浮動小数点数

Cloud 請求先アカウントに請求されるすべての項目に関連付けられている正規価格。

transaction_type 文字列

販売者のトランザクション タイプ。取引の種類は次のいずれかです。

  • GOOGLE = 1: Google Cloud が販売するサービス。
  • THIRD_PARTY_RESELLER = 2: Google Cloud が転売するサードパーティのサービス。
  • THIRD_PARTY_AGENCY = 3: Google Cloud をエージェントととしてパートナーが販売する、サードパーティのサービス。
seller_name 文字列

販売者の正式名。

使用料金の標準的なデータと詳細データを把握する

以下のセクションでは、BigQuery にエクスポートされる標準と詳細な使用料金データについて説明します。

ラベルについて

特定のラベルの費用データには、ラベルがリソースに適用されてからの使用量のみが表示されます。たとえば、2024 年 1 月 15 日に Compute Engine VM に environment:dev というラベルを追加した場合、environment:dev の分析には 1 月 15 日以降の VM の使用量のみが含まれます。

また、各サービスで提供されるタイミングに応じて、サービスごとに異なる時刻のラベルデータが表示されることもあります。

使用可能なシステムラベル

システムラベルは、使用量データを生成したリソースに関する重要なメタデータを含む Key-Value ペアです。以下のシステムラベルが自動的に適用されます。

system_labels.key system_labels.value 説明
compute.googleapis.com/machine_spec n1-standard-1、custom-2-2048 仮想マシンの構成。詳細については、マシンタイプをご覧ください。
compute.googleapis.com/cores n1-standard-4 の場合は 4、custom-2-2048 の場合は 2 仮想マシンで使用できる vCPU の数。
compute.googleapis.com/memory n1-standard-4 の場合は 15360(15 GB×1,024 MB/GB)、custom-2-2048 の場合は 2048 仮想マシンで使用可能なメモリ量(MB 単位)。
compute.googleapis.com/is_unused_reservation true、false ゾーンの予約で予約されているものの、使用されていない、予約された使用量を表します。
storage.googleapis.com/object_state live; noncurrent; soft_deleted; multipart 課金対象のストレージ オブジェクトの状態。

エクスポートされたデータと請求書の相違

Google Cloud プロダクトが、Cloud Billing プロセスに使用量データと費用データを報告する間隔はさまざまです。その結果、Google Cloud サービスの使用と、Cloud Billing に表示される使用量との間に遅延が生じる場合があります。通常、費用は 1 日以内に利用可能になりますが、24 時間以上かかる場合もあります。

遅れて報告された使用量がその月の請求書に含まれず、翌月の請求書に繰り越される場合があります。

タイムスタンプ フィールドを使用して費用を照会すると、返されたデータに、報告が遅れたために同じ月に生成された請求書に含まれていない使用量が含まれていることがあります。このため、返された Cloud Billing データとその請求書が直接マッピングできないことがあります。

タイムスタンプ フィールドには次のものが含まれます。

  • usage_start_time
  • usage_end_time
  • export_time

請求書に直接マッピングされた Cloud Billing データを返すには、タイムスタンプ フィールドではなく invoice.month を使用します。

2020 年 9 月 1 日以降、使用料金の詳細データには、単一の項目ではなく、プロジェクトごとの納税義務額が表示されます。税金データに依存するクエリや可視化がある場合は、これらの変更に対応するためにクエリの更新が必要になることがあります。

たとえば、9 月 1 日より前に記録された費用については、次の例のように、使用料金データで税金の詳細データの納税義務総額が $10 と表示されます。

billing_account_id project.id cost_type cost
123456-ABCDEF-123456 example-project 標準 $60
123456-ABCDEF-123456 test-project 標準 $40
123456-ABCDEF-123456 [空白] $10

9 月 1 日以降に記録された費用については、$10 が example-project の $6 と test-project の $4 に分割されます。

billing_account_id project.id cost_type cost
123456-ABCDEF-123456 example-project 標準 $60
123456-ABCDEF-123456 test-project 標準 $40
123456-ABCDEF-123456 example-project $6
123456-ABCDEF-123456 test-project $4

エラーと調整

まれに、Cloud Billing データにエラーが含まれている場合や調整が必要な場合は、修正データが追加されます。これらの調整は、請求の変更または修正という 2 つのカテゴリのいずれかに分類されます。

お支払い情報の変更

請求の変更は、個別の項目として表示されます。請求の変更を受け取った場合は、BigQuery への Cloud Billing のエクスポートに新しい項目が表示され、変更内容を確認できます。表示される調整は、Google Cloud コンソールの [お支払い] セクションの [ドキュメント] 領域で入手可能な請求書、クレジットメモ、デビットメモのドキュメントに対応しています。

課金の変更とその適用方法について詳しくは、メモと調整についてをご覧ください。

修正

修正は、ソース SKU の誤ったデータを打ち消す新しいデータとして表示されます。場合によっては、誤った請求を置き換える新しいデータが表示されることがあります。課金データのエクスポートの列は、次の列を除き、元のデータと一致します。

  • cost
  • credit
  • usage.amount
  • export_time

たとえば、1 月 1 日に SKU A の使用に対して 10 ドルが請求されたとします。1 月分の請求書(2 月上旬に発行)には、SKU A に対する 10 米ドルの請求が表示されます。ただし、2 月 2 日に Google Cloud は SKU A に対する修正を発表し、使用料金を 5 ドルに引き下げました。2 月の請求書(3 月上旬に発行)に、次の 2 つの項目が追加されます。

  • -1 月 1 日の使用料金(元の請求額を相殺): -10 ドル
  • 1 月 1 日の使用料金 $5(請求予定額を明記)

これらの新しいアイテムには、課金データのエクスポートに adjustment_info 列があります。過剰請求が記載された 1 月の元の請求書は調整されません。請求データのエクスポートで請求額を確認するには、usage_start_time で費用を表示し、Day でグループ化します。これらのビューでは、収益化が遅れた使用量に対する修正や請求はすべて累積されます。一時的に誤ったデータが表示されていても、心配する必要はありません。

修正に関する詳細情報を確認するには、請求月のすべての請求を表示し、使用日が請求月より前の請求を探します。これらの請求は、修正が行われた場合や、収益化が遅れた使用量がある場合に発生します。

次のコードサンプルは、修正または遅延収益化の使用量の合計費用を返す基本的なクエリを作成する方法を示しています。

SELECT
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
      FROM   UNNEST(credits) c), 0))
    AS total
FROM `project.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE
  invoice.month = '202311' AND
  DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) < '2023-11-01';

請求書の請求で、使用日請求月よりである場合のサービス別の費用の内訳を返すクエリの例については、「Cloud Billing データのエクスポートのクエリ例」の費用の詳細をクエリして、指定した請求月のサービスの修正または遅延収益化の使用状況を表示するをご覧ください。

カスタム料金契約のプロモーション クレジットについて

カスタム料金契約を結んでいる場合は、契約の一環として Google Cloud で使用するプロモーション クレジットが提供されます。たとえば、Compute Engine リソースで使用するための 1,000 ドルを受け取ることができます。通常、プロモーション クレジットは支払い方法とみなされます。プロモーション クレジットが利用可能な場合は、合計請求額の削減に自動的に適用されます。

契約条件により、プロモーション クレジットが SKU の正規価格で計算された費用に適用されるか、正味価格(割引適用後)に適用されるかが指定されます。

プロモーション クレジットが正規価格での計算対象になっている場合、料金明細レポートには、Contract billing adjustment という SKU の Invoice というサービスが含まれます。この SKU は、正規価格の費用に適用されるようにクレジットを調整します。調整の対象となる使用状況を確認するには、system.labels 列をクエリします。system.labels.key のキーは cloud-invoice.googleapis.com/sku_id で、system.labels.value の値にはクレジットと調整が適用された SKU ID が含まれています。

タグについて

タグは、Key-Value ペアの形式のリソースで、リソースに直接または継承によって関連付けることができます。タグは、チャージバック、監査、その他の費用の割り当て分析に使用できます。また、タグとポリシーの条件付き適用により、リソース階層全体にわたり、きめ細かい管理が可能です。

タグには堅牢な権限モデルがあり、継承、一元管理、命名規則の標準化、ポリシー エンジンの統合をサポートできます。一方、 ラベルはリソースにアノテーションを付けることができる別のツールです。

タグのデータは、リソース、プロジェクト、フォルダ、組織の BigQuery Export に表示されます。

利用可能なタグ

リソース、プロジェクト、フォルダ、組織の標準費用と詳細費用のエクスポートには、タグデータのタグキー、タグ値、タグ継承、タグ名前空間の各フィールドが含まれます。

Cloud Billing データ エクスポートのリソースレベルのタグは、次のリソースに使用できます。

  • AlloyDB for PostgreSQL のクラスタ、インスタンス、バックアップ
  • Artifact Registry リポジトリ
  • Cloud Run のサービスとジョブ
  • Cloud Storage バケット
  • Compute Engine インスタンス
  • Memorystore for Redis インスタンス
  • Secret Manager シークレット
  • Spanner インスタンス

タグの制限事項

  • BigQuery のエクスポートにタグが反映されるまでに 1 時間ほどかかることがあります。1 時間以内にタグが追加または削除された場合、あるいはリソースの存在時間が 1 時間未満の場合は、エクスポートに表示されないことがあります。

標準の使用料金に対するクエリの例

このセクションでは、BigQuery にエクスポートされた Cloud Billing の標準的な使用料金データをクエリする方法の例を示します。

クエリで使用するテーブル名の指定

この例では、BigQuery で Cloud Billing データのクエリを行うために、FROM 句でテーブル名を指定する必要があります。テーブル名は、project.dataset.BQ_table_name の 3 つの値を使用して決定されます。

  • project は、BigQuery データセットが含まれている設定済みの Google Cloud プロジェクトの ID です。
  • dataset は、エクスポートした Cloud Billing データを含む BigQuery テーブルが格納されている設定済みの BigQuery データセットの名前です。
  • BQ_table_name は、クエリ対象のエクスポートされた Cloud Billing データが含まれている BigQuery テーブルの名前です。Cloud Billing データを含む 3 つの BigQuery テーブルがあります。
    • 標準の使用料金テーブル: BigQuery データセットでは、このテーブルには gcp_billing_export_v1_<BILLING_ACCOUNT_ID> という名前が付けられています。
    • 詳細な使用料金表: BigQuery データセットでは、このテーブルには gcp_billing_export_resource_v1_<BILLING_ACCOUNT_ID> という名前が付けられています。
    • 料金テーブル: BigQuery データセットでは、このテーブルには cloud_pricing_export という名前が付けられています。

標準の料金のクエリ例で使用される一般的な値

このセクションのクエリの例では、[テーブル名] に値 project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX を使用する

これらのクエリの例は、BigQuery にエクスポートされた詳細な使用料金データでも機能しますが、詳細な使用料金のエクスポート オプションで提供されるリソースレベルの情報を取得するようには作成されていません。

請求書の料金総額を取得する

次のクエリで、エクスポートされた課金データを使用して料金とクレジット額を表示する 2 つの方法を説明します。

  • total フィールドは、浮動小数点数の料金とクレジット額をそのまま合計します。そのため、浮動小数点の丸め誤差が生じる可能性があります。
  • total_exact フィールドは、料金とクレジット額をマイクロに変換してから合計します。その合計金額をドルに戻すことで、浮動小数点の丸め誤差を回避します。

例 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
;

たとえば、前のクエリの結果は次のようになります。

Row 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
;

たとえば、前のクエリの結果は次のようになります。

Row 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 つの環境(開発と本番)がある。
  • アプリごとの開発環境に 1 つの小さいインスタンスがある。
  • 本番環境には、アメリカに 1 つの小さいインスタンス、アジアに 1 つの小さいインスタンスがあります。
  • 各インスタンスには、アプリと環境のラベルが付けられている。
  • 実験に使用するラベルのないインスタンスが 1 つある。

請求額合計は $24 で、内訳は次のとおりです。

インスタンス ラベル 合計費用
南北アメリカで動作する 1 VCPU 搭載小規模インスタンス なし $4
南北アメリカで動作する 1 VCPU 搭載小規模インスタンス app: chocolate-masher
environment: dev
$2
南北アメリカで動作する 1 VCPU 搭載小規模インスタンス app: grapefruit-squeezer
environment: dev
$3
南北アメリカで動作する 1 VCPU 搭載小規模インスタンス app: chocolate-masher
environment: prod
$3.25
1 つの VCPU がアジアで稼働している小規模インスタンス app: chocolate-masher
environment: prod
$3.75
南北アメリカで動作する 1 VCPU 搭載小規模インスタンス app: grapefruit-squeezer
environment: prod
$3.50
1 つの VCPU がアジアで稼働している小規模インスタンス app: grapefruit-squeezer
environment: 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`;

レガシー SQL

TO_JSON_STRING not supported.
Row sku.description labels cost
1 南北アメリカで動作する 1 VCPU 搭載小規模インスタンス [] $4
2 南北アメリカで動作する 1 VCPU 搭載小規模インスタンス [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}] $2
3 南北アメリカで動作する 1 VCPU 搭載小規模インスタンス [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}] $3
4 南北アメリカで動作する 1 VCPU 搭載小規模インスタンス [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] $3.25
5 1 つの VCPU がアジアで稼働している小規模インスタンス [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] $3.75
6 南北アメリカで動作する 1 VCPU 搭載小規模インスタンス [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] $3.50
7 1 つの VCPU がアジアで稼働している小規模インスタンス [{"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;

レガシー 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 を使用し、JOIN 条件(WHERE ではない)としてキーフィルタを設定すると、費用にこのキーが含まれなくなるため、費用の全体像を把握できます。

標準 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;

レガシー 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;
Row environment cost
1 prod $15
2 dev $5
3 null $4
合計 $24

Key-Value ペア別にグループ化

これらの結果を解釈またはエクスポートするときは注意してください。ここでは各行が、二重カウントなしの有効な合計を示していますが、他の行と組み合わせることはできません(ただし、キーが同じ場合や、同じリソースに複数のキーが設定されていない場合は除きます)。

標準 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;

レガシー 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;
Row key value cost
1 null null $4
2 app chocolate-masher $9
3 app grapefruit-squeezer $11
4 environment dev $5
5 environment prod $15
合計 $44

合計が請求額より大きいことに注意してください。

確約利用割引のクエリ

次のクエリは、エクスポートされた課金データの確約利用割引に関連する料金とクレジット額を表示する方法を示しています。コミットメント料金とクレジットが Cloud 請求先アカウントとプロジェクトにどのように適用されるかについては、確約利用割引のアトリビューションをご覧ください。

確約料金の表示

課金データのエクスポートで確約利用割引の確約料金を表示するには、次のサンプルクエリを使用します。

標準 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

リソース階層フィルタを使用して祖先を確認する

リソース階層フィルタを使用して、プロジェクト、フォルダ、組織などの階層要素ごとに費用を集計できます。これらのクエリ例は、リソース階層要素でフィルタリングされた費用を合計し、プロジェクトの祖先を表示するメソッドを示しています。

例 1: リソース名でフィルタする

この例では、費用をプロジェクトの祖先でグループ化し、指定された階層要素の下に生成されて相対的なリソース名で識別された費用のみをフィルタするクエリを示します。

String メソッド

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.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.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: 表示名でフィルタする

この例では、費用をプロジェクト祖先でグループ化し、指定された階層要素の下で生成されてユーザー指定の表示名で識別された費用のみをフィルタするクエリを示します。

String 照合メソッド

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.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.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 personalization 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.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
WHERE invoice.month = "202006"
GROUP BY 1, 2
ORDER BY 1;

レガシー SQL

TO_JSON_STRING not supported.
Row 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

Google Cloud コンソールで利用可能な費用と料金のレポート