gpt4 book ai didi

amazon-web-services - 为什么 Redshift 在加入时会自动修剪 varchar 列?

转载 作者:行者123 更新时间:2023-12-04 02:54:41 24 4
gpt4 key购买 nike

我在使用 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;

查询的输出如下:

query Output

在查询中,您可以看到第二个表中有一个尾随空格。所以不应该发生内部联接。但似乎 Redshift 能够在加入时修剪尾随的空格。

我在将现有的 Redshift sql 代码转换为 PySpark 时遇到了这个问题。

问候,
库马尔

最佳答案

啊!确实,一个非常有趣的发现!

来自 Character Types - Amazon Redshift :

Trailing spaces in VARCHAR and CHAR values are treated as semantically insignificant when values are compared.



看来,如果您想强制比较,是否需要避免尾随空格,例如:
SELECT * 
FROM joinTrim_temp1 a
JOIN joinTrim_temp2 b
ON a.charToJoin1 || '.' = b.charToJoin2 || '.';

关于amazon-web-services - 为什么 Redshift 在加入时会自动修剪 varchar 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53569896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com