このドキュメントでは、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 |
関連トピック
エクスポートされた Cloud Billing データに関連するトピック
- BigQuery への Cloud Billing データのエクスポートを設定する
- BigQuery の Cloud Billing データテーブルについて
- Looker Studio で一定期間の利用額を可視化する
Google Cloud コンソールで利用可能な費用と料金のレポート
- Cloud Billing レポートと費用傾向の表示
- 請求書または明細書の費用詳細の表示とダウンロード
- Google のクラウド サービスの料金を表示し、ダウンロードする
- 費用の内訳レポートでコスト削減を把握する
- 確約利用割引の効果の分析
- 費用とお支払い履歴の表示