Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 复制CSV数据时遇到问题,请使用参数包含的字段_Amazon S3_Delimiter_Snowflake Cloud Data Platform - Fatal编程技术网

Amazon s3 复制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时,我认为由于第二个字段包含逗号,命令会中断。我正在寻

我在下面有一个两行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: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');