我们创建了一个如图所示的雪花表,并使用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或每一列
答案 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
,也会获得填充空间。