标准数据导出的结构

本文档介绍了导出到 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 查询的示例

invoice.publisher_type 字符串

表示与交易关联的发布商。此字段支持在直接与 Google(第一方)进行的交易与与合作伙伴(第三方)进行的交易之间拆分账单,同时还会指明可能适用于交易的监管规定。

可能的值包括:
  • GOOGLE:Google Cloud 提供的第一方非受监管交易。
  • PARTNER:合作伙伴进行的第三方交易(受监管或不受监管)。
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.id 字段为空,则产品 SKU 未与赠金相关联。

credits.full_name 字符串 与产品 SKU 关联的赠金名称。这是字母数字 credits.id 的直观易懂的说明。 示例包括: 免费试用赠金 基于支出的承诺使用折扣

credits.full_name 值仅适用于具有字母数字 credits.id 的 SKU。如果 credits.id 的值是赠金类型(如 承诺使用折扣:CPU)的说明,则 credits.full_name 字段为空。

credits.type 字符串 此字段说明 credits.id 的用途或来源。 赠金类型包括:
  • COMMITTED_USAGE_DISCOUNT:为 Compute Engine 购买的基于资源的承诺使用合约,以获得大幅度的虚拟机使用费折扣。
  • COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE:为服务购买的基于支出的承诺使用合约,旨在换取您的最低消费额承诺。
  • DISCOUNT:折扣赠金类型用于达到合同支出阈值后获得的赠金。请注意,在 Google Cloud 控制台提供的 Cloud Billing 报告中,折扣赠金类型被列为“基于支出的折扣(按合同规定)”
  • FREE_TIER:某些服务提供在指定限额内提供免费的资源使用。对于这些服务,赠金用于实现免费层级使用量。
  • PROMOTION:促销赠金类型包括 Google Cloud 免费试用和营销活动赠金,或其他 Google Cloud 用量补贴。在适用情况下,促销赠金会被视为一种付款方式,并会自动应用以减少您的账单总额。
  • RESELLER_MARGIN:如果您是转销商,转销商利润赠金类型表示每个符合条件的专列项获得的转销商计划折扣。
  • SUBSCRIPTION_BENEFIT:通过购买服务的长期订阅以换取折扣而获得的赠金。
  • SUSTAINED_USAGE_DISCOUNT:持续使用折扣赠金类型是因在结算月份的大部分时间内运行特定 Compute Engine 资源而获得的自动折扣。
credits.name 字符串 对 Cloud Billing 账号应用的赠金的说明。
credits.amount 浮点数 对使用量应用的赠金金额。
adjustment_info 结构体 adjustment_info 包含的字段说明与 Cloud Billing 账号关联的费用专列项的调整项的结构和值。

仅当为 Cloud Billing 修改生成了费用专列项时,才会显示 adjustment_info 值。更正或非更正原因均可能导致修改。adjustment_info 类型包含调整项的详细信息,无论调整项是出于更正错误还是其他原因发出。

adjustment_info.id 字符串 如果存在,则表示费用专列项有一个关联的调整项。adjustment_info.id 是与某个问题相关联的所有调整项的唯一 ID。
adjustment_info.description 字符串 调整项及其原因的说明。
adjustment_info.type 字符串

调整项的类型。

类型包括:

  • USAGE_CORRECTION:错误报告的使用量导致的更正。
  • PRICE_CORRECTION:错误的定价规则导致的更正。
  • METADATA_CORRECTION:为修复元数据进行的更正,不更改费用。
  • GOODWILL:出于善意向客户发放的赠金。
  • SALES_BASED_GOODWILL:作为合同的一部分,出于善意向客户发放的赠金。
  • SLA_VIOLATION:由于服务等级目标 (SLO) 违规而向客户发放的赠金。
  • BALANCE_TRANSFER:将资金从一个付款账号转移到另一个付款账号的调整项。
  • ACCOUNT_CLOSURE:将已关闭账号的余额变为零的调整项。
  • GENERAL_ADJUSTMENT:常规的结算账号修改。
adjustment_info.mode 字符串

发出调整项的方式。

模式包括:

  • PARTIAL_CORRECTION:更正部分取消原始使用量和费用。
  • COMPLETE_NEGATION_WITH_REMONETIZATION:更正操作会完全取消原始使用量和费用,并使用更新后的使用量和费用发出更正后的专列项。
  • COMPLETE_NEGATION:更正完全取消原始使用量和费用,并且不再重新计算使用量的费用。
  • MANUAL_ADJUSTMENT:手动将调整项分配给费用和使用量。
export_time 时间戳 与附加的 Cloud Billing 数据关联的处理时间。 每次导出新数据时,该值都会增加。
另请参阅下文的导出的数据和账单之间的区别
tags 结构体

描述标记的字段,例如键、值和命名空间。

tags.key 字符串

与此特定标记关联的键的简称或显示名。

tags.value 字符串

附加到 tags.key 的资源。在任何给定时间,对于给定键,一个资源只能附加一个值。

tags.inherited 布尔值

指示标记绑定是继承的(继承的标记 = True)还是直接的/非继承的(继承的标记 = False)。您可以创建标记绑定来与资源层次结构中的父资源进行关联。

tags.namespace 字符串

表示定义标记键和值的资源层次结构。命名空间可以与标记键和标记值简称组合使用,以为标记键或标记值创建全局唯一的完全限定名称。

cost_at_list 浮点数

与计入您的 Cloud Billing 账号的所有专列项关联的定价。

transaction_type 字符串

卖家的交易类型。交易类型可能是以下各项之一:

  • GOOGLE = 1:Google Cloud 销售的服务。
  • THIRD_PARTY_RESELLER = 2:Google Cloud 转售的第三方服务。
  • THIRD_PARTY_AGENCY = 3:由合作伙伴销售的第三方服务,Google Cloud 充当代理。
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 数据中包含错误或需要进行调整,系统会在其中附加更正数据。这些调整分为两类:结算修改或更正。

结算信息修改

结算修改项会显示为单独的订单项。如果您收到了结算修改,则导出到 BigQuery 的 Cloud Billing 数据中会显示新的明细项来反映相应更改。显示的调整项对应于 Google Cloud 控制台结算部分的文档区域中提供的账单、贷记通知单和借记通知单文档。

如需详细了解结算修改以及应用方式,请参阅了解通知单和调整项

更正

更正项显示为新数据,用于否定来源 SKU 上的错误数据。在某些情况下,新数据会取代错误的扣款。导出的结算数据中的所有列都与原始数据一致,但以下列除外:

  • cost
  • credit
  • usage.amount
  • export_time

例如,假设您在 1 月 1 日使用 SKU A 的费用为 10 美元。在 1 月份的账单(2 月初开具)中,您会看到 SKU A 的扣款金额为 10 美元。不过,Google Cloud 在 2 月 2 日针对 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_idsystem.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 表:
    • 标准使用费表:在 BigQuery 数据集中,该表命名为 gcp_billing_export_v1_<BILLING_ACCOUNT_ID>
    • 详细使用费表:在 BigQuery 数据集中,该表命名为 gcp_billing_export_resource_v1_<BILLING_ACCOUNT_ID>
    • 价格表:在 BigQuery 数据集中,该表命名为 cloud_pricing_export

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

本部分中的查询示例使用以下值作为表名称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
;

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

费用类型 总计 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 个小型实例。
  • 每个实例都带有应用和环境标签。
  • 您有 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.
名称 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

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