我有一个表
table
,其中有超级列 scans
,其值类似于 [{"A": 1}, {"A": 2}]
、[{"A": 3}, {"A": 4}, {"A": 5}]
。
我如何制作一个包含这样的值的列
[1, 2]
,[3, 4, 5]
?
我尝试过类似的事情
SELECT
scans[r]."A"
FROM table t
cross join (select row_number() OVER (ORDER BY true) r from some_table) x
where r < get_array_length(t.scans)
但是出现错误
[XX000] ERROR: Query unsupported due to an internal error.
Detail: SQL reparse error. Where: function get_array_path(super, bigint) does not exist.
您可能需要从解除超级数组的嵌套开始 - https://docs.aws.amazon.com/redshift/latest/dg/query-super.html
这将为原始表中的每一行提供一行,并与该行的数组中的每个元素交叉连接。从那里您可以提取“A”值。比如:
select s.A
from table t, t.scans s;
请记住,由于您在超级中使用大写字母,因此您需要为 Redshift 会话启用区分大小写。
SET enable_case_sensitive_identifier TO true;