我在 BigQuery 中有一個如下所示的陣列:
SELECT params FROM mySource;
[
{
key: "name",
value: "apple"
},{
key: "color",
value: "red"
},{
key: "delicious",
value: "yes"
}
]
看起來像這樣:
| 引數 |
|---|
[{ key: "name", value: "apple" },{ key: "color", value: "red" },{ key: "delicious", value: "yes" }] |
如何更改我的查詢,使表看起來像這樣:
| 姓名 | 顏色 | 美味的 |
|---|---|---|
| 蘋果 | 紅色的 | 是的 |
目前我能夠通過以下方式完成此任務:
SELECT
(
SELECT p.value
FROM UNNEST(params) AS p
WHERE p.key = "name"
) as name,
(
SELECT p.value
FROM UNNEST(params) AS p
WHERE p.key = "color"
) as color,
(
SELECT p.value
FROM UNNEST(params) AS p
WHERE p.key = "delicious"
) as delicious,
FROM mySource;
但我想知道是否有一種方法可以在不手動指定每個鍵名的情況下做到這一點。我們可能無法提前知道所有鍵的名稱。
謝謝!
uj5u.com熱心網友回復:
考慮以下方法
select * except(id) from (
select to_json_string(t) id, param.*
from mySource t, unnest(parameters) param
)
pivot (min(value) for key in ('name', 'color', 'delicious'))
如果應用于您問題中的樣本資料 - 輸出如下

如您所見 - 您仍然需要指定鍵名,但整個查詢更簡單且更易于管理
同時,上面的查詢可以通過使用 EXECUTE IMMEDIATE 來增強,其中鍵名串列是自動生成的。我對這種技術至少有幾個答案,所以如果你愿意,可以在 SO 上搜索它(我只是不想在這里復制)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/353904.html
標籤:sql 谷歌-bigquery
