Amazon Redshift多表合并插入报logged_in字段类型不匹配错误如何解决
Redshift插入汇总表boolean类型报错解决方案
问题根因
你第一次报错的核心原因是SELECT返回字段和INSERT目标列的顺序错位:
你INSERT语句中对应位置的字段顺序为:email, phone, customer_id_order_customers, ip, geoip_location, logged_in
但对应的SELECT片段多写了一个oc.order_id字段,导致实际传入logged_in列的值是varchar类型的oc.geoip_location,因此触发类型不匹配报错。
第一步:修正字段映射
把SELECT语句中oc.customer_id后面多余的oc.order_id删除,保证字段顺序和INSERT列一一对应,修改后的对应片段为:
oc.email, oc.phone, oc.customer_id, oc.ip, oc.geoip_location, oc.logged_in
如果修正字段顺序后仍然有类型报错,再使用下面的类型转换方案。
第二步:正确的boolean类型转换写法
Redshift不支持直接将'0'/'1'格式的varchar字符串强转为boolean类型,不需要做多次类型转换,直接通过DECODE/CASE返回boolean类型值即可:
- 如果源字段本身是boolean类型,不需要额外转换,直接引用即可
- 如果源字段是存储
'true'/'false'字符串的varchar类型,写法如下:
DECODE(oc.logged_in, 'true', true::boolean, 'false', false::boolean)
- 如果源字段是存储
'1'/'0'字符串的varchar类型,写法如下:
CASE WHEN oc.logged_in = '1' THEN true ELSE false END
内容的提问来源于stack exchange,提问作者Scoby
相关产品推荐
相关产品推荐

