Snowflake 中的排序规则

Collation in Snowflake

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

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

所以我们在 ERROR 中看到了 rtrimmed 值然后我们尝试将这些结果转移到另一个雪花 table 上 table

没有设置整理选项
create or replace table DATA.T_ERROR_1
(
    ID NUMBER(38,0) Primary Key,
    ERROR varchar(4) NOT NULL,
)

问题DATA.T_ERROR_1 table 没有从 temp table 获取 trimmed 值,而是获取原始平面文件中的非 trimmed 值

有没有其他方法我可以做这个转移而不涉及我写 rtrim ltrim 或 trim 或每一列

None 的 table 有 trimmed 数据。它只在某些情况下出现

tabletemp.T_ERROR具有trim医学比较语义,这意味着它比较和排序就好像 这是 trim 医学。但是赋值不是比较,temp.T_ERROR中的原始值(被space填充)被复制到新的tableDATA.T_ERROR_1中。您可以使用 eg

检查 space 是否存在
SELECT '"'||ERROR||'"', LENGTH(ERROR) FROM temp.T_ERROR

正如 Mike Walton 在别处所说,如果您有机会在数据进入 Snowflake 之前 trim space,您的问题可能会得到解决。但是,如果您正在移植严重依赖 CHAR 行为的应用程序,您 可能 最好为所有 CHAR 列定义 COLLATE

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