带双引号的雪花 CSV 上传

时间:2021-03-09 18:02:50

标签: python sql csv snowflake-cloud-data-platform

我正在使用 Python 将信息批量加载到 Snowflake。我使用 Pandas 从源系统中提取数据并将其加载到 csv 中。将数据复制到 Snowflake 时出现此问题。

我收到以下错误:

snowflake.connector.errors.ProgrammingError: 100065 (22000): Found character '4' instead of field delimiter ','

该字段挂在字段内的以下文本上。

"[**EXTERNAL**]: BID: ""4597290 - PERSONNE"

如您所见,在导致转义的 4597290 之前排了双引号。不了解如何摆脱这个特定问题,但我已成功用于其他文件的内容如下:

'file_format = (type = "csv" SKIP_HEADER = 1 FIELD_OPTIONALLY_ENCLOSED_BY = '"' ESCAPE = ' ')

是否有一种文件格式可以让我适应上述示例,或者最佳做法是仅删除此字段上的引号?

1 个答案:

答案 0 :(得分:1)

我可以想到一些选项,另外您可以浏览论坛以获取其他想法(即,如何处理双引号字段中的双引号)。

  1. 您可以对数据进行预处理。这可能包括删除双引号,可能用另一对双引号将其转义,或者使用一组不同的字段分隔符或字段外壳。

  2. 您可以通过删除 FIELD_OPTIONALLY_ENCLOSED_BY 字段并稍后根据需要进行后处理来加载包含所有双引号的数据。下面的示例使用您现有的文件格式并删除该字段。

<块引用>

COPY INTO FORUMTEST from @TEST/forumtest.csv.gz file_format = (type = CSV ESCAPE = ' ');

  1. 您可以在 COPY 期间执行转换性 SQL 语句并删除 FIELD_OPTIONALLY_ENCLOSED_BY 字段。下面的 SQL 语句假设我们有 3 列包含双引号数据,仅作为示例。
<块引用>

COPY into FORUMTEST from (select replace($1,'"',''), replace($2,'"',''), replace($3,'"','') 来自@TEST/forumtest.csv.gz file_format) file_format=(type = CSV ESCAPE = ' '));