怎样批量删除phoenix数据

当Phoenix数据量巨大时,直接删除会引发错误。本文介绍了如何通过编写SQL拼接主键,生成删除脚本来安全删除数据。操作步骤包括确认HBase表主键和Hive映射表,开发删除脚本,以及使用sed命令处理脚本执行删除。

问题:当phoenix 数据数据很大(5年以上数据),删除phoenix数据时,不添加主键delete 语句会报错(delete 会触发hbase合并文件),下面介绍一种方法实现phoenix 大表数据删除

思路:编写sql 拼接phoenix表主键,生成delete 语句

ps:

  1. phoenix数据 hive表中需要存在一份
  2. 当phoenix表比较少,直接执行delete语句即可

操作步骤

1. 确认hbase表主键和同步的hive表

hbase表:apex.his_jy_zqye ,主键 khh、rq、gtlb、jys、zqdm、gdh 

hive映射表:adp_dm.ids_his_jy_zqye_impala_hb  确认 rq 是要删除的日期 

hive-hbase配置表
案例数据

ps:  5年以上的数据,只写 delete from apex.his_jy_zqye  where rq =  '20231225' 会报错,拼接成带有主键的删除语句即可 delete from apex.his_jy_zqye  where rq =  '20231225' and khh = '12345678' and zqdm = '000001' 

2. 开发删除脚本

select  concat ("delete from apex.his_jy_zqye  where khh ='",khh,"' and rq = '20231225' and zqdm = '",zqdm, "' ;") as del_sql from adp_dm.adp_dm.ids_his_jy_zqye_impala_hb where  rq = 20231225 ;

使用impala-shell 命令把文件导出为本地 csv文件

impala-shell -q "SELECT * FROM your_table;" > output.csv

sed命令删除多余内容

如:sed -i 's/|//g' output.csv

3. 检查生成的脚本,执行删除语句   


知识补充

sed 命令

1、要使用 sed 将字符串中的 | 符号替换为空(即删除它),你可以使用以下命令:

echo "your|string|here" | sed 's/|//g'
#结果:yourstringhere

解释:

  • s: 表示替换操作。
  • |: 是正则表达式中的特殊字符,表示“或”。为了在正则表达式中使用普通的 | 符号,我们需要对它进行转义,即使用 \|
  • //: 表示替换为的字符串,这里我们用空字符串表示删除。
  • g: 表示全局替换,即替换每一行中的所有匹配项。

2、要在 shell 脚本中删除空行,您可以使用 sed 命令。以下是一个示例:

sed -i '/^$/d' input.sh 

解释一下这个命令的各个部分:

  • sed 是一个流编辑器,用于对输入流(文件或管道)进行基本的文本转换。

  • '/^$/d' 是一个 sed 命令,其中:

    • /^$/ 是一个正则表达式,匹配空行。
    • d 表示删除匹配的行。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值