整个系统架构里,有两个地方可以存储数据,一个是Kudu,另一个是HDFS。而Kudu存储的数据大多是即时查询系统数据和经过业务处理分析后的APP层、DWS层数据。实时数据当不在有变更时,就可以刷到HDFS上;APP层等这些数据随着时间的推移,也是逐渐变成冷数据。那么等变冷的数据,就需要迁移到HDFS上。而数据迁移后将面临查询数据不完整性、如何实现数据的平滑迁移,又不影响查询其完整性呢?
一部分数据在Kudu,一部分数据在HDFS,解决查询的完整性,主要通过View实现。
每天把Kudu里的冷数据迁移到HDFS上,如何识别哪些是冷数据,由业务提供,根据业务情况,业务侧自行为每个表提供一个冷热数据的时间周期。当超过时间周期的数据将被程序迁移进HDFS。每次迁移完成后都需要创建或修改View。不然数据就查不到了。View需要定义好Kudu和HDFS上的查询时间范围。如:
create view tb_uhome_acct_item_view as SELECT COMMUNITY_ID,STAGE_ID,NAME,UNIT,HOUSE_NAME,BILL_AREA,PAY_USERID,BILLING_CYCLE,FEE_ITEM_TYPE_ID,RULE_NAME,RES_INST_NAME,HOUSE_STATUS_TYPE,HOUSE_STATUS,REAL_CYCLE,CONCAT( BILL_DATE_START, BILL_DATE_END ),LEASE_POSITION,OBJ_CODE FROM tb_uhome_acct_item WHERE create_date >= "2015-01-01" UNION ALL SELECT COMMUNITY_ID,STAGE_ID,NAME,UNIT,HOUSE_NAME,BILL_AREA,PAY_USERID,BILLING_CYCLE,FEE_ITEM_TYPE_ID,RULE_NAME,RES_INST_NAME,HOUSE_STATUS_TYPE,HOUSE_STATUS,REAL_CYCLE,CONCAT( BILL_DATE_START, BILL_DATE_END ),LEASE_POSITION,OBJ_CODE FROM tb_uhome_acct_item_hdfs WHERE create_date < "2015-01-01"