Cloud Billing データのエクスポート クエリの例

このドキュメントでは、BigQuery にエクスポートして保存された Cloud Billing データをクエリする方法の例を紹介します。

課金データの BigQuery へのエクスポートの詳細については、概要制限事項をご覧ください。

請求レポートから SQL クエリを生成する

請求レポートの結果と同等の結果を BigQuery で返す SQL クエリをすばやく作成するには、Google Cloud コンソールで利用可能な請求レポートの [クエリを生成] 機能を使用してください。

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

この例では、BigQuery でエクスポートされた Cloud Billing データのクエリを行うために、FROM 句でテーブル名の完全パスを指定する必要があります。テーブル名は、ドットで区切られた 3 つの値を使用して決定されます。

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 請求先アカウントがあり、請求エクスポート構成のコンポーネントが次のようになっているとします。

  • 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 請求先アカウントの 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 を使用する

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

次のクエリで、エクスポートされた課金データを使用して料金とクレジット額を表示する 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 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 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 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 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-ID.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-ID.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-ID.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-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

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

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

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

レガシー 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 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-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: リソース名でフィルタする

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

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

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

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

費用をクエリして、指定した請求月の修正または収益化が遅れた使用量を確認する

特定の請求月を指定し、使用日が請求月よりの日付でフィルタリングすると、この簡素化されたクエリは、修正または遅延した収益化の使用量(前の請求書に記載されているはずの料金)の費用の合計を返します。

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

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

Row total
1 3.531752

費用の詳細をクエリして、指定した請求月のサービスの修正または収益化が遅れた使用量を確認する

この例は、請求月のに発生した請求額について、サービス別の費用の内訳を返すクエリを示しています。このクエリは、修正または遅延した収益化の使用(前の請求書に記載されているはずの請求)について、サービス別の費用とクレジットの合計を返します。

このクエリの例では、WHERE 句を使用して、請求月が 2024 年 3 月(YYYYMM 形式)のすべての請求をフィルタし、さらに結果を絞り込んで、請求月が 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;

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

Row サービスの説明 費用の一覧表示 交渉に応じたコスト削減額 割引 プロモーションなど 小計
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 を使用する

請求書のリソースレベルの費用を返す

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

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

請求書ごとの各リソースに対する合計費用

次のクエリでは、各月の 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 month name total 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 month cost_type name total total_exact
1 201901 regular null $1000.501209987994782 $1000.50
2 201901 rounding_error null –$0.500489920049387 –$0.50
3 201901 tax null $10.000329958477891 $10.00
4 201901 adjustment null –$5.002572999387045 –$5.00
5 201901 regular backend1 $410.998795012082947 $411.00
2 201901 rounding_error backend1 –$0.2404900489920378 –$0.24
3 201901 tax backend1 $4.105840329977189 $4.11

Google Kubernetes Engine(GKE)クラスタの費用の内訳を確認する

このセクションでは、BigQuery エクスポート レポートで 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"
;

クエリ結果

Row id description 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 Requests COUNT ACCOUNT MONTHLY 1000000 0 0 0
          1000000 2000000 0.4 0.4

特定の SKU の正規価格を取得し、サービスの説明を含める

このセクションの 2 つの例は、指定された SKU の料金階層ごとに list_price を返し、SKU の説明とサービスの説明を含めるクエリを示しています。

  • 例 1 では、1 行ごとに 1 つの SKU が返され、料金階層はネストされたデータとして表示されています。
  • 例 2 は、データのネストを解除して、料金階層ごとに SKU あたり 1 行を返す様子を示しています。

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

クエリ結果:

Row 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 Requests 152E-C115-5142 Cloud Run ACCOUNT MONTHLY 1000000 0 0 0
            1000000 2000000 0.4 0.4

例 2: 同じテーブルに結合されたネストされていないデータを返す

この例では、単一の SKU にクエリを実行して list price を返します。SKU には、複数の料金階層があります。このクエリでは、UNNEST 演算子を使用して tiered_rates 配列をフラット化し、フィールドを同じテーブルに結合して、料金階層のそれぞれを 1 行にします。

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

クエリ結果:

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

商品分類と地域分類を使用して SKU をクエリする

  • 商品分類は、サーバーレス、Cloud Run、オンデマンド VM などの 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"
;

クエリ結果:

Row sku_id sku_description service_id service_description product_taxonomy
1 2DA5-55D3-E679 Requests 152E-C115-5142 Cloud Run GCP
        Serverless
        Cloud Run
        Other

特定の商品分類に関するすべての SKU を取得する

次の例は、指定した product_taxonomy と一致するすべての SKU を返すクエリを示しています。このクエリでは、product taxonomy 値として Serverless を設定します。

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

クエリ結果:

Row sku_id sku_description service_id service_description product_taxonomy
1 0160-BD7B-4C40 Cloud Tasks Network Intra Region Egress F3A6-D7B7-9BDA Cloud Tasks GCP
        Serverless
        Cloud Tasks
        Other
2 FE08-0A74-7AFD Cloud Tasks GOOGLE-API Egress F3A6-D7B7-9BDA Cloud Tasks GCP
        Serverless
        Cloud Tasks
        Other
3 A81A-32A2-B46D Task Queue Storage Salt Lake City F17B-412E-CB64 App Engine GCP
        Serverless
        GAE
        Other
        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)
;

クエリ結果:

Row sku_id sku_description service_id service_description geo_taxonomy.type geo_taxonomy.regions product_taxonomy
1 9174-81EE-425B Sole Tenancy Premium for Sole Tenancy Instance Ram running in Virginia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Compute
            GCE
            VMs On Demand
            Memory: Per GB
2 C3B9-E891-85ED Sole Tenancy Instance Ram running in Virginia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Compute
            GCE
            VMs On Demand
            Memory: Per GB
3 6E2A-DCD9-87ED N1 Predefined Instance Ram running in Virginia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Compute
            GCE
            VMs On Demand
            Memory: Per GB

料金データと詳細な使用料金データを結合する

このクエリは、料金データと費用データのエクスポートを結合して、費用に合わせて詳細な料金情報を表示する方法を示しています。エクスポートされたデータを pull し、詳細な使用料金データExports)をエクスポートして、使用料金データとエクスポートした料金データPrices)を結合するように、このクエリを構成します。

詳細な使用料金のテーブル名を使用して Exports データを pull します。 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 cost usage pricing_unit_description account_currency_amount account_currency_code
Balanced PD Capacity 0.001345 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte month 0.1 USD
Balanced PD Capacity 0.001344 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte month 0.1 USD
Balanced PD Capacity 0.001346 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte month 0.1 USD