Snowflake cloud data platform 在雪花中逃逸双引号

Snowflake cloud data platform 在雪花中逃逸双引号,snowflake-cloud-data-platform,snowsql,Snowflake Cloud Data Platform,Snowsql,我正在尝试使用copy into命令加载数据。字段具有特殊字符,如值\“,但 字段\u可选地\u由其转义\包围\u,并在加载时出错 Found character '0' instead of field delimiter ';' 数据: "TOL";"AANVR. 1E K ZIE RF.\";"011188" 转义第二列值后,考虑并转义分隔符AANVR.1E K ZIE RF.\”但实际上它应该是AANVR。1E K ZIE RF.\ 文件格式 CREATE OR REPLACE F

我正在尝试使用copy into命令加载数据。字段具有特殊字符,如值
\“
,但 字段\u可选地\u由其转义
\
包围\u,并在加载时出错

Found character '0' instead of field delimiter ';'
数据:

"TOL";"AANVR. 1E K ZIE RF.\";"011188"
转义第二列值后,考虑并转义分隔符
AANVR.1E K ZIE RF.\”但实际上它应该是
AANVR。1E K ZIE RF.\

文件格式

 CREATE OR REPLACE FILE FORMAT TEST                  
       FIELD_DELIMITER = ';'                                                                                                                                         
       SKIP_HEADER = 1                                                                                                                                         
       TIMESTAMP_FORMAT = 'MM/DD/YYYYHH24:MI:SS'                                                                                                                                         
       escape = "\\"                                                                                                                                '
       TRIM_SPACE = TRUE                                                                                                                                         
       FIELD_OPTIONALLY_ENCLOSED_BY = '\"'                                                                                                                                         
       NULL_IF = ('')                                                                                                                                         
       ENCODING = "iso-8859-1"                                                                                                                                         
 ; 

粗略的例子,但下面的工作对我来说。如果您正在寻找不同的输出,请告诉我

CREATE OR REPLACE table DOUBLE_TEST_DATA (
   string1 string
 , varchar1 varchar
 , string2 string
 );                                                                                                                               

COPY INTO DOUBLE_TEST_DATA FROM @TEST/doublequotesforum.csv.gz
FILE_FORMAT = (
  TYPE=CSV
, FIELD_DELIMITER = ';' 
, FIELD_OPTIONALLY_ENCLOSED_BY='"'
);

select * from DOUBLE_TEST_DATA;
输出:

粗略的示例,但下面的内容对我很有用。如果您正在寻找不同的输出,请告诉我

CREATE OR REPLACE table DOUBLE_TEST_DATA (
   string1 string
 , varchar1 varchar
 , string2 string
 );                                                                                                                               

COPY INTO DOUBLE_TEST_DATA FROM @TEST/doublequotesforum.csv.gz
FILE_FORMAT = (
  TYPE=CSV
, FIELD_DELIMITER = ';' 
, FIELD_OPTIONALLY_ENCLOSED_BY='"'
);

select * from DOUBLE_TEST_DATA;
输出:

如果需要替换现有表中的双引号,可以在
replace
函数中使用
'\'
语法。下面提供了示例

select replace(column_name,'\"','') as column_name from table_name

如果需要替换现有表中的双引号,可以在
replace
函数中使用
'\'
语法。下面提供了一个例子

select replace(column_name,'\"','') as column_name from table_name


如果你修正了
escape
参数的输入错误,它能工作吗?我认为你不需要在
字段中有一个\可选地由
参数括起来。@MikeWalton字段\可选地由=“\”括起来,因为其他记录有“TOL”;“RPC”“B1XQ\”这样的数据是必需的;“011189”但您是否只想使用:
='“
有什么理由吗?如果您的文件中没有任何转义,然后设置
escape=NONE
,看看这是否处理得更好。如果你修正了
escape
参数的输入错误,它会起作用吗?我认为你不需要在
字段中加一个\或者加上一个
参数。@MikeWalton字段\u或者加上一个“\”,因为其他记录有“TOL”这样的数据RPC“B1XQ\”;“011189”但您是否只想使用:
='“
有吗?如果你的文件中没有任何转义,那么设置
escape=NONE
,看看这是否能更好地处理它。是的,我也是这么想的,但OP说这些是导致错误的原因。不过,这对我来说非常有效。@MikeWalton提出了两个场景,其中有两个数据集Dateset1:“WESY”;“AANVR.1E K ZIE RF.\”;"011188"; “CYDC67”;“JV#19171455\\”;"266020337000"; 日期集2:“施”;复杂的“C”;“OPT TM 16/12”;“PBMG”;“比特沃农”;“格洛克纳”;数据集1加载精细,字段\u可选地\u由='“'括起,escape=None,但获取日期集错误2数据集2加载精细,字段\u可选地\u由='”,escape='\\'括起,但获取日期集错误Dateset1@marjun当然,我可以举这个例子。您希望从第二个数据集中获得什么输出?换句话说,加载完成后,您希望它看起来像什么?@Suzy Lockwood输入数据集1:“AANVR.1E K ZIE RF.\”预期输出:AANVR。1E K ZIE RF.\Input Dataset2:“\”GLOCKNER\”Output Dataset2:“GLOCKNER”是否可以使用Escape=None和Escape='\\'的一种文件格式加载这两个数据集?@marjun不幸的是,否,因为您告诉程序运行冲突的Escape。它不知道在什么情况下你想转义(第二个数据集)和在什么情况下你不想转义(第一个数据集)。是的,这也是我所想的,但OP说这些导致了所述的错误。不过,这对我来说非常有效。@MikeWalton提出了两个场景,其中有两个数据集Dateset1:“WESY”;“AANVR.1E K ZIE RF.\”;"011188"; “CYDC67”;“JV#19171455\\”;"266020337000"; 日期集2:“施”;复杂的“C”;“OPT TM 16/12”;“PBMG”;“比特沃农”;“格洛克纳”;数据集1加载精细,字段\u可选地\u由='“'括起,escape=None,但获取日期集错误2数据集2加载精细,字段\u可选地\u由='”,escape='\\'括起,但获取日期集错误Dateset1@marjun当然,我可以举这个例子。您希望从第二个数据集中获得什么输出?换句话说,加载完成后,您希望它看起来像什么?@Suzy Lockwood输入数据集1:“AANVR.1E K ZIE RF.\”预期输出:AANVR。1E K ZIE RF.\Input Dataset2:“\”GLOCKNER\”Output Dataset2:“GLOCKNER”是否可以使用Escape=None和Escape='\\'的一种文件格式加载这两个数据集?@marjun不幸的是,否,因为您告诉程序运行冲突的Escape。它将不知道在哪些情况下需要转义(第二个数据集),以及在哪些情况下不需要转义(第一个数据集)。