2.8. 使用所需列构建查询
构建自定义查询,以在可发送到成本管理的 CSV 文件中收集成本数据。将您的表命名为 'project.dataset.table_name' 格式,并包含 backticks。要确保成本管理可以处理 CSV 文件,您必须包含以下列:
例 2.1. 账单和服务列:
-
billing_account_id
-
service.id
-
service.description
-
sku.id
-
sku.description
例 2.2. 项目列:
-
project.id
-
project.name
-
project.ancestry_numbers
例 2.3. usage 列:
-
usage_start_time
-
usage_end_time
-
usage.amounts
-
usage.unit
-
usage.amount_in_pricing_units
-
usage.pricing_unit
例 2.4. 位置列:
-
location.location
-
location.country
-
location.region
-
location.zone
例 2.5. Cost 列:
-
cost
-
currency
-
currency_conversion_rate
-
credits
-
cost_type
例 2.6. 资源列:
-
resource.name
-
resource.global_name
例 2.7. 其他日期列:
-
partition_date
-
export_time
您还可以包括以下可选列用于基于标签的成本:
-
project.labels
-
labels
-
system_labels
2.8.1. 查询和自定义示例
构建查询时,您应该对其进行自定义,以最适合您组织的需求。以下示例可以帮助您进行指导,但您应该针对您的环境进行调整。
以下示例查询会选择所有必需和可选列。它还包含一个 WHERE
子句,用于限制查询日期 2025-04-01 的数据量。某些列,如 'tags',格式为 json 字符串。使用 backticks 格式命名您的表,格式为 'project.dataset.table_name',以便您可以转义任何无效字符:
SELECT billing_account_id,service.id,service.description,sku.id,sku.description,usage_start_time,usage_end_time,project.id,project.name,TO_JSON_STRING(project.labels),project.ancestry_numbers,TO_JSON_STRING(labels),TO_JSON_STRING(system_labels),location.location,location.country,location.region,location.zone,export_time,cost,currency,currency_conversion_rate,usage.amount,usage.unit,usage.amount_in_pricing_units,usage.pricing_unit,TO_JSON_STRING(credits),invoice.month,cost_type,resource.name,resource.global_name,DATE(_PARTITIONTIME) as partition_date FROM `my-project.my-dataset.my-table` WHERE TIMESTAMP_TRUNC(_PARTITIONTIME, DAY) = TIMESTAMP(‘2025-04-01’)
SELECT
billing_account_id,service.id,service.description,sku.id,sku.description,usage_start_time,usage_end_time,project.id,project.name,TO_JSON_STRING(project.labels),project.ancestry_numbers,TO_JSON_STRING(labels),TO_JSON_STRING(system_labels),location.location,location.country,location.region,location.zone,export_time,cost,currency,currency_conversion_rate,usage.amount,usage.unit,usage.amount_in_pricing_units,usage.pricing_unit,TO_JSON_STRING(credits),invoice.month,cost_type,resource.name,resource.global_name,DATE(_PARTITIONTIME) as partition_date
FROM `my-project.my-dataset.my-table`
WHERE TIMESTAMP_TRUNC(_PARTITIONTIME, DAY) = TIMESTAMP(‘2025-04-01’)
如果示例查询不够,您可以使用以下一些策略进一步自定义过滤:
-
使用
WHERE
子句过滤出特定数据。例如,WHERE service.description LIKE '%Red Hat%'
会过滤掉所有没有包含"Red Hat"的描述信息。 -
使用 conjunction 和 disjunction operator
AND
和OR
来进一步指定您的参数。 - 使用列 service.description 过滤 BigQuery 或 Cloud Logging 等服务。
使用列 project.id、project.number 和 project.name 根据特定项目数据进行过滤。
- 使用 location.region 将数据过滤到特定区域。
- 在 BigQuery 中预览您的数据,以确保在将其发送到成本管理之前捕获正确的信息。
有关创建查询的更多信息,请参阅 Google 文档的 创建和使用表。