Impala创建的Kudu表主键数据修改迁移方法探索

最近在生产环境遇到一件棘手的事情,需要将impala中创建的kudu内部表中的某些字段做修改,众所周知,kudu表的主键可以由很多列组成,但是kudu组成主键的列在写入之后就不可修改了,碰到这种必须要修改的情况,唯一的办法就是通过数据导出再写入的方法进行迁移。

第一种方案:导出需要修改的记录,然后写程序一条条读取修改之后再通过kuduAPI写入原表。这样做的好处是不容易出错,而且全程可控,通过良好的日志设计可以记录写入失败的条目,将数据丢失的风险降到最低。缺点是需要开发时间,并且效率较低,整个过程存在数据导出到磁盘,再从磁盘写入JVM进行处理再写入的过程,稍显繁琐。

第二种方案:利用impala,直接在impala中写SQL,利用Replace的方法,将查询出来的记录修改之后再写回原表。这是最直接的处理方法,操作简单,而且通过impala执行kudu执行效率极高,涉及的sql语句:

CREATE EXTERNAL TABLE cjjtest_IMPALA(key string,s0 string,s1 string,s10 string)   STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ('hbase.columns.mapping'=':key,cf:s0,cf:s1,cf:s10') tblproperties ("hbase.table.name" = "cjjtest");

CREATE view if not exists cjjtest_IMPALA_view as SELECT CONCTNS.rowkey[0] as name ,CONCTNS.rowkey[1] as date ,s0,s1,s10 FROM (SELECT split(key,'-') as rowkey,s0,s1,s10 from cjjtest_IMPALA) CONCTNS;

CREATE EXTERNAL TABLE cjjtest_IMPALA_SPLIT(key string,s0 string,s1 string,s10 string) ROW FORMAT DELIMITED COLLECTION ITEMS TERMINATED BY '-' STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ('hbase.columns.mapping'=':key.subString(0,),cf:s0,cf:s1,cf:s10') tblproperties ("hbase.table.name" = "cjjtest");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值