【问题标题】:parse csv file with string fields that contain double quotes and/or commas using Snowflake COPY INTO使用 Snowflake COPY INTO 解析包含双引号和/或逗号的字符串字段的 csv 文件
【发布时间】:2020-12-09 04:14:59
【问题描述】:

我的问题:

如何将我的副本构造成语句,以便我的文件能够正确解析和加载?谢谢!

问题:

我有一个 csv 文件,我需要从 Snowflake 中的命名阶段解析并复制到一个表中。

文件如下所示:

ID, Name, Job Title,Company Name, Email Address, Phone Number
5244, Ted Jones, Manager, Quality Comms, tj@email.com,555-630-1277 
5246, Talim Jones,""P-Boss"" of the world, Quality Comms, taj@email.com,555-630-127 
5247, Jordy Jax,,"M & G Services.",jj@services.com, 616-268-1546

我的代码:

COPY INTO DB.SCHEMA.TABLE_NAME
(
ID, 
FULL_NAME,
JOB_TITLE,
EMAIL_ADDRESS
)
FROM 
(
SELECT $1::NUMBER AS ID,
 $2 AS FULL_NAME, 
 $3 AS JOB_TITLE,
 $5 AS EMAIL_ADDRESS
FROM @STAGE_NAME) 
--SNOWFLAKE DOES NOT SUPPORT UTF 16 OR 32 SO HAVING REPLACE INVALID UTF 8 CHARACTERS
FILE_FORMAT = (TYPE = 'CSV', RECORD_DELIMITER = '\n', FIELD_DELIMITER = ',', SKIP_HEADER = 1,FIELD_OPTIONALLY_ENCLOSED_BY = '"',TRIM_SPACE = TRUE,REPLACE_INVALID_CHARACTERS = TRUE)
ON_ERROR = CONTINUE
--COPY A FILE INTO A TABLE EVEN IF IT HAS ALREADY BEEN LOADED INTO THE TABLE
FORCE = TRUE

我的错误信息:

Found character 'P' instead of field delimiter ','

我已经尝试过:

我尝试了很多东西,最值得注意的是:

  • 我试图在我的职位名称选择语句中转义双引号。
  • 我尝试删除 FIELD_OPTIONALLY_ENCLOSED_BY = '"' 参数,只使用 ESCAPE = '"' 没有成功。

【问题讨论】:

  • 你想在你的决赛桌有“P-Boss or P-Boss”吗?
  • P-Boss 是理想的选择,我的主要目标是让字段正确解析到正确的列中。

标签: snowflake-cloud-data-platform


【解决方案1】:

尝试删除选项 FIELD_OPTIONALLY_ENCLOSED_BY = '"' 并在您的内部查询中包含替换功能。

例子:

  SELECT 
     $1::NUMBER AS ID,
     $2 AS FULL_NAME, 
     replace($3,'"','') AS JOB_TITLE,
     $5 AS EMAIL_ADDRESS
  FROM @STAGE_NAME

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 1970-01-01
    • 2018-03-20
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2020-03-07
    • 2013-05-31
    相关资源
    最近更新 更多