Redshift执行PIVOT查询报错Unsupported PIVOT column type: text咨询
报错原因
这个是AWS Redshift的PIVOT语法固有约束:FOR子句后指定的行转列基准字段不支持TEXT类型(即无长度限制的长文本/VARCHAR(MAX)类型),仅支持有明确长度定义的VARCHAR类型字符串。你当前业务表中的reminder_type字段为TEXT类型,因此执行查询时会触发该报错。
解决方法
两种方案选其一即可:
- 方案一:永久修改表结构。将
reminder_type字段调整为带明确长度的VARCHAR类型,长度适配你实际存储的枚举值长度即可,修改完成后原有PIVOT语句可直接正常运行。
参考字段修改语句:ALTER TABLE 你的业务表名 ALTER COLUMN reminder_type TYPE VARCHAR(32); - 方案二:不改表结构临时适配。在PIVOT逻辑外嵌套一层子查询,提前将
reminder_type字段强转为定长VARCHAR,再执行行转列操作即可。
参考查询语句:SELECT * FROM ( SELECT user_id, type, reminder_type::VARCHAR(32) AS reminder_type, sent_at FROM 你的业务表名 ) PIVOT ( MIN(sent_at) FOR reminder_type IN('REMINDER_1', 'REMINDER_2') )
上述语句执行后输出结构和你预期完全一致,会自动生成REMINDER_1、REMINDER_2两个时间字段,按user_id和type维度聚合对应的最小sent_at值。
内容的提问来源于stack exchange,提问作者Moseleyi
相关产品推荐
相关产品推荐

