Snowflake中按GROUP和ROLE合并JSON嵌套数组字段的实现
Snowflake JSON解析:合并同组角色的权限字符串
直接修改现有查询,通过GROUP BY分组,并使用Snowflake的LISTAGG函数将同一GROUP和ROLE对应的所有merged_actions拼接成单个字段:
SELECT GROUP, ROLE, LISTAGG( CONCAT('[Resource: ', value:Resource::string, '= Action: ', value:Action::string, ']'), ',' ) AS merged_actions FROM GROUP_PERMISSIONS, LATERAL FLATTEN(INPUT => merged_json:Statement) GROUP BY GROUP, ROLE;
补充说明:
LISTAGG函数会将分组内的所有merged_actions值,按照指定的分隔符(这里用逗号,)拼接成一个字符串,完全匹配你期望的结果格式。- 如果需要保留原
Statement数组中元素的顺序,可以在LISTAGG中添加排序规则:
LISTAGG( CONCAT('[Resource: ', value:Resource::string, '= Action: ', value:Action::string, ']'), ',' ) WITHIN GROUP (ORDER BY index) AS merged_actions
(index是FLATTEN函数默认返回的列,代表原数组中元素的位置)
修改后的查询会将同一GROUP和ROLE的多行权限结果合并为单行的单个字段,与你给出的期望结果一致。
内容的提问来源于stack exchange,提问作者user3165854
相关产品推荐
相关产品推荐

