我们已将帐单历史记录导出到 bigquery。我正在尝试获取每个项目的总成本,但我开始认为这是不可能的,因为数据包括project.labels
这意味着每个计费项目可以有多行。
这是我刚刚运行的查询:
SELECT project.labels.key,project.labels.value,service.description,usage_start_time,usage_end_time,project.id,sku.description,cost
FROM [our-billing-export]
WHERE service.id = "6F81-5844-456A"
and usage_start_time = "2018-04-06 19:25:01.510 UTC"
and usage_end_time = "2018-04-06 21:25:03.785 UTC"
and project.id = "dh-raia"
and sku.id = "D973-5D65-BAB2"
order by project.labels.key,project.labels.value,service.id, usage_start_time,usage_end_time,project.id,sku.id,cost
请注意,我认为“存储 PD 容量”有 3 个相同的成本,它们可能代表 3 个不同的永久磁盘。还要注意,虽然相同的 3 个成本再次出现,但这次是不同的project.labels.key
.
我的目标是获得每project.id
. 显然,我不能只发布:
select project.id,sum(cost)
from [our-billing-export]
group by project.id
因为有些成本会不止一次包含在内(因为它们出现在多个project.labels.key
s 中)。
我不能只过滤一个project.labels.key
,因为我们不保证每个项目都有相同的标签。
我不能尝试消除这样的标签引起的重复:
SELECT service.id,sku.id,usage_start_time,usage_end_time, project.id,cost
FROM [our-billing-export]
GROUP BY service.id,sku.id ,usage_start_time,usage_end_time,project.id,cost
因为这会消除三个有效的行项目,每个项目都具有相同的成本。
我不能使用 OVER() 子句为每个客户端获取单个标签,如下所示:
SELECT project.labels.key,service.id,usage_start_time,usage_end_time,project.id,sku.id,rownum
FROM (
SELECT project.labels.key,service.id,usage_start_time,usage_end_time,project.id,sku.id,
ROW_NUMBER() OVER (PARTITION BY project.id,service.id,usage_start_time,usage_end_time,sku.id,project.labels.key) as rownum
FROM [our-billing-export]
)q
WHERE rownum=1
因为当我这样做时,我收到错误重复字段“project.labels.key”,因为不允许使用 PARTITION BY 键。
所以,据我所知,对于“我在每个项目上花了多少钱?”这个问题,没有办法得到明确的答案。我希望有人能告诉我我错了,并且有办法做到这一点。