背景
- 需要从hdfs将
以月为分区
的分区表
中的数据全量
推到mysql中 分区表的分区字段在hdfs上为目录形式,也就是说其实是假字段
- 我本来想的是把path直接配置成这种格式,datax会读取到分区目录,作为字段处理,毕竟我们直接从hive查询分区表,分区目录就是直接作为字段进行展示的。
"path": "/user/hive/warehouse/mytable01/*
- 28就是那个分区monthkey
"column": [
{"index":0 ,"type":"string"},
……
{"index":28,"type":"string"}
],
- mysqlwriter中也配置了column列信息
"column": [
"date_short",
….…
"monthkey"
],
结果
- 推送过去之后,发现分区字段monthkey为null
解决
- 我又新建了一张接口表,把分区字段作为真字段(即新表不是分区表),推送过去,字段不为null了
- 这个接口表本来就是需要的,因为除了第一次我们是全量推送,之后就是每天推送最近两个月的了,只不过处于开发阶段,我就省略了,结果发现了这个错误,datax对分区表的读取path必须指定到分区目录,才能读取到这个分区字段?还是说我的理解有误,有大神知道可以指导一下。
官网的按分区读取
- 按分区读取
- Hive在建表的时候,可以指定分区partition,例如创建分区partition(day=“20150820”,hour=“09”),对应的hdfs文件系统中,相应的表的目录下则会多出/20150820和/09两个目录,且/20150820是/09的父目录。了解了分区都会列成相应的目录结构,在按照某个分区读取某个表所有数据时,则只需配置好json中path的值即可。
- 比如需要读取表名叫mytable01下分区day为20150820这一天的所有数据,则配置如下:
"path": "/user/hive/warehouse/mytable01/20150820/*"
参考文档:https://github.com/alibaba/DataX/blob/master/hdfsreader/doc/hdfsreader.md