繁体   English   中英

哪个字符最好用作ETL的分隔符?

[英]Which is the best character to use as a delimiter for ETL?

我最近从Informix数据库中卸载了一个客户表,并且拒绝了几行,因为客户名列包含非转义的竖线(竖线符号)字符,这是源数据库中的默认DBDELIMITER。 我发现他们的客户表单中的字段有一个输入掩码,允许输入任何字母数字字符,其中可以包括任何字母,数字或符号。 因此,我说服用户对该列进行全面更新,以将管道符号更改为分号。 我还发现其他列中包含星号和逗号的其他行。 我可以想象如果以csv格式卸载此表会发生什么,或者星号可能造成的损坏!

定义为定界符的最佳字符是什么? 如果表已经被管道,逗号,星号,制表符,反斜杠等污染,那么清理它们的最佳方法是什么?

我必须在工作中处理大量叙事数据。 这始终是一场噩梦,因为用户易于在其中放置任何字符,包括无法打印的字符。 您可以运行清理操作,但是每次加载数据时都必须执行清理操作,并且它可能不会永远起作用。 最终,有人会把您选择的每个字符都放在分隔符中,如果您的CSV处理库可以正确处理转义,但是很多则不能,这不是问题。 如果这是一次加载/卸载,则可能很好,但是如果您必须更频繁地执行此操作。

过去,我已将分隔符更改为反斜线“`”,波浪号“〜”或插入符号“ ^”。 在当前的努力中,所有尝试都失败了。 我能想到的最好的解决方案是根本不使用CSV格式。 我切换到XML。 即使这样,仍然存在XML非法字符,但是可以使用atlassian-xml-cleaner-0.1.jar将其翻译出来。

使用默认管道卸载客户表; 字符串搜索不存在的字符。 即。 “〜”

卸载到文件定界符“〜”,然后从客户处选择*;

清理文件(或不清理)(vi替换字符串):g / theoldstring / s // thenewstring / g)或(unix提示符)sed's / old-char / new-char / g'fileold> filenew

(一旦干净的id亲自将卸载文件中的“〜”改回csv标准的“ |”或“,”),加载到源数据库。

如果可以,请使用多字符定界符。 它仍然可以失败,但是可能性要小得多。

或者,在编写导出文件时转义分隔符(Informix文档说“ LOAD TABLE”通过在反斜杠字符前加上反斜杠前缀来转义)。 正确的CSV带有引号和转义符,因此数据中是否包含逗号并不重要,除非您的导出程序和加载程序无法处理正确的CSV。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM