このページでは、BigQuery にエクスポートして保存された Cloud Billing データをクエリする方法の例を紹介します。
課金データの BigQuery へのエクスポートの詳細については、概要と制限事項をご覧ください。
クエリで使用するテーブル名の指定
この例では、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
という名前が付けられています。
- 標準の使用料金テーブル: BigQuery データセットでは、このテーブルに
Cloud Billing のデータ型によるクエリの例
このページでは、標準の使用料金データ、詳細な使用料金データ、料金データに対するクエリの例を説明します。
詳細な使用料金データのエクスポートを選択した場合、詳細な使用料金のクエリの例に加えて、標準の使用料金のクエリ例を使用できます。
標準の使用料金データ | 詳細な使用料金データ | 料金データ |
---|---|---|
標準の使用料金に対するクエリの例 | 詳細な使用料金のクエリ例 | 料金データクエリの例 |
標準の使用料金に対するクエリの例
このセクションでは、BigQuery にエクスポートされた Cloud Billing の標準の使用料金データをクエリする方法の例を示します。
これらのクエリの例は、BigQuery にエクスポートされた詳細な使用料金データでも機能しますが、詳細な使用料金のエクスポート オプションで提供されるリソースレベルの情報を取得するようには作成されていません。
標準の料金のクエリ例で使用される一般的な値
このセクションのクエリの例では、[テーブル名] に値 project.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.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.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 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.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 `ivory-vim-309221.billing_export_dataset.gcp_billing_export_resource_v1_018ADD_3CEBBB_A4DF22`, 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;
たとえば、前のクエリの結果は次のようになります。
Row | 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.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;
たとえば、前のクエリの結果は次のようになります。
Row | 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 |
詳細な使用料金のクエリ例
このセクションでは、BigQuery にエクスポートされた Cloud Billing 詳細な使用料金データをクエリする方法の例を示します。
詳細な使用料金のスキーマには、標準の使用料金のスキーマのすべてのフィールドが含まれるため、BigQuery にエクスポートされた標準データに対して提供されるクエリの例は、エクスポートされた詳細なデータでも機能します。なお、標準的なクエリの例は、詳細な使用料金のエクスポート オプションで提供されるリソースレベルの情報を取得するためのものではありません。詳細なデータ用のクエリを作成する場合、標準的なクエリの例をテンプレートとして使用し、テーブル名を更新して、詳細な使用料金のスキーマで使用可能な任意のフィールドを追加できます。
エクスポートされる詳細データの要件または制限については、詳細な使用料金データのスキーマをご覧ください。
詳細な使用料金のクエリ例で使用される一般的な値
このセクションのクエリの例では、[テーブル名] に値 project.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.dataset.gcp_billing_export_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.dataset.gcp_billing_export_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.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.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.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.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.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.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 my-billing-admin-project.my_billing_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 `my-billing-admin-project.my_billing_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.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.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.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.dataset.cloud_pricing_export
WITH Exports AS ( SELECT * FROM `project.dataset.gcp_billing_export_resource_v1_XXXXXX_XXXXXX_XXXXXX` ), Prices AS ( SELECT * FROM `project.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 のクラウド サービスの料金を表示し、ダウンロードする
- 費用の内訳レポートでコスト削減を把握する
- 確約利用割引の効果の分析
- 費用とお支払い履歴の表示