我在使用 Redshift 时遇到了独特的问题。请参阅下面的说明性示例:
drop table if exists joinTrim_temp1;
create table joinTrim_temp1(rowIndex1 int, charToJoin1 varchar(20));
insert into joinTrim_temp1 values(1, 'Sudan' );
insert into joinTrim_temp1 values(2, 'Africa' );
insert into joinTrim_temp1 values(3, 'USA' );
drop table if exists joinTrim_temp2;
create table joinTrim_temp2(rowIndex2 int, charToJoin2 varchar(20));
insert into joinTrim_temp2 values(1, 'Sudan ' );
insert into joinTrim_temp2 values(2, 'Africa ' );
insert into joinTrim_temp2 values(3, 'USA ' );
select * from joinTrim_temp1 a join joinTrim_temp2 b on a.charToJoin1 = b.charToJoin2;
查询的输出如下:
在查询中,您可以看到第二个表中有一个尾随空格。因此不应发生内连接。但 Redshift 似乎能够在加入时修剪尾随空格。
我在将现有 Redshift sql 代码转换为 PySpark 时遇到了这个问题。
问候,
库马尔
啊!确实,这是一个非常有趣的发现!
From 字符类型 - Amazon Redshift https://docs.aws.amazon.com/redshift/latest/dg/r_Character_types.html#r_Character_types-significance-of-trailing-blanks:
比较值时,VARCHAR 和 CHAR 值中的尾随空格在语义上被视为无关紧要。
看来,如果您想强制进行比较,您是否需要避免尾随空格,例如:
SELECT *
FROM joinTrim_temp1 a
JOIN joinTrim_temp2 b
ON a.charToJoin1 || '.' = b.charToJoin2 || '.';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)