簡體   English   中英

將 Arrays 轉換為 BQ 中的列

[英]Transforming Arrays into Columns in BQ

原始問題 - 將數組轉換為 BigQuery 中的列

當您想從數組元素中提取相同的信息時,原始問題中建議的解決方案很有效。 但就我而言,我想從每個數組元素中提取的信息可能不同。 例如-如果您看到原始問題,我們擁有的第三個數組元素沒有 jsonPayload,而是其中包含 nameValuePairs。 如果我在那里使用 pivot,則會創建不必要的字段。 如何避免它們,我知道我們可以使用 EXCEPT 但我不認為這是一個好的解決方案,因為如果我必須從每個數組元素中選擇不同的元素,那將是一團糟。 因為我可以在有效載荷數組中包含 10 多個有效載荷。

SQL -

select * from (
  select 
    json_value(payload,'$.pool') as pool,
    json_value(payloadArr, '$.name') as name, 
    json_value(payloadArr, '$.fullpath') as fullPath,
    json_value(payloadArr, '$.jsonPayload.body') as payload,
    json_value(payloadArr, '$.nameValuePairs.data.one') as nv, 
  from  table t
  , unnest(json_extract_array(payload, '$.payloads')) payloadArr
)
pivot (any_value(fullPath) as fullPath , any_value(payload) as payload,  any_value(nv) as nv for name in ('request', 'response', 'attributes') ) 

在此處輸入圖像描述

在下面使用

select * from (
  select 
    json_value(payload,'$.pool') as pool,
    json_value(payloadArr, '$.name') as name, 
    json_value(payloadArr, '$.fullpath') as fullPath,
    coalesce(
      json_value(payloadArr, '$.jsonPayload.body'),
      json_value(payloadArr, '$.nameValuePairs.data.one')
    ) as payload, 
  from  table t
  , unnest(json_extract_array(payload, '$.payloads')) payloadArr
)
pivot (any_value(fullPath) as fullPath , any_value(payload) as payload for name in ('request', 'response', 'attributes') )     

output

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM