BigQuery Unnest a Array - Получение дубликатов - PullRequest
0 голосов
/ 19 ноября 2018

Я работаю над запросами GCP Billing в BQ.Но при извлечении массива со стоимостью я получаю неправильные значения, как unnest возвращает элементы массива в формате строки.Поэтому, если у меня есть 2 элемента в массиве для одной строки, я получу 2 строки.

EG:

Actual Array:

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

enter image description here

с 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

enter image description here

Вопрос:

Не знаюЯ не хочу помочь мне с этим запросом?

1 Ответ

0 голосов
/ 19 ноября 2018

вместо

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
...