BigQuery 取消嵌套数组 - 获取重复项
Posted
技术标签:
【中文标题】BigQuery 取消嵌套数组 - 获取重复项【英文标题】:BigQuery Unnest an Array - Getting dupliates 【发布时间】:2018-11-19 04:44:25 【问题描述】:我正在处理 BQ 中的 GCP 结算查询。但是,在使用成本提取数组时,我得到了错误的值,例如 unnest 返回行格式的数组元素。因此,如果我在一个数组中有 2 个元素用于单行,那么我将得到 2 行。
EG:
实际数组:
SELECT
TO_JSON_STRING(labels), cost
FROM
billing_export.gcp_billing_export
WHERE
_PARTITIONTIME >= "2018-08-01 00:00:00"
AND _PARTITIONTIME < "2018-09-01 00:00:00"
AND billing_account_id = "xxx-62378F-xxx"
AND TO_JSON_STRING(labels) = '["key":"application","value":"scaled-server","key":"department","value":"hrd"]'
and cost> 0 limit 10
使用未嵌套:
with cte as (SELECT
labels, cost
FROM
billing_export.gcp_billing_export
WHERE
_PARTITIONTIME >= "2018-08-01 00:00:00"
AND _PARTITIONTIME < "2018-09-01 00:00:00"
AND billing_account_id = "xxx-62378F-xxxx"
AND TO_JSON_STRING(labels) = '["key":"application","value":"scaled-server","key":"department","value":"hrd"]'
and cost> 0
limit 10 )
select labels,cost from cte ,
UNNEST(labels) AS la
问题:
我不想要重复的成本值,有人可以帮我解决这个问题吗?
【问题讨论】:
是的,我已将此标记为答案 :) 刚刚投了赞成票。 谢谢!欣赏它 【参考方案1】:而不是
SELECT labels,cost from cte ,
UNNEST(labels) AS la
试试
SELECT la, cost from cte ,
UNNEST(labels) AS la
更新
SELECT
ARRAY(
SELECT AS STRUCT
JSON_EXTRACT_SCALAR(kv, '$.key') key,
JSON_EXTRACT_SCALAR(kv, '$.value') value
FROM UNNEST(SPLIT(labels, ',')) kv_temp,
UNNEST([CONCAT('', REGEXP_REPLACE(kv_temp, r'^\[|]$', ''), '')]) kv
) labels,
cost
FROM cte
【讨论】:
此查询显示,再次重复。以前的结果:imgur.com/tA6vCi3。使用上面的查询:imgur.com/N7e8Hr4。成本字段在两次都是重复的。 我希望,您至少认识到上述答案指出您使用labels
而不是la
的问题之一 - 如果是这种情况 - 考虑投票。同时 - 你能解释一下你期望在哪里看到成本的逻辑,在哪里没有以及为什么 - 所以我们可以帮助你通过 sql 表达这个逻辑
是的,赞成。我在这里解释了完整的要求:reddit.com/r/bigquery/comments/9yd8w2/unnest_an_array 或者我在这里有另一个问题:***.com/questions/53372423/…
不幸的是,目前还不清楚。大多数情况下,看起来您已经将标签作为重复字段,然后您正试图将其“反转”回数组。原因是什么?您应该详细说明您的用例 - 否则只会猜测我们这边
我想获得基于标签的资源计费因此,如果我有 2 个不同的标签,那么在取消嵌套 BQ 时会在第 2 行中提取 2 个标签并为这 2 行添加该资源的成本例如:我有一个标记为env: prod
database: mysql
的虚拟机,此虚拟机的总成本为 10 美元,现在实际计费的数据如下所示 第 1 列(标签):["key": "env", "value":"prod","key":"database","value":mysql"]
第 2 列(成本):10 但如果这样做不嵌套select la.key,la.value ,cost from my_tbl , UNNEST(labels) AS la group by la.key,la.value, cost
以上是关于BigQuery 取消嵌套数组 - 获取重复项的主要内容,如果未能解决你的问题,请参考以下文章
在 Power BI 中使用 BigQuery 重复/嵌套字段