【问题标题】:How to escape double quotes within a data when it is already enclosed by double quotes当数据已经被双引号括起来时,如何在数据中转义双引号
【发布时间】:2020-11-06 08:40:23
【问题描述】:

我有如下逗号分隔的 CSV 数据,必须使用复制命令将其导入雪花表。

"1","2","3","2"In stick"

由于我已经将参数 OPTIONALLY_ENCLOSED_BY = '"' 传递给复制命令,因此我无法转义数据 ("2"In stick") 中的 "(双引号)。

我想在表格中看到的导入数据如下所示

1,2,3,2"In stick

有人可以帮忙吗?谢谢!

【问题讨论】:

    标签: sql database snowflake-cloud-data-platform snowsql


    【解决方案1】:

    如果您使用的是 Windows,我有一个有趣的解决方案。在 MS Excel 中打开此 CSV 文件。 Excel 使用正确的双引号来以蜂窝格式显示数据,并将多余的部分留在单元格的中间(如果每个单元格都用逗号正确分隔)。然后选择“替换”并用其他东西替换双引号(如两个单引号或用任何内容替换以删除它们)。然后再次将其另存为 CSV。我认为其他电子表格程序也应该这样做。

    【讨论】:

    • 谢谢!但棘手的部分是我无法对输入数据进行任何更改。在将数据加载到表中时,我需要以某种方式解决这个问题。
    【解决方案2】:

    如果您在一个字段中有一个未转义的引号,该引号被不是真正有效的 CSV 引号包围。例如,这里是RFC4180 spec的摘录

    1. 如果使用双引号将字段括起来,则使用双引号 出现在字段中必须通过在其前面加上另一个双引号来进行转义。

    例如:

    "aaa","b""bb","ccc"
    

    我认为生成 CSV 文件的任何内容都不正确,需要先修复,然后才能将其加载到 Snowflake 中。我认为任何 file_format 选项都无法为您解决此问题,因为它不是有效的 CSV。

    CSV 行应如下所示:

    "1","2","3","2""In stick"
    

    或者这个:

    "1","2","3","2\"In stick"
    

    【讨论】:

    • Simon D 在这里提出了一个很好的观点。海报提供的示例数据不遵循 CSV/RFC4180 规范。不过,假设确实如此,我发现这个问题仍然有效。
    【解决方案3】:

    我也遇到了同样的问题,在写这个问题的时候,我找到了答案:

    Import RFC4180 files (CSV spec) into snowflake? (Unable to create file format that matches CSV RFC spec)

    基本上,设置:

    Name Value
    Column Separator Comma
    Row Separator New Line
    Header lines to skip {you have to decide what to put here}
    Field optionally enclosed by Double Quote
    Escape Character None
    Escape Unenclosed Field None

    这是我的 ALTER 声明:

    ALTER FILE FORMAT "DB_NAME"."SCHEMA_NAME"."CSV_SPEC3" SET COMPRESSION = 'NONE' FIELD_DELIMITER = ',' RECORD_DELIMITER = '\n' SKIP_HEADER = 1 FIELD_OPTIONALLY_ENCLOSED_BY = '\042' TRIM_SPACE = FALSE ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE ESCAPE = 'NONE' ESCAPE_UNENCLOSED_FIELD = 'NONE' DATE_FORMAT = 'AUTO' TIMESTAMP_FORMAT = 'AUTO' NULL_IF = ('\\N');
    

    正如我在答案中提到的,我不知道为什么上述方法有效,但它对我有用。去图吧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-19
      • 2013-06-17
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      相关资源
      最近更新 更多