Cloud Billing 数据导出查询示例

本页面提供了一些示例,演示如何查询导出并存储在 BigQuery 中的 Cloud Billing 数据。

如需详细了解如何将结算数据导出到 BigQuery,请参阅概览限制

指定要在查询中使用的表名称

在这些示例中,要在 BigQuery 中查询 Cloud Billing 数据,您需要在 FROM 子句中指定表名称。表名称使用 project.dataset.BQ_table_name 这三个值确定。

  • project 是您设置的包含 BigQuery 数据集的 Google Cloud 项目 ID。
  • dataset 是您设置的包含所导出 Cloud Billing 数据的 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 Billing 数据类型进行的查询示例

本页面提供标准使用费数据详细使用费数据价格数据的查询示例。

如果您选择导出详细使用费数据,那么除了“详细使用费”查询示例之外,您也可以使用“标准使用费”查询示例。

标准使用费数据 详细使用费数据 价格数据
标准使用费查询示例 详细使用费查询示例 价格数据查询示例

标准使用费查询示例

本部分提供了查询导出到 BigQuery 的 Cloud Billing 标准使用费数据的示例。

这些查询示例也适用于导出到 BigQuery 的详细使用费数据,但它们并非用于检索详细使用费导出选项提供的任何资源级信息。

标准费用查询示例中使用的常用值

本部分中的查询示例使用以下值作为表名称project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX

返回账单总费用

以下查询演示了使用导出的结算数据查看费用和赠金值的两种方法。

  • total 字段直接对浮点费用和赠金值求和,可能会产生浮点舍入误差。
  • total_exact 字段在求和之前将费用和赠金值转换为 micros,然后在求和后转换回美元,以避免产生浮点舍入误差。

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

例如,上述查询的结果可能是:

总计 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
;

例如,上述查询的结果可能是:

费用类型 总计 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 个在美洲运行的小型实例(有 1 个 vCPU) $4
1 个在美洲运行的小型实例(有 1 个 vCPU) 应用:chocolate-masher
环境:dev
$2
1 个在美洲运行的小型实例(有 1 个 vCPU) 应用:grapefruit-squeezer
环境:dev
$3
1 个在美洲运行的小型实例(有 1 个 vCPU) 应用:chocolate-masher
环境:prod
$3.25
1 个在亚洲运行的小型实例(有 1 个 vCPU) 应用:chocolate-masher
环境:prod
$3.75
1 个在美洲运行的小型实例(有 1 个 vCPU) 应用:grapefruit-squeezer
环境:prod
$3.50
1 个在亚洲运行的小型实例(有 1 个 vCPU) 应用:grapefruit-squeezer
环境: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.
sku.description 标签 费用
1 1 个在美洲运行的小型实例(有 1 个 vCPU) [] $4
2 1 个在美洲运行的小型实例(有 1 个 vCPU) [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}] $2
3 1 个在美洲运行的小型实例(有 1 个 vCPU) [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}] $3
4 1 个在美洲运行的小型实例(有 1 个 vCPU) [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] $3.25
5 1 个在亚洲运行的小型实例(有 1 个 vCPU) [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] $3.75
6 1 个在美洲运行的小型实例(有 1 个 vCPU) [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] $3.50
7 1 个在亚洲运行的小型实例(有 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.
标签 费用
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;
环境 费用
1 prod $15
2 dev $5
3 null $4
总计 $24

按键值对分组

解读或导出这些结果时要小心。结果中单独的一行显示了系统未进行重复统计时的有效总费用,但不应与其他行合并在一起(除非对应的键相同,或者您确定绝对没有对同一资源设置相应键)。

标准 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;
费用
1 null 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.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:按资源名称过滤

此示例演示的查询按项目祖先实体对费用进行分组,并仅过滤由指定层次结构元素(由相对资源名称标识)生成的费用。

字符串方法

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:按显示名称过滤

此示例演示的查询按项目祖先实体对费用进行分组,并仅过滤由指定层次结构元素(由用户提供的显示名标识)下生成的费用。

字符串匹配方法

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;

例如,上述查询的结果可能是:

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;

例如,上述查询的结果可能是:

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.
名称 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

返回账单中的资源级费用

以下查询演示了使用导出的结算数据查看账单上的资源级费用和赠金值的两种方法。

  • total 字段直接对浮点费用和赠金值求和,可能会产生浮点舍入误差。
  • total_exact 字段在求和之前将费用和赠金值转换为 micros,然后在求和后转换回美元,以避免产生浮点舍入误差。

计算每项资源每个账单的总费用

此查询显示了每个 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
;

例如,上述查询的结果可能是:

名称 总计 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
;

例如,上述查询的结果可能是:

费用类型 名称 总计 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
;

GKE 费用(按 SKU)

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 ID2DA5-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 自动生成的字段,表示数据所属的日期。您可以使用 Cloud Billing 导出作业明确生成的字段(例如 pricing_as_of_time),而不是使用 _PARTITIONTIME

以下是配置为使用 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"
;

查询结果

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 请求 COUNT ACCOUNT MONTHLY 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 my-billing-admin-project.my_billing_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 MONTHLY 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 `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"
;

查询结果:

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 或“按需虚拟机数”
  • 地理数目是应用于 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"
;

查询结果:

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。在此查询中,我们将无服务器指定为 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.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 出站流量 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-east4product_taxonomy = 按需虚拟机数

标准 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)
;

查询结果:

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
            按需虚拟机数
            内存:每 GB
2 C3B9-E891-85ED 在弗吉尼亚州运行的单租户实例 RAM 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            计算
            GCE
            按需虚拟机数
            内存:每 GB
3 6E2A-DCD9-87ED 在弗吉尼亚运行的 N1 预定义实例 RAM 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            计算
            GCE
            按需虚拟机数
            内存:每 GB

将价格数据与详细的使用费用数据联接

此查询展示如何将价格和费用数据导出联接,以根据您的费用查看详细的价格信息。您可以配置此查询,以从详细的使用费用数据中拉取导出的数据(作为 Exports),并将使用费用数据与导出的价格数据(作为 Prices)联接。

使用详细的使用费用表名称拉取Exports数据: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 费用 使用量 pricing_unit_description account_currency_amount account_currency_code
平衡永久性磁盘容量 0.001345 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } GiB/月 0.1 美元
平衡永久性磁盘容量 0.001344 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } GiB/月 0.1 美元
平衡永久性磁盘容量 0.001346 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } GiB/月 0.1 美元

Google Cloud 控制台中提供的费用和价格报告