本文档提供了一些示例,演示如何查询导出并存储在 BigQuery 中的 Cloud Billing 数据。
如需详细了解如何将结算数据导出到 BigQuery,请参阅概览和限制。
根据结算报告生成 SQL 查询
如需快速编写 SQL 查询以在 BigQuery 中返回与结算报告中的结果等效的结果,您可以使用 Google Cloud 控制台提供的结算报告中的生成查询功能。
指定要在查询中使用的表名称
在这些示例中,如需在 BigQuery 中查询导出的 Cloud Billing 数据,您需要在 FROM
子句中指定表名称的完整路径。表名称使用以英文句点分隔的三个值来确定:
project-ID.dataset_name.BQ_table_name
project-ID
是您设置的包含 BigQuery 数据集的 Google Cloud 项目的 ID。dataset_name
是您设置的包含所导出 Cloud Billing 数据的 BigQuery 数据集的名称。BQ_table_name
是您要查询的已导出 Cloud Billing 数据所在的 BigQuery 表的名称。系统会根据您启用的导出类型,为包含已导出 Cloud Billing 数据的 BigQuery 表自动分配名称:
例如,假设您有一个配置为导出详细使用费数据的 Cloud Billing 账号,并且账单导出配置的组成部分如下所示:
project-ID
:my-billing-project
dataset_name
:my_billing_dataset
BQ_table_name
:gcp_billing_export_resource_v1_<BILLING-ACCOUNT-ID>
BILLING-ACCOUNT-ID
:010101-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
字段在求和之前将费用和赠金值转换为 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-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 ;
例如,上述查询的结果可能是:
行 | 月 | 费用类型 | 总计 | 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-ID.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-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 | null | $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 | 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-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 | 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-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
字段在求和之前将费用和赠金值转换为 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-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX` GROUP BY 1, 2 ORDER BY 1 ASC, 2 ASC ;
例如,上述查询的结果可能是:
行 | 月 | name | 总计 | 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-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX` GROUP BY 1, 2, 3 ORDER BY 1 ASC, 2 ASC, 3 ASC ;
例如,上述查询的结果可能是:
行 | 月 | 费用类型 | name | 总计 | 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 ;
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-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 ID:
2DA5-55D3-E679
(Cloud Run - 请求)
获取特定 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 | 账号 | 每月 | 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 | 账号 | 每月 | 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 的商品类目
此示例演示了一个针对指定 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-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。在此查询中,将无服务器设置为 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 出站流量 | 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
= 按需虚拟机数。
标准 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 | |||||||
按需虚拟机数 | |||||||
内存:每 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-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 |
---|---|---|---|---|---|
平衡永久性磁盘容量 | 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 | 美元 |
相关主题
与导出的 Cloud Billing 数据相关的主题
Google Cloud 控制台中提供的费用和价格报告
- 查看您的 Cloud Billing 报告和费用趋势
- 查看并下载账单或对账单的费用详细信息
- 查看和下载 Google 云服务的价格信息
- 通过费用明细报告了解您节省的费用
- 分析您的承诺使用折扣的有效性
- 查看您的费用和付款记录