一、问题背景
之前分析hdfswriter时,看到过api支持map,list,set类型的数据写入,因此,想将其合入到datax里,使得源数据端有类似json,array等这种数据可以直接导入到hive中。
二. 环境准备
Datax版本:3.0
Hadoop版本:2.7.3
Hive版本:2.3.2
三. 源码
hdfs写入时,最重要的是获取字段对应类型的ObjectInspector,因此直接从ObjectInspectorFactory类入手看:
ObjectInspectorFactory:
private static ObjectInspector getReflectionObjectInspectorNoCache(Type t, ObjectInspectorFactory.ObjectInspectorOptions options) {
...
if (t instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType)t;
if (List.class.isAssignableFrom((Class)pt.getRawType()) || Set.class.isAssignableFrom((Class)pt.getRawType())) {
return getStandardListObjectInspector(getReflectionObjectInspector(pt.getActualTypeArguments()[0], options));
}
if (Map.class.isAssignableFrom((Class)pt.getRawType())) {
return getStandardMapObjectInspector(getRefle

本文介绍了如何将DataX升级到3.0版本,并针对Hadoop 2.7.3和Hive 2.3.2环境,实现对HDFS写入Map类型数据的支持。通过改造HdfsWriter,新增对Map数据类型的处理,包括在SupportHiveDataType中添加MAP类型,修改HdfsHelper以处理Map数据。测试结果显示,Map数据能成功写入Hive的Map字段,对于Text格式的数据,需要额外处理并指定字段分隔符。最后提供了测试案例及代码地址。
最低0.47元/天 解锁文章
8086

被折叠的 条评论
为什么被折叠?



