Amazon s3 复制CSV数据时遇到问题,请使用参数包含的字段
我在下面有一个两行CSV文件:Amazon s3 复制CSV数据时遇到问题,请使用参数包含的字段,amazon-s3,delimiter,snowflake-cloud-data-platform,Amazon S3,Delimiter,Snowflake Cloud Data Platform,我在下面有一个两行CSV文件: id, name, value1, alias, user, description, start_time, end_time 24,"quick brown fox, lazy dog",73.0,xyz,username,None,2020-03-16 12:00:00,2020-03-17 19:07:10 该文件已经在S3中,我已经使用下面的命令成功复制了其他文件。问题是,在复制到snowflake时,我认为由于第二个字段包含逗号,命令会中断。我正在寻
id, name, value1, alias, user, description, start_time, end_time
24,"quick brown fox, lazy dog",73.0,xyz,username,None,2020-03-16 12:00:00,2020-03-17 19:07:10
该文件已经在S3中,我已经使用下面的命令成功复制了其他文件。问题是,在复制到snowflake时,我认为由于第二个字段包含逗号,命令会中断。我正在寻求帮助解决这个问题
该表定义如下:
id:int,
name:text,
value1:numeric,
alias:text,
user:text,
description:text,
start_time:timestamp,
end_time:timestamp
COPY INTO schema.table FROM s3://bucket1/
files = ('filepath/filename.csv')
credentials =(aws_key_id='XXXXXXX' aws_secret_key='XXXXXXX')
file_format = (type = csv field_delimiter = ',' skip_header = 1
field_optionally_enclosed_by = '"' null_if = ('\N', 'None', 'nan'));
“复制到雪花”命令定义为:
id:int,
name:text,
value1:numeric,
alias:text,
user:text,
description:text,
start_time:timestamp,
end_time:timestamp
COPY INTO schema.table FROM s3://bucket1/
files = ('filepath/filename.csv')
credentials =(aws_key_id='XXXXXXX' aws_secret_key='XXXXXXX')
file_format = (type = csv field_delimiter = ',' skip_header = 1
field_optionally_enclosed_by = '"' null_if = ('\N', 'None', 'nan'));
运行它会产生以下错误:
Error: Number of columns in file (1) does not match that of the corresponding table (9), use file format option error_on_column_count_mistmatch=false to ignore this error
我期待着任何关于前进的建议。谢谢大家! 您的测试CSV与应用程序编写标准CSV的方式略有不同。Snowflake被告知字段可以选择用双引号括起来,但这并不完全正确 在右侧,第二列用双引号括起来,但在左侧,它用空格和双引号括起来 如果您尝试在删除空格的情况下使用这些行(因为任何写出CSV的应用程序都会在没有空格的情况下对其进行格式化),它应该适合您
id,name,value1,alias,user,description,start_time,end_time
24,"quick brown fox, lazy dog",73.0,xyz,username,None,2020-03-16 12:00:00,2020-03-17 19:07:10
嗨,格雷格,谢谢你的回复。我已经确认字段之间没有空格。此外,如果确实是这样,那么在文件格式中添加TRIM_SPACE=TRUE参数应该可以解决该问题,但同样的错误也会发生。实际上,TRIM_SPACE=TRUE没有帮助。在解析器确定字段的值位于可选引号内之后,就会发生这种情况。雪花文档似乎不同意这种说法。例如,如果您的外部数据库软件将字段括在引号中,但插入了前导空格,则Snowflake将读取前导空格而不是开头引号字符作为字段的开头(即引号被解释为字段数据字符串的一部分)。将此选项设置为TRUE,以在数据加载期间删除不需要的空格。“同样,我认为问题不在空格中,因为我已确认逗号分隔的值之间没有空格。我可以加载文件,但只有在删除您提供的示例中的空格时才可以。这是我正在使用的文件格式:ALTER file format“TEST2”。“PUBLIC”。LATEST2 SET COMPRESSION='AUTO'FIELD_DELIMITER=','记录\u分隔符='\n'跳过\u头=1个字段\u可选\u由='\042'修剪\u空格=错误\u列上\u计数\u不匹配=真转义='无'转义\u未关闭\u字段='\134'日期\u格式='自动'时间戳\u格式='自动'空值\u如果=('\\n');