[英]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.