本页面介绍导出到 BigQuery 每个表中的 Cloud Billing 标准使用费数据架构的参考信息。
标准使用费数据的架构
在 BigQuery 数据集中,标准 Google Cloud 使用费数据会加载到名为 gcp_billing_export_v1_<BILLING_ACCOUNT_ID>
的数据表中。
以下信息介绍了导出到 BigQuery 的 Google Cloud 标准使用费数据的架构。它包含标准 Cloud Billing 账号使用费信息,例如账号 ID、账单日期、服务、SKU、项目、标签、位置、费用、用量、赠金、调整项和货币。
在 BigQuery 中使用标准使用费用数据时,请注意以下事项:
- 为标准使用费用数据选择或创建 BigQuery 数据集时,您可以选择任何支持与 Cloud Billing 数据搭配使用的数据集位置。
- 当您在 Cloud Billing 中首次启用标准使用费用数据导出时,如果您选择配置为使用多区域位置(欧盟或美国)的数据集,则 Cloud Billing 数据将从上月初开始以追溯方式提供。数据按时间顺序导出。对于导出数据的初始回填,追溯性 Cloud Billing 数据最多可能需要 5 天完成导出,然后您才能开始看到最新的使用情况数据。
- 如果您启用标准使用费用数据导出并选择配置为使用受支持的单区域位置的数据集,则 Cloud Billing 数据将从您启用导出之日起开始提供。
- 如果您启用,停用且随后重新启用标准使用费用数据导出,则系统可能不会提供明确停用数据导出时段内的 Cloud Billing 数据。
- 详细了解数据加载到 BigQuery 表的频率。
- 标准使用费用数据不包括任何资源级费用数据,例如产生服务用量的虚拟机或 SSD。如果您想要将资源级费用数据导出到 BigQuery 进行分析,请考虑启用详细使用费用数据导出。导出的详细使用费数据包括标准使用费数据中包含的所有字段和信息。
- 请查看可能会影响将结算数据导出到 BigQuery 的其他限制,例如启用了客户管理的加密密钥 (CMEK) 的数据集。
字段 | 类型 | 说明 |
---|---|---|
billing_account_id |
字符串 | 与使用量相关的 Cloud Billing 账号 ID。 对于转销商:对于 Cloud Billing 子账号产生的使用费,这是子账号的 ID,而不是 Cloud Billing 转销商父级账号的 ID。 |
invoice.month |
字符串 | 包含费用专列项的账单的年份和月份 (YYYYMM)。例如:“201901”相当于 2019 年 1 月。 您可以使用此字段获取账单上的总费用。请参阅将 Cloud Billing 数据导出至 BigQuery 查询的示例。 |
cost_type |
字符串 | 此专列项代表的费用类型:常规项、税费、调整项和舍入误差费用。 |
service.id |
字符串 | 与使用情况关联的服务的 ID。 |
service.description |
字符串 | 报告 Cloud Billing 数据的 Google Cloud 服务。 |
sku.id |
字符串 | 服务使用的资源的 ID。如需查看 SKU 的完整列表,请参阅 Google Cloud SKU。 |
sku.description |
字符串 | 服务使用的资源类型说明。例如,Cloud Storage 的资源类型是“Standard Storage US”。 |
usage_start_time |
时间戳 | 计算指定费用的每小时使用时间段的开始时间。所有服务的用量/费用按小时显示,也就是说,长时间运行的服务的用量横跨多个每小时时间段。 如需了解详情,请参阅有关时间戳数据类型的 BigQuery 文档。另请参阅下文的导出的数据和账单之间的区别。 |
usage_end_time |
时间戳 | 计算给定费用的每小时使用时间段的结束时间。所有服务的用量/费用按小时显示,也就是说,长时间运行的服务的用量横跨多个每小时时间段。 如需了解详情,请参阅有关时间戳数据类型的 BigQuery 文档。另请参阅下文的导出的数据和账单之间的区别。 |
project |
结构体 | project 包含描述 Cloud Billing 项目的字段,例如 ID、编号、名称、祖先实体编号和标签。
|
project.id |
字符串 | 生成 Cloud Billing 数据的 Google Cloud 项目的 ID。 |
project.number |
字符串 | 为生成 Cloud Billing 数据的 Google Cloud 项目内部生成的匿名化的唯一标识符。在您的支持请求和其他客户沟通中,Google 将通过此项目编号引用项目。 |
project.name |
字符串 | 生成 Cloud Billing 数据的 Google Cloud 项目的名称。 |
project.ancestry_numbers |
字符串 | 项目(由指定 project.id 标识,例如 my-project-123)的资源层次结构中的祖先。例如:/ParentOrgNumber/ParentFolderNumber/。详细了解资源层次结构。 |
project.ancestors | 结构体 |
此字段描述了费用专列项的资源层次结构的结构和值,包括项目、文件夹和组织。祖先实体按节点是从节点到根排序(项目、文件夹,再到组织)。 |
project.ancestors.resource_name | 字符串 | 每个祖先实体的相对资源名称,格式为“resourceType/resourceNumber”。使用 project.ancestors.resource_name 可提供更完整的 project.ancestry_numbers 视图。 |
project.ancestors.display_name | 字符串 | 您在控制台中为资源创建的名称。 |
project.labels.key | 字符串 | 如果存在标签,则为键值对中的键部分,键值对包含发生了使用的 Google Cloud 项目中的标签。如需详细了解如何使用标签,请参阅使用标签。 |
project.labels.value |
字符串 | 如果存在标签,则为键值对中的值部分,键值对包含发生了使用的 Google Cloud 项目中的标签。如需详细了解如何使用标签,请参阅使用标签。 |
labels.key |
字符串 | 如果存在标签,则为键值对中的键部分,键值对包含发生了使用的 Google Cloud 资源中的标签。如需详细了解如何使用标签,请参阅使用标签。 |
labels.value |
字符串 | 如果存在标签,则为键值对中的值部分,键值对包含发生了使用的 Google Cloud 资源中的标签。如需详细了解如何使用标签,请参阅使用标签。 |
system_labels.key |
字符串 | 如果存在系统标签,则为键值对的键部分,包含发生了使用的资源中的系统生成的标签。另请参阅可用的系统标签。 |
system_labels.value |
字符串 | 如果存在系统标签,则为键值对的值部分,包含发生了使用的资源中的系统生成的标签。另请参阅可用的系统标签。 |
location.location |
字符串 | 多区域、国家/地区、单区域或可用区层级的使用位置;或者是 global ,表示资源没有特定位置。如需了解详情,请参阅地理位置和区域以及 Google Cloud 位置。 |
location.country |
字符串 | 当 location.location 是国家/地区、区域或可用区时,此字段是发生了使用的国家/地区,例如 US 。如需了解详情,请参阅地理位置和区域以及 Google Cloud 位置。 |
location.region |
字符串 | 当 location.location 是区域或可用区时,此字段是发生了使用的区域,例如 us-central1 。如需了解详情,请参阅地理位置和区域以及 Google Cloud 位置。 |
location.zone |
字符串 | 当 location.location 是可用区时,此字段是发生了使用的可用区,例如 us-central1-a 。如需了解详情,请参阅地理位置和区域以及 Google Cloud 位置。 |
cost |
浮点数 | 不计任何赠金的使用费,精确到小数点后六位。如需获得包含赠金的总费用,应将所有 credits.amount 添加到费用中。如需了解详情,请参阅此查询示例。 |
currency |
字符串 | 费用的结算币种。如需了解详情,请参阅结算和付款支持的本地货币。 |
currency_conversion_rate |
浮点数 | 美元兑本地货币的汇率。也就是说,cost ÷ currency_conversion_rate 得出以美元为单位的费用。 |
usage.amount |
浮点数 | 所用 usage.unit 的数量。 |
usage.unit |
字符串 | 用于计量资源用量的基本单位。例如,标准存储空间的基本单位是字节/秒。 |
usage.amount_in_pricing_units
|
浮点数 | 所用 usage.pricing_unit 的数量。
|
usage.pricing_unit
|
字符串 | 根据 Cloud Billing Catalog API 计量资源用量的单位。 |
credits |
结构体 | credits 包含的字段描述与 Google Cloud 和 Google Maps Platform SKU 关联的赠金的结构和值。 |
credits.id |
字符串 | 如果存在,则表示赠金与产品 SKU 相关联。
credits.id 值要么是字母数字的唯一标识符(例如,12-b34-c56-d78),要么是赠金类型说明(例如,承诺使用折扣:CPU)。如果 |
credits.full_name |
字符串 | 与产品 SKU 关联的赠金名称。这是字母数字 credits.id 的直观易懂的说明。示例包括:免费试用赠金或基于支出的承诺使用折扣。
|
credits.type |
字符串 | 此字段说明 credits.id 的用途或来源。
赠金类型包括:
|
credits.name |
字符串 | 对 Cloud Billing 账号应用的赠金的说明。 |
credits.amount |
浮点数 | 对使用量应用的赠金金额。 |
adjustment_info |
结构体 | adjustment_info 包含的字段说明与 Cloud Billing 账号关联的费用专列项的调整项的结构和值。仅当为 Cloud Billing 修改生成了费用专列项时,才会显示 |
adjustment_info.id |
字符串 | 如果存在,则表示费用专列项有一个关联的调整项。adjustment_info.id 是某个问题导致的所有关联调整项的唯一 ID。 |
adjustment_info.description |
字符串 | 调整项及其原因的说明。 |
adjustment_info.type |
字符串 | 调整项的类型。 类型包括:
|
adjustment_info.mode |
字符串 | 发出调整项的方式。 模式包括:
|
export_time |
时间戳 | 与附加的 Cloud Billing 数据关联的处理时间。
每次导出新数据时,该值都会增加。 另请参阅下文的导出的数据和账单之间的区别。 |
tags |
结构体 | 描述标记的字段,例如键、值和命名空间。 |
tags.key |
字符串 | 与此特定标记关联的键的简称或显示名。 |
tags.value |
字符串 | 附加到 |
tags.inherited |
布尔值 | 指示标记绑定是继承的(继承的标记 = True)还是直接的/非继承的(继承的标记 = False)。您可以创建标记绑定来与资源层次结构中的父资源进行关联。 |
tags.namespace |
字符串 | 表示定义标记键和值的资源层次结构。命名空间可以与标记键和标记值简称组合使用,以为标记键或标记值创建全局唯一的完全限定名称。 |
cost_at_list |
浮点数 | 与计入您的 Cloud Billing 账号的所有专列项关联的定价。 |
transaction_type |
字符串 | 卖家的交易类型。交易类型可能是以下各项之一:
|
seller_name |
字符串 | 卖家的法定名称。 |
了解标准和详细使用费数据
以下部分介绍了导出到 BigQuery 的标准和详细使用费数据。
标签简介
特定标签的费用数据仅显示自该标签应用于资源之日起的使用情况。例如,如果您在 2024 年 1 月 15 日向 Compute Engine 虚拟机添加标签 environment:dev
,则对 environment:dev
的任何分析都仅包括 1 月 15 日以后该虚拟机的使用情况。
您可能还会看到不同服务在不同时间的标签数据,具体取决于每项服务提供相应数据的时间。
可用的系统标签
系统标签是关于发生了使用的资源的重要元数据的键值对。以下系统标签会自动包含在适用的使用情况中。
system_labels.key |
system_labels.value 示例 |
说明 |
---|---|---|
compute.googleapis.com/machine_spec |
n1-standard-1、custom-2-2048 | 虚拟机的配置。如需了解详情,请参阅机器类型。 |
compute.googleapis.com/cores |
如果是 n1-standard-4,则为 4;如果是 custom-2-2048,则为 2 | 可供虚拟机使用的 vCPU 数。 |
compute.googleapis.com/memory |
如果是 n1-standard-4,则为 15360(即 15 GB * 1024 MB/GB);如果是 custom-2-2048,则为 2048 | 可供虚拟机使用的内存量(以 MB 为单位)。 |
compute.googleapis.com/is_unused_reservation |
true;false | 表示通过可用区级预留预留但未使用的用量。 |
storage.googleapis.com/object_state |
live; noncurrent; soft_deleted; multipart | 正在收费的存储空间对象的状态。 |
导出的数据和账单之间的区别
Google Cloud 产品会以不同的时间间隔向 Cloud Billing 进程报告使用情况和费用数据。因此,您可能会在使用 Google Cloud 服务与可在 Cloud Billing 中查看的使用量和费用之间看到延迟现象。通常,您的费用在一天内可以体现出来,但有时可能需要 24 小时以上。
在某个日历月月末,延迟报告的使用量可能不包含在当月的账单中,而是延至下月的账单。
当您使用时间戳字段查询费用时,返回的数据可能会提取最初未显示在当月生成的账单上且应在以后报告的使用情况。因此,返回的 Cloud Billing 数据可能不会直接反映到该账单上。
时间戳字段包括:
usage_start_time
usage_end_time
export_time
如需返回直接反映到账单的 Cloud Billing 数据,请对 invoice.month
而不是时间戳字段运行查询。
税费
从 2020 年 9 月 1 日开始,使用费数据会显示每个项目(而非单个专列项)的纳税金额。如果您的查询或可视化内容依赖于税务数据,您可能需要更新这些查询以体现这些变化。
例如,对于 9 月 1 日之前记录的费用,您的使用费数据类似于以下示例,其中展示了 $10 的总纳税金额。
billing_account_id |
project.id |
cost_type |
cost |
---|---|---|---|
123456-ABCDEF-123456 | 示例项目 | 常规 | $60 |
123456-ABCDEF-123456 | 测试项目 | 常规 | $40 |
123456-ABCDEF-123456 | [空] | 税费 | $10 |
对于 9 月 1 日之后记录的费用,$10 将细分为 $6 用于 example-project
,$4 用于 test-project
:
billing_account_id |
project.id |
cost_type |
cost |
---|---|---|---|
123456-ABCDEF-123456 | 示例项目 | 常规 | $60 |
123456-ABCDEF-123456 | 测试项目 | 常规 | $40 |
123456-ABCDEF-123456 | 示例项目 | 税费 | $6 |
123456-ABCDEF-123456 | 测试项目 | 税费 | $4 |
错误和调整
在极少数情况下,您的 Cloud Billing 数据包含错误或需要进行调整,系统会附加更正数据。此类调整项分为两类:结算修改或更正。
结算修改
结算修改项会显示为单独的订单项。如果您收到账单修改通知,则 Cloud Billing 到 BigQuery 的导出操作中的新专列项会显示更改。显示的调整项与 Google Cloud 控制台结算部分的文档区域中提供的账单、贷记通知单和借记通知单文档相对应。
如需详细了解结算修改及其应用方式,请参阅了解通知单和调整项。
更正
更正显示为新数据,从而排除源 SKU 上的错误数据。在某些情况下,系统会提供新数据来取代错误的费用。结算数据导出中的所有列都将与原始数据匹配,但以下列除外:
cost
credit
usage.amount
export_time
例如,假设您在 1 月 1 日为使用 SKU A
支付了 10 美元。在 1 月的账单(2 月初开具)上,您会看到 SKU A
的费用为 $10。但是,2 月 2 日,Google Cloud 针对 SKU A
发出了更正,将使用费降低到 $5。您将在 2 月份的账单(3 月初开具)上额外收到两个专列项:
- 1 月 1 日的费用为 -$10(抵扣原费用)
- 1 月 1 日的用量为 $5(说明预期费用)
这些新专列项在结算数据导出中有一个 adjustment_info
列。显示超额费用的 1 月份原始账单不会被调整。您可以通过按 usage_start_time
查看费用并按 Day
分组来验证结算数据导出中的费用。
在这些视图中,延迟获利使用量的任何更正或费用都将累积,您无需担心任何暂时不正确的数据。
如需详细了解更正信息,请查看账单月份中的所有费用,并查找使用日期早于账单月份的费用。这些费用是更正或延迟货币化用量产生的费用。
以下代码示例演示了如何创建一个基本查询以返回更正或延迟货币化用量的总费用:
SELECT
SUM(cost)
+ SUM(IFNULL((SELECT SUM(c.amount)
FROM UNNEST(credits) c), 0))
AS total
FROM `project.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE
invoice.month = '202311' AND
DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) < '2023-11-01';
对于按服务返回账单费用的费用明细(其中使用日期早于账单月份)的查询示例,请参阅“Cloud Billing 数据导出查询示例”中的查询费用详细信息以查看指定账单月份的更正或延迟货币化用量(按服务)。
自定义价格合同中的赠送金额简介
如果您拥有自定义价格合同,则作为合同的一部分,您可能会获得可在 Google Cloud 上使用的促销赠金。例如,您可能会收到 $1,000,该笔赠金可用于 Compute Engine 资源。促销赠金通常被视为一种付款方式。系统会自动应用赠送金额(如果可用)以减少您的总账单费用。
合同条款规定了赠送金额是适用于按 SKU 定价计算的费用还是按净价(折扣后)计算的费用。
如果您的赠送赠金适用于按定价计算的费用,则费用表报告中会有一个名为 Invoice
的服务,其 SKU 名为 Contract billing adjustment
。此 SKU 会调整您的赠金,以适用于按定价计算的费用。如要查看调整项适用的使用量,请查询 system.labels
列。system.labels.key
中的键为 cloud-invoice.googleapis.com/sku_id
,system.labels.value
中的值包含赠金和调整项所适用的 SKU ID。
关于标记
标记是键值对形式的资源,可直接或通过继承关联到资源。您可以使用标记来执行退款、审核以及进行其他费用分配分析。您还可以使用标记并视情况执行政策以便在资源层次结构内进行精细控制。
标记拥有强大的权限模型,可以支持继承、集中式管理、命名法标准化及政策引擎集成,而标签则是一款单独的工具,您可以使用标签来为资源添加注解。
标记数据会显示在资源、项目、文件夹和组织的 BigQuery 导出结果中。
可用标记
资源、项目、文件夹和组织的“标准费用”和“详细费用”导出结果包括以下标记数据字段:标记键、标记值、继承的标记和标记命名空间。
Cloud Billing 数据导出中的资源级标记适用于以下资源:
- AlloyDB for PostgreSQL 集群、实例和备份
- Artifact Registry 制品库
- Cloud Run 服务和作业
- Cloud Storage 存储桶
- Compute Engine 实例
- Memorystore for Redis 实例
- Secret Manager Secret
- Spanner 实例
标记限制
- 标记最多可能需要一个小时才能传播到 BigQuery 导出结果中。如果标记是在一个小时内被添加或移除的,或者资源存在的时间不超过一个小时,则这些被添加或移除的标记可能不会反映在导出结果中。
标准使用费查询示例
本部分提供了查询导出到 BigQuery 的 Cloud Billing 标准使用费数据的示例。
指定要在查询中使用的表名称
在这些示例中,要在 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 表:
标准费用查询示例中使用的常用值
本部分中的查询示例使用以下值作为表名称:project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX
这些查询示例也适用于导出到 BigQuery 的详细使用费数据,但它们并非用于检索详细使用费导出选项提供的任何资源级信息。
返回账单总费用
以下查询演示了使用导出的结算数据查看费用和赠金值的两种方法。
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 * 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 个在美洲运行的小型实例(有 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 | 应用 | chocolate-masher | $9 |
3 | 应用 | grapefruit-squeezer | $11 |
4 | 环境 | dev | $5 |
5 | 环境 | 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 LOWER(credits.name) LIKE "committed use 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 `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.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.
行 | 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 |
相关主题
与导出的 Cloud Billing 数据相关的主题
- 设置将 Cloud Billing 数据导出到 BigQuery 的功能
- 将 Cloud Billing 数据导出到 BigQuery 的查询示例
- 通过 Looker Studio 直观呈现一段时间内的支出
Google Cloud 控制台中提供的费用和价格报告
- 查看您的 Cloud Billing 报告和费用趋势
- 查看并下载账单或对账单的费用详细信息
- 查看和下载 Google 云服务的价格信息
- 通过费用明细报告了解您节省的费用
- 分析您的承诺使用折扣的有效性
- 查看您的费用和付款记录