將帳單資料匯出至 BigQuery 查詢的範例

以下舉幾個範例,讓您瞭解可透過哪些方式使用 BigQuery 查詢處理匯出的帳單資料。

傳回月結單上的總費用

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

  • total 欄位直接加總浮點費用和抵免額值,可能會造成浮點捨入錯誤。
  • total_exact 欄位會在加總前將費用和抵免額值轉換為微數值,然後在加總後轉換回美元,以免發生浮點捨入錯誤。

範例 1:按月結單月份顯示所有費用的加總

此查詢會顯示每個月的月結單總計,做為定期費用、稅金、調整項和捨入錯誤的加總。

標準 SQL

SELECT
  invoice.month,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost * 1000000 AS int64))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
                  FROM UNNEST(credits) c), 0))) / 1000000
    AS total_exact
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
GROUP BY 1
ORDER BY 1 ASC
;

舉例來說,以上查詢的結果看起來可能像這樣:

資料列 總計 total_exact
1 201901 $1005.004832999999984 美元 $1005.00 美元
2 201902 $992.3101739999999717 美元 $992.31 美元
3 201903 $1220.761089999999642 美元 $1220.76 美元

範例 2:按月結單月份依據費用類型傳回詳細資料

此查詢會顯示每個月的每個 cost_type 總計。費用類型包括定期費用、稅金、調整項和捨入錯誤。

標準 SQL

SELECT
  invoice.month,
  cost_type,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM   UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost * 1000000 AS int64))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
                  FROM UNNEST(credits) c), 0))) / 1000000
    AS total_exact
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
GROUP BY 1, 2
ORDER BY 1 ASC, 2 ASC
;

舉例來說,以上查詢的結果看起來可能像這樣:

資料列 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 美元

其他查詢範例

下列範例說明查詢資料的其他方法。

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

  • 您有 2 個應用程式 (grapefruit-squeezer 和 chocolate-masher)。
  • 每個應用程式都可在 2 種環境 (dev 和 prod) 中執行。
  • dev 環境提供每個應用程式 1 個小型執行個體。
  • prod 環境在美洲和亞洲各提供 1 個小型執行個體。
  • 每個執行個體都已依應用程式和環境加上標籤。
  • 您有 1 個實驗用的執行個體未加上標籤。

帳單金額總計為 $24 美元,費用明細如下:

執行個體 標籤 總費用
在美洲地區執行且包含 1 個 vCPU 的小型執行個體 $4 美元
在美洲地區執行且包含 1 個 vCPU 的小型執行個體 應用程式:chocolate-masher
環境:dev
$2 美元
在美洲地區執行且包含 1 個 vCPU 的小型執行個體 應用程式:grapefruit-squeezer
環境:dev
$3 美元
在美洲地區執行且包含 1 個 vCPU 的小型執行個體 應用程式:chocolate-masher
環境:prod
$3.25 美元
在亞洲地區執行且包含 1 個 vCPU 的小型執行個體 應用程式:chocolate-masher
環境:prod
$3.75 美元
在美洲地區執行且包含 1 個 vCPU 的小型執行個體 應用程式:grapefruit-squeezer
環境:prod
$3.50 美元
在亞洲地區執行且包含 1 個 vCPU 的小型執行個體 應用程式:grapefruit-squeezer
環境:prod
$4.50 美元

在不分組的情況下查詢每一列

如要查看最詳盡的費用明細,請在不分組的情況下查詢每一列。假設除了標籤和 SKU 說明以外的所有欄位 (專案、服務等等) 都相同。

標準 SQL

SELECT
  sku.description,
  TO_JSON_STRING(labels) as labels,
 cost as cost
FROM `project.dataset.table`;

舊版 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.dataset.table`
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.dataset.table`
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.table]
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.dataset.table`
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.table]
GROUP BY key, value;
資料列 費用
1 空值 空值 $4 美元
2 app chocolate-masher $9 美元
3 app grapefruit-squeezer $11 美元
4 environment dev $5 美元
5 environment prod $15 美元
總計 $44 美元

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

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Billing 說明文件
需要協助嗎?請前往我們的支援網頁