繁体   English   中英

雪花中的排序规则

[英]Collation in Snowflake

我们创建了一个如图所示的雪花表,并使用复制到命令将数据从平面文件加载到

create or replace table temp.T_ERROR
(
    ID NUMBER(38,0) Primary Key,
    ERROR varchar(4) collate 'en-rtrim' NOT NULL,
)

所以我们在 ERROR 中看到了 rtrimmed 值,然后我们尝试将这些结果转移到另一个雪花表中,而该表上没有设置整理选项

create or replace table DATA.T_ERROR_1
(
    ID NUMBER(38,0) Primary Key,
    ERROR varchar(4) NOT NULL,
)

ISSUEDATA.T_ERROR_1表没有从临时表中获取修剪后的值,而是获取原始平面文件中的未修剪值

有没有其他方法可以让我进行这种转移,而不涉及我编写 rtrim ltrim 或 trim 或每一列

您的所有表都没有修剪数据。 它只在某些情况下才会出现

temp.T_ERROR修剪比较语义,这意味着它比较 & 排序就像它被修剪一样。 但是赋值不是比较, temp.T_ERROR中的原始值(填充了空格)被复制到新表DATA.T_ERROR_1中。 您可以使用例如检查空格是否存在

SELECT '"'||ERROR||'"', LENGTH(ERROR) FROM temp.T_ERROR

正如迈克沃尔顿在其他地方所说,如果您有机会在数据进入雪花之前修剪空间,您的问题可能会得到解决。 但是,如果要移植一个严重依赖CHAR行为的应用程序,则最好为所有CHAR列定义COLLATE

我已经在其他数据库(即 Oracle)上进行了测试,它的行为方式与 Snowflake 相同:如果你从CHAR复制到VARCHAR ,你也会得到填充空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM