如何在Redshift视图创建中将对象转换为Super类型
在Redshift视图中转换为Super类型的方法
Redshift里不能直接用CAST((SELECT 3,4) AS SUPER)这种写法,因为子查询返回的是关系型行数据,没法直接转成Super类型。要构造Super类型,得借助JSON相关函数生成符合要求的结构,以下是具体实现方式:
1. 构造单个Super对象
如果要把多个值包装成一个Super对象,用json_object函数直接生成,然后在视图中使用:
CREATE VIEW my_super_view AS SELECT 1 AS col1, 2 AS col2, -- 生成包含key1=3、key2=4的Super对象 json_object('key1': 3, 'key2': 4) AS super_col;
2. 构造Super数组
如果要把子查询的多行结果转成Super数组,用json_agg配合json_object来实现:
CREATE VIEW my_super_array_view AS SELECT 1 AS col1, 2 AS col2, -- 将子查询的3、4转成Super数组 (SELECT json_agg(json_object('value': num)) FROM (SELECT 3 UNION SELECT 4) t(num)) AS super_array_col;
关键说明
Redshift的Super类型本质是兼容JSON的半结构化类型,所有能生成JSON结构的函数(比如json_object、json_agg、json_parse)返回的结果都是Super类型,直接在视图的字段定义中使用这些表达式即可完成转换。
内容的提问来源于stack exchange,提问作者wengxu
相关产品推荐
相关产品推荐

