amazon-s3 - 转义 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)中添加替换公式,以添加 \ 并正确读取值。是否有我们应该查找并添加 \ 的字符列表?
解决方案
问题是,根据标准,如果您的 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
推荐阅读
- mongodb - 将 Mongo 版本 3.6 降级到 2.x
- javascript - Reactjs 应用程序 - 无法使用 axios 获取数据
- redirect - 如何在 BTEQ 中为 teradata 获取错误消息
- php - 网站重定向到 index.php 没有 www
- javascript - 使用 javascript 插入 HTML 表单
- java - 我的 java tf-idf 程序没有读取它应该读取的文件
- regex - c# (Xamarin) 中的正则表达式货币格式
- javascript - 如何在jquery中使多个项目滑块无限重复
- templates - Groovy TemplateEngines 给出“不允许使用新 groovy.text.SimpleTemplateEngine 错误的脚本错误”
- c# - 如何通过比较另一个表来显示剩余数据