字段映射界面无法显示所有列怎么处理?
问题描述
在使用CDM从HBase/CloudTable导出数据时,在字段映射界面HBase/CloudTable表的字段偶尔显示不全,无法与目的端字段一一匹配,造成导入到目的端的数据不完整。
原因分析
由于HBase/CloudTable无Schema,每条数据的列数不固定,在字段映射界面CDM通过获取样值的方式有较大概率无法获得所有列,此时作业执行完后会造成目的端的数据不全。
- 在CDM的字段映射界面增加字段。
- 在CDM的作业管理界面直接编辑作业的JSON(修改“fromJobConfig.columns”、“toJobConfig.columnList”这2个参数)。
- 导出作业的JSON文件到本地,在本地手动修改JSON文件中的参数后(原理同2相同),再导回CDM。
推荐使用方法1,下面以HBase导到DWS为例进行说明。
解决方法一:CDM的字段映射界面增加字段
- 获取源端HBase待迁移的表中所有的字段,列族与列之间用“:”分隔,例如:
rowkey:rowkey g:DAY_COUNT g:CATEGORY_ID g:CATEGORY_NAME g:FIND_TIME g:UPLOAD_PEOPLE g:ID g:INFOMATION_ID g:TITLE g:COORDINATE_X g:COORDINATE_Y g:COORDINATE_Z g:CONTENT g:IMAGES g:STATE
- 在CDM的作业管理界面,找到HBase导出数据到DWS的作业,单击作业后面的“编辑”,进入字段映射界面,如图1所示。
- 单击添加字段,在弹出框中选择“添加新字段”,如图2所示。
- 添加完字段后,新增的字段在界面不显示样值,这个不影响字段值的传输,CDM会将字段值直接写入目的端。
- 这里“添加新字段”的功能,要求源端数据源为:MongoDB、HBase、关系型数据库或Redis,其中Redis必须为Hash数据格式。
- 全部字段添加完之后,检查源端和目的端的字段映射关系是否正确,如果不正确可以拖拽字段调整字段位置。
- 单击“下一步”后保存作业。
解决方法二:修改JSON文件
- 获取源端HBase待迁移的表中所有的字段,列族与列之间用“:”分隔,例如:
rowkey:rowkey g:DAY_COUNT g:CATEGORY_ID g:CATEGORY_NAME g:FIND_TIME g:UPLOAD_PEOPLE g:ID g:INFOMATION_ID g:TITLE g:COORDINATE_X g:COORDINATE_Y g:COORDINATE_Z g:CONTENT g:IMAGES g:STATE
- 在DWS目的表中,获取与HBase表对应的字段。
- 在CDM的作业管理界面,找到HBase到DWS的作业,选择作业后面的 。
- 在CDM界面编辑作业的JSON文件。
- 修改源端的“fromJobConfig.columns”参数,配置为1获取的HBase的字段,列号之间使用“&”分隔,列族与列之间用“:”分隔,如下:
"from-config-values": { "configs": [ { "inputs": [ { "name": "fromJobConfig.table", "value": "HBase" }, { "name": "fromJobConfig.columns", "value": "rowkey:rowkey&g:DAY_COUNT&g:CATEGORY_ID&g:CATEGORY_NAME&g:FIND_TIME&g:UPLOAD_PEOPLE&g:ID&g:INFOMATION_ID&g:TITLE&g:COORDINATE_X&g:COORDINATE_Y&g:COORDINATE_Z&g:CONTENT&g:IMAGES&g:STATE" }, { "name": "fromJobConfig.formats", "value": { "2": "yyyy-MM-dd", "undefined": "yyyy-MM-dd" } } ], "name": "fromJobConfig" } ] }
- 修改目的端的“toJobConfig.columnList”参数,配置为2中DWS的字段列表。
这里的顺序必须与HBase保持一致,才能保证正确的字段映射关系,字段名之间使用“&”分隔,如下:
"to-config-values": { "configs": [ { "inputs": [ { "name": "toJobConfig.schemaName", "value": "dbadmin" }, { "name": "toJobConfig.tablePreparation", "value": "DO_NOTHING" }, { "name": "toJobConfig.tableName", "value": "DWS " }, { "name": "toJobConfig.columnList", "value": "rowkey&day_count&category&category_name&find_time&upload_people&id&infomation_id&title&coordinate_x&coordinate_y&coordinate_z&content&images&state" }, { "name": "toJobConfig.shouldClearTable", "value": "true" } ], "name": "toJobConfig" } ] }
- 其他参数保持不变,单击“保存并运行”。
- 修改源端的“fromJobConfig.columns”参数,配置为1获取的HBase的字段,列号之间使用“&”分隔,列族与列之间用“:”分隔,如下:
- 作业完成后,查询DWS表中的数据是否和HBase中的数据匹配。如果不匹配,请检查JSON文件中HBase和DWS字段的顺序是否一致。