BigQuery Unnest a Array - Получение дубликатов
Я работаю над запросами GCP Billing в BQ. Но при извлечении массива со стоимостью я получаю неправильные значения, как unnest возвращает элементы массива в формате строки. Поэтому, если у меня есть 2 элемента в массиве для одной строки, я получу 2 строки.
НАПРИМЕР:
Фактический массив:
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
с Unnest:
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