雪花整理

时间:2019-11-18 21:02:52

标签: sql ssis collation snowflake-data-warehouse snowflake-schema

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

const getList = test=> some.current.querySelectorAll(test);

const list = getList('.list-for-test a');

list = list.map(elem => {'html': elem.innerText, 'href': e.href})

所以我们在ERROR中看到rtrimmed值,然后尝试将这些结果转移到另一个雪花表中,该表上未设置归类选项

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

问题create or replace table DATA.T_ERROR_1 ( ID NUMBER(38,0) Primary Key, ERROR varchar(4) NOT NULL, ) 表没有从临时表中获取修剪后的值,而是从原始平面文件中获取了未修剪的值

我还有其他方法可以执行此转移吗?这不涉及我编写rtrim ltrim或trim或每一列

1 个答案:

答案 0 :(得分:2)

您表中的

无一 已修剪数据。在某些情况下,它只会出现

temp.T_ERROR具有修饰的比较语义,这意味着它对进行了比较和排序,就好像它被修剪了一样。但是赋值不是比较,而是将temp.T_ERROR中的原始值(已填充空格)复制到新表DATA.T_ERROR_1中。您可以使用例如

检查是否有空格
SELECT '"'||ERROR||'"', LENGTH(ERROR) FROM temp.T_ERROR

正如Mike Walton在其他地方所说,如果您有机会在数据进入Snowflake之前修剪空间,则可能会解决您的问题。但是,如果要移植的应用程序高度依赖CHAR行为,那么可能最好为所有COLLATE列定义CHAR

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