我试图在 Athena 上压平一个复杂的结构
我的表格中的一行看起来像
id | 标签 |
---|---|
2003301084 | {repeats=[3], copayment=[CoPayment, other], 优惠状态=[E, T], prescriberdate=[2014-06-29], previouspurchasesonsamescript=[0], age=[49], numberofscripts= [1]} |
我想去:
id | 标签 | 价值 |
---|---|---|
2003301084 | 重复 | 3 |
2003301084 | 共付额 | 共付额 |
2003301084 | 共付额 | 其他 |
2003301084 | 优惠状态 | E |
2003301084 | 优惠状态 | T |
2003301084 | 开药日期 | 2014-06-29 |
2003301084 | 以前购买过相同的脚本 | 0 |
2003301084 | 年龄 | 49 |
2003301084 | 脚本数量 | 1 |
我找不到深入到结构中的例子
答案 0 :(得分:0)
您可以使用 UNNEST
将映射键/值对提取到单独的行中,然后将各个数组元素提取到单独的行中:
WITH data(id, tags) AS
(
VALUES (
2003301084,
map_from_entries(array[
row('repeats', array['3']),
row('copayment', array['CoPayment', 'other']),
row('concessionalstatus', array['E', 'T']),
row('prescriberdate', array['2014-06-29']),
row('previouspurchasesonsamescript', array['0']),
row('age', array['49']),
row('numberofscripts', array['1'])
])
)
),
arrays AS (
SELECT id, tag, entries
FROM data CROSS JOIN UNNEST(tags) AS m(tag, entries)
)
SELECT id, tag, value
FROM arrays CROSS JOIN UNNEST(entries) AS a(value)
=>
id | tag | value
------------+-------------------------------+------------
2003301084 | repeats | 3
2003301084 | copayment | CoPayment
2003301084 | copayment | other
2003301084 | concessionalstatus | E
2003301084 | concessionalstatus | T
2003301084 | prescriberdate | 2014-06-29
2003301084 | previouspurchasesonsamescript | 0
2003301084 | age | 49
2003301084 | numberofscripts | 1
(9 rows)