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 ,也是。
我们如图所示创建了一个雪花 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
SELECT '"'||ERROR||'"', LENGTH(ERROR) FROM temp.T_ERROR
正如 Mike Walton 在别处所说,如果您有机会在数据进入 Snowflake 之前 trim space,您的问题可能会得到解决。但是,如果您正在移植严重依赖 CHAR
行为的应用程序,您 可能 最好为所有 CHAR
列定义 COLLATE
。
我在其他数据库(即 Oracle)上进行了测试,它的行为方式与 Snowflake 相同:如果您从 CHAR
复制到 VARCHAR
,您会得到填充 spaces ,也是。