首页 > 解决方案 > 转义 Presto 中的所有特殊字符

问题描述

将数据(CSV)上传到S3,然后上传到 Presto。但是由于文件中的数据存在问题,我们在从 S3 上传到 Presto 时遇到了问题。元数据格式正确,但由于B 列中的问题,它们失败了。

A;B;日期

EPA;Ørsted 能源销售与分销;2019-01-11 12:10:13

EPA;De MARIA GærfaPepeer A/S;2019-02-12 12:10:13

EPA;扫描转换 A/S;2019-02-11 11:10:12

EPA;***兆;2019-02-11 11:10:13

EPA;sAYSlö-SähAAdkö Oy; 2019-02-11 11:11:11

我们在上一步(Informatica Cloud)中添加替换公式,以添加 \ 并正确读取值。是否有我们应该查找并添加 \ 的字符列表?

文本不清晰时的数据

标签: amazon-s3utf-8presto

解决方案


问题是,根据标准,如果您的 B 列可以包含分隔符,那么您应该在该列上添加引号。如果里面有引号(99% 可能发生什么),那么您应该在之前添加转义字符。

A;B;DATE
EPA;"company";01/01/2000
EPA;"Super \"company\""; 01/01/2000 
EPA,"\"dadad\" \;"; 01/01/2000

我有类似的问题,用正则表达式很容易解决:

在您的场景中,您可以搜索:

(^EPA;)并将其替换为:$1" ==>s/(^EPA;)/$1"/g

(;[0-9]{1,2}/[0-9]{1,2})并将其替换为:"$1 ==>s/\s*(;[0-9]{1,2}/[0-9]{1,2})/"$1/g

最后一步将是全局反斜杠浓缩:

s/([^;"]|;")(")([^;\n])/$1\\$2$3/g

请看一下: https ://fullouterjoin.wordpress.com/2019/04/05/dealing-with-broken-csv-strings-with-missing-escape-characters-powercenter/


推荐阅读