Cloud Billing 資料匯出的查詢範例

本文提供一些範例,說明如何查詢已匯出至 BigQuery 並儲存其中的 Cloud Billing 資料。

如要進一步瞭解如何將帳單資料匯出至 BigQuery,請參閱總覽限制

從帳單報表生成 SQL 查詢

如要快速編寫 SQL 查詢,在 BigQuery 中傳回與帳單報表結果相同的結果,可以使用 Google Cloud 控制台的「帳單報表」中的「產生查詢」功能。

指定要用於查詢的資料表名稱

在這些範例中,如要在 BigQuery 中查詢匯出的 Cloud Billing 資料,您需要在 FROM 子句中指定資料表名稱的完整路徑。資料表名稱由以半形句號分隔的三個值決定:

project-ID.dataset_name.BQ_table_name

舉例來說,假設您有一個設定為匯出 詳細用量費用資料的 Cloud Billing 帳戶,且帳單匯出設定的元件如下:

  • project-IDmy-billing-project
  • dataset_namemy_billing_dataset
  • BQ_table_namegcp_billing_export_resource_v1_<BILLING-ACCOUNT-ID>
  • BILLING-ACCOUNT-ID010101-F0FFF0-10X10X - 這是 Cloud Billing 帳戶的 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

傳回月結單上的總費用

下列查詢示範透過匯出帳單資料查看費用和抵免額值的兩種方法。

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

舉例來說,前述查詢的結果可能如下:

總計 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
;

舉例來說,前述查詢的結果可能如下:

cost_type 總計 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 美元

含有標籤的查詢範例

下列範例說明如何使用標籤查詢資料。

本節範例以下列假設為前提:

  • 您有兩個應用程式 (grapefruit-squeezer 和 chocolate-masher)。
  • 每個應用程式都有兩個環境 (開發和正式)。
  • dev 環境提供每個應用程式 1 個小型執行個體。
  • prod 環境在美洲和亞洲各提供 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.
資料列 sku.description 標籤 費用
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.
資料列 標籤 費用
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;
資料列 環境 費用
1 prod $15 美元
2 dev $5 美元
3 空值 $4 美元
總計 $24

依鍵/值組合分組

解讀或匯出這類結果時請謹慎小心。這裡的個別資料列會顯示有效總和,不會重複計算,但不應與其他資料列合併 (除非索引鍵相同,或您確定索引鍵絕不會在相同資源上設定)。

標準 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;
資料列 費用
1 null 空值 $4 美元
2 app chocolate-masher $9 美元
3 app grapefruit-squeezer $11 美元
4 environment dev $5 美元
5 environment prod $15 美元
總計 $44 美元

請注意,總和會大於您的帳單金額。

承諾使用折扣查詢

下列查詢示範如何查看與承諾使用折扣相關的費用和抵免額,這些資料會匯出至帳單資料。如要瞭解承諾費用和抵免額如何歸屬至 Cloud Billing 帳戶和專案,請參閱承諾使用折扣的歸屬

查看承諾使用費用

如要在帳單資料匯出內容中查看承諾使用折扣的承諾費用,請使用下列範例查詢。

標準 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:依資源名稱篩選

這個範例會示範查詢,這些查詢會依專案祖先項目將費用分組,並篩選出在指定階層元素下產生的費用,這些元素會以相對資源名稱識別。

字串方法

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:依顯示名稱篩選

這個範例會示範如何查詢費用,並依專案祖先項目分組,以及如何篩選出使用者提供顯示名稱的指定階層元素所產生的費用。

字串比對方法

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 個人化 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;
名稱 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';

舉例來說,前述查詢的結果可能如下:

總計
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;

舉例來說,前述查詢的結果可能如下:

服務說明 定價費用 議定的折扣優惠 折扣 促銷和其他抵免額 小計
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

傳回月結單上的資源層級費用

下列查詢示範透過匯出帳單資料,查看發票中資源層級費用和抵免額值的兩種方法。

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

舉例來說,前述查詢的結果可能如下:

個月 名稱 總計 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

按月結單月份依據費用類型傳回各項資源的詳細資料

此查詢會顯示每個月的每個 cost_type resource.name 總計。費用類型包括定期費用、稅金、調整項和捨入錯誤。與資源層級項目無關的費用,都會在當月匯總到「名稱」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
;

舉例來說,前述查詢的結果可能如下:

cost_type 名稱 總計 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 ID2DA5-55D3-E679 (Cloud Run - Requests)

取得特定 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 自動產生的欄位,代表資料所屬的日期。您可以改用 Cloud Billing 匯出功能明確產生的欄位,例如 pricing_as_of_time_PARTITIONTIME

以下是設為使用 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"
;

查詢結果

id 說明 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 要求 COUNT ACCOUNT 每月 1000000 0 0 0
          1000000 2000000 0.4 0.4

取得特定 SKU 的定價,並加入服務說明

本節的兩個範例會示範查詢,傳回指定 SKU 的每個價格層級list_price,並包含 SKU 說明和服務說明。

  • 範例 1 會為每個資料列傳回一個 SKU,並以巢狀資料的形式顯示價格級別。
  • 範例 2 說明如何取消巢狀結構資料,為每個定價層級的每個 SKU 傳回一列。

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

查詢結果:

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 要求 152E-C115-5142 Cloud Run ACCOUNT 每月 1000000 0 0 0
            1000000 2000000 0.4 0.4

範例 2:傳回與相同資料表聯結的未巢狀資料

這個範例會查詢單一 SKU,並傳回 list price。SKU 有多個價格級別。這項查詢示範如何使用 UNNEST 運算子tiered_rates 陣列扁平化,並將欄位與相同資料表聯結,產生每個價格層級各一列的結果。

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

查詢結果:

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

使用產品分類和地理分類查詢 SKU

  • 產品分類是適用於 SKU 的產品類別清單,例如「無伺服器」、「Cloud Run」或「VM On Demand」
  • 地理分類是適用於 SKU 的地理中繼資料,包含類型和區域值。

取得 SKU 的產品分類

這個範例示範如何查詢特定 SKU 的 product_taxonomy 清單,其中 SKU ID = 2DA5-55D3-E679 (Cloud Run - Requests)。

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

查詢結果:

sku_id sku_description service_id service_description product_taxonomy
1 2DA5-55D3-E679 要求 152E-C115-5142 Cloud Run GCP
        無伺服器
        Cloud Run
        其他

取得特定產品分類的所有 SKU

這個範例示範如何查詢符合指定 product_taxonomy 的所有 SKU。在這項查詢中,請將 Serverless 設為 product taxonomy 值。

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

查詢結果:

sku_id sku_description service_id service_description product_taxonomy
1 0160-BD7B-4C40 Cloud Tasks 網路區域內輸出 F3A6-D7B7-9BDA Cloud Tasks GCP
        無伺服器
        Cloud Tasks
        其他
2 FE08-0A74-7AFD Cloud Tasks GOOGLE-API Egress F3A6-D7B7-9BDA Cloud Tasks GCP
        無伺服器
        Cloud Tasks
        其他
3 A81A-32A2-B46D 工作佇列儲存空間 (鹽湖城) F17B-412E-CB64 App Engine GCP
        無伺服器
        GAE
        其他
        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)
;

查詢結果:

sku_id sku_description service_id service_description geo_taxonomy.type geo_taxonomy.regions product_taxonomy
1 9174-81EE-425B 在維吉尼亞州執行的單一用戶群執行個體 RAM 單一用戶群附加費 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            運算
            GCE
            隨選 VM
            記憶體:每 GB
2 C3B9-E891-85ED 在維吉尼亞州執行的專屬租戶執行個體 RAM 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            運算
            GCE
            隨選 VM
            記憶體:每 GB
3 6E2A-DCD9-87ED 在維吉尼亞州執行的 N1 預先定義執行個體 RAM 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            運算
            GCE
            隨選 VM
            記憶體:每 GB

將價格資料與詳細用量費用資料合併

這項查詢會顯示如何加入價格和費用資料匯出項目,以便查看與費用一致的詳細價格資訊。您可以設定這項查詢,從詳細用量費用資料 (如 Exports) 中提取匯出的資料,並將用量費用資料與匯出的價格資料 (如 Prices) 彙整。

使用詳細用量費用表名稱擷取 Exports 資料: 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 費用 用量 pricing_unit_description account_currency_amount account_currency_code
Balanced PD 容量 0.001345 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } 每月每 GiB 0.1 美元
Balanced PD 容量 0.001344 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } 每月每 GiB 0.1 美元
Balanced PD 容量 0.001346 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } 每月每 GiB 0.1 美元