Oracle外部表指定含换行的多字符记录分隔符不生效如何解决
可以使用" + , + \n + "作为记录分隔符,配置不生效通常是换行符格式不匹配、转义解析异常导致的,可按以下方案处理:
- 先确认CSV文件的实际换行格式
多数Windows平台导出的CSV换行符为\r\n(回车+换行)而非Unix格式的\n,如果是这类文件,直接写",\n"无法匹配到实际分隔符,需调整为",\r\n"。 - 优先使用十六进制格式指定分隔符(兼容性最高)
避免Oracle对字符串中转义字符的解析异常,直接用分隔符对应的十六进制编码声明:- 对应Unix换行(
\n)的分隔符写法:RECORDS DELIMITED BY X'222C0A22'(22是双引号的十六进制编码、2C是逗号的十六进制编码、0A是换行符\n的十六进制编码) - 对应Windows换行(
\r\n)的分隔符写法:RECORDS DELIMITED BY X'222C0D0A22'(额外增加0D对应回车符\r)
- 对应Unix换行(
- 完整配置示例(Unix换行CSV适用)
ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY "IMPORT_TEST" ACCESS PARAMETERS ( RECORDS DELIMITED BY X'222C0A22' BADFILE SNOW_IMPORT_TEST:'TEST_1.bad' LOGFILE SNOW_IMPORT_TEST:'TEST_1.log' SKIP 1 FIELDS TERMINATED BY '","' MISSING FIELD VALUES ARE NULL TRIM ENCLOSING_AND_QUOTES ) LOCATION ( "IMPORT_TEST":'TEST_1.csv' ) )
可选参数TRIM ENCLOSING_AND_QUOTES可自动去掉字段两端的双引号,减少后续数据清洗工作量。
内容的提问来源于stack exchange,提问作者Mario Douh
相关产品推荐
相关产品推荐

