DataStage写入Hive时字符串NULL转空串,其他类型正常,求解决方案
解决DataStage写入Hive时字符串NULL被转为空串的问题
方案1:修改Hive临时表的SERDE属性(无需修改DataStage作业)
由于现有DataStage作业无法调整,可通过配置Hive临时分隔文本表的SERDE参数,让Hive将DataStage输出的空串识别为真正的NULL:
- 创建临时表时添加SERDE属性(替换对应字段和分隔符):
配置后Hive读取临时表时,会把DataStage输出的空串解析为CREATE EXTERNAL TABLE temp_table ( string_col STRING, decimal_col DECIMAL(5,0) ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' -- 匹配DataStage使用的字段分隔符 WITH SERDEPROPERTIES ( 'serialization.null.format' = '' ) LOCATION '/path/to/temp/storage';NULL,后续CDC流程写入ORC表时即可保留该NULL值。
方案2:在通用CDC流程中添加字段转换(一次性修改通用流程)
如果通用CDC流程允许修改,可在插入ORC表的SQL中对字符串字段做转换,批量解决问题:
- 调整插入语句,将空串替换为
NULL:
该方式只需修改一次通用CDC逻辑,即可覆盖所有依赖该流程的作业,无需逐个调整DataStage作业。INSERT INTO orc_table PARTITION (dt) SELECT CASE WHEN string_col = '' THEN NULL ELSE string_col END AS string_col, decimal_col, dt FROM temp_table;
方案3:调整DataStage连接器配置(仅适用于可修改的作业,作补充参考)
若部分作业允许修改,可将HDFS File Connector的Null Value设为\N,同时配合临时表的SERDE配置:
- DataStage端设置
Null Value为\N - 临时表SERDE配置补充:
WITH SERDEPROPERTIES ( 'serialization.null.format' = '\N' )
内容的提问来源于stack exchange,提问作者Richard Hansell
相关产品推荐
相关产品推荐

