Vertica COPY语句NULL参数如何匹配带尾随空格的[NULL]空值
Vertica 带尾随空格的[NULL]字段导入解决方案
核心问题答复
Vertica 的 COPY 语句 NULL 参数仅支持固定字符串匹配,不支持正则表达式或通配符规则,无法直接通过该参数匹配带尾随空格的 [NULL] 标记。
无需导入后批量更新的可行方案
方案1:使用
FILLER字段做实时转换(兼容性最好)
先将原始字段读取为临时填充变量,去除首尾空格后判断是否为[NULL],再转换为目标类型写入正式字段,示例语法如下:COPY 目标表名 ( col1_filler VARCHAR FILLER, col1 AS CASE WHEN TRIM(col1_filler) = '[NULL]' THEN NULL ELSE col1_filler::INT END, col2_filler VARCHAR FILLER, col2 AS CASE WHEN TRIM(col2_filler) = '[NULL]' THEN NULL ELSE col2_filler END, col3_filler VARCHAR FILLER, col3 AS CASE WHEN TRIM(col3_filler) = '[NULL]' THEN NULL ELSE col3_filler::DATE END ) FROM '/data/源文件路径.txt' DELIMITER '|' REJECTED DATA '/data/reject.log' EXCEPTIONS '/data/exception.log';该方案全程在Vertica侧执行,不需要修改源文件,性能损耗极低,且支持对单个字段做定制化规则。
方案2:全局开启字段TRIM(最简单)
如果业务允许所有导入字段自动去除首尾空格,直接在COPY语句中添加TRIM参数,配合NULL AS '[NULL]'即可直接匹配到去空格后的空值标记:COPY 目标表名 FROM '/data/源文件路径.txt' DELIMITER '|' TRIM NULL AS '[NULL]' REJECTED DATA '/data/reject.log' EXCEPTIONS '/data/exception.log';方案3:预处理源文件统一空值标记
导入前用shell命令批量替换所有带尾随空格的[NULL]为标准格式,示例sed命令:sed -E 's/\[NULL\][[:space:]]*/\[NULL\]/g' 原始文件.txt > 格式化后文件.txt处理完成后直接用标准的
NULL AS '[NULL]'语法导入即可,适合有统一ETL预处理链路的场景。
内容的提问来源于stack exchange,提问作者JoshN
相关产品推荐
相关产品推荐

