首页 > 解决方案 > 有没有办法加载包含单引号、双引号和换行符的数据的csv?

问题描述

我有 .csv 和下面的数据

1234|Player's| Team, be on time to collect the
prizes|2019:02:02
1235|Player's|<body ref="tag">|2019:02:03

我正在尝试执行复制命令以将数据加载到雪花仓库中。

记录失败,位置 [id] 在第 2 行。

为了解决这个问题,为带有双引号的新行数据提供了引号,但随后在第 3 行(“标签”)失败。

标签: snowflake-cloud-data-platform

解决方案


@kuldeep - 您无法加载此数据,因为换行符用作行分隔符以及数据中的值。您需要在导出数据之前对新行进行转义,然后在将它们加载到 DW 之前,在 Snowflake 的文件格式中提及转义字符。

当您将此数据从源系统导出到 S3/blob 时,请确保添加引号并作为转义字符。这将确保 (1) 新行字符被转义并在第 1 行中被引用 (2) 标记引号被转义然后在第 2 行中被引用。如果数据特定于特定表,您可以在 Snowflake 中创建特定的文件格式用于表并将其与复制语句一起使用。例如,选择以反斜杠作为转义字符的 CSV 文件格式,并可选择将封闭字段设置为双引号。

 CREATE FILE FORMAT CSV_ESC_DQ TYPE = 'CSV'  COMPRESSION = 'AUTO'
   FIELD_DELIMITER = ',' RECORD_DELIMITER = '\n' SKIP_HEADER = 0
   FIELD_OPTIONALLY_ENCLOSED_BY = '\042' TRIM_SPACE = FALSE
   ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE ESCAPE = '\134'
   ESCAPE_UNENCLOSED_FIELD = '\134' DATE_FORMAT = 'AUTO' 
   TIMESTAMP_FORMAT= 'AUTO' NULL_IF = ('\\N');

   copy into table_name from @stage/path_to_file/
   file_format=csv_esc_dq;

推荐阅读