假设您事先不知道“未来”列的名称和数量 - 我建议您将其展平,如下例所示(BigQuery 标准 SQL)
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'Alice' AS Name, ['a=1','b=2','c=3'] attributes UNION ALL
SELECT 'Cheshire Cat', ['a=4', 'x=5'] UNION ALL
SELECT 'White Rabbit', ['a=6', 'c=7']
)
SELECT Name,
SPLIT(kv, '=')[OFFSET(0)] key,
SPLIT(kv, '=')[SAFE_OFFSET(1)] value
FROM `project.dataset.table`, UNNEST(attributes) kv
结果
Row Name key value
1 Alice a 1
2 Alice b 2
3 Alice c 3
4 Cheshire Cat a 4
5 Cheshire Cat x 5
6 White Rabbit a 6
7 White Rabbit c 7
我确实提前知道属性...
在这种情况下,下面将起作用
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'Alice' AS Name, ['a=1','b=2','c=3'] attributes UNION ALL
SELECT 'Cheshire Cat', ['a=4', 'b=5'] UNION ALL
SELECT 'White Rabbit', ['a=6', 'c=7']
)
SELECT Name,
MAX(IF(key = 'a', value, NULL)) a,
MAX(IF(key = 'b', value, NULL)) b,
MAX(IF(key = 'c', value, NULL)) c
FROM (
SELECT Name,
SPLIT(kv, '=')[OFFSET(0)] key,
SPLIT(kv, '=')[SAFE_OFFSET(1)] value
FROM `project.dataset.table`, UNNEST(attributes) kv
)
GROUP BY Name
结果
Row Name a b c
1 Alice 1 2 3
2 Cheshire Cat 4 5 null
3 White Rabbit 6 null 7