0


【hbase】按时间段批量删除hbase数据

背景是华为大数据平台mrs,这里运用到HDFS、Hive、HBase;数据通过接口接入到hbase,用hive创建hbase外部表。需求是某段时间数据有问题,需要删掉重新补入。

HBase删除操作

1delete命令:删除某列数据
在HBase中,可以使用delete命令来将一个单元格的数据删除。
语法格式如下:delete'表名','rowkey','列蔟:列'2 deleteall命令:删除整行数据
deleteall命令可以将指定rowkey对应的所有列全部删除。
语法格式如下:deleteall '表名','rowkey'3truncate命令:清空表
truncate命令用来清空某个表中的所有数据。
语法:truncate"表名"

1、获取rowkey

方法1:通过hbase命令scan,

TIMERANGE

这个是通过数据的插入时间进行过滤

scan 'tablename',{ COLUMNS=>'f1:times',TIMERANGE =>[1672502400000,1676304000000],LIMIT=>1, FORMATTER =>'toString'}

--LIMIT => 1:查看1条数据--FORMATTER => 'toString':转换数据里的中文

方法2:通过hbase命令scan,

ValueFilter

这个是通过数据的值进行过滤

scan 'tablename',{ COLUMNS=>'f1:times',FILTER =>"ValueFilter( >=, 'binary:2023-01-01')",LIMIT=>1, FORMATTER =>'toString'}

方法3:通过hive命令直接过滤查询出rowkey(最简单,前提是在hive创建了hbase外部表)

# 进入beeline,(华为mrs只能使用beeline,hive不可用)
beeline -u jdbc:hive2://hadoop1:10000/default# 将结果导出HDFSinsert overwrite directory '/home/data/'select rowkey from hive_table;# 数据下载到服务器本地
hadoop fs -get /home/data/000000_0 /tmp/date_20230214.txt

---------------------------------------------------------------------# 直接将结果导出到本地,使用关键字local(这个方法在mrs没成功)insert overwrite local directory '/home/data/'select rowkey from hive_table;

2、把rowkey拼接成hbase删除语句

方法1:使用hbase scan命令,整个流程封装到一个shell脚本中(我的数据rowkey中有中文和空格,所以最后执行结果只删掉了部分数据,并没有把想要的数据全删掉)

#!/bin/bashtouch /home/data/record.txt
touch /home/data/delete.sh

# #######第一步:通过时间戳找到要删除的数据# 注:这里只有rowkey和其中一列,因为目的是找到rowkeyecho"scan 'tablename',{ COLUMNS => 'f1:times',FILTER => "ValueFilter(>=, 'binary:2023-01-01')", FORMATTER => 'toString'}"| hbase shell > /home/data/record.txt
# #######第二步:构建删除数据的shellecho"#!/bin/bash ">> /home/data/delete.sh
echo"exec hbase shell <<EOF ">> /home/data/delete.sh
cat /home/data/record.txt |awk'{print "deleteall '\'$tablename\''", ",", "'\''"$1"'\''"}'tName="$tablename">> /home/data/delete.sh
echo"EOF ">> /home/data/delete.sh
# #######第三步:执行删除shellsh /home/data/delete.sh

方法2:使用hive命令可以直接拼接成hbase语句,但要把查询出来的结果中tablename和rowkey的

替换成

select'deleteall "tablename ,"'||rowkey ||'"'from hive_table where times >='2023-01-01';

使用hbase命令执行文件

hbase shell /tmp/date_20230214.txt

————————————————

相关资源:
Hbase删除指定时间段插入的数据 beeline 将查询的数据导出来_Hive数据导出的几种方式

标签: hbase hadoop 大数据

本文转载自: https://blog.csdn.net/weixin_43990455/article/details/129056594
版权归原作者 怎么不吃祥 所有, 如有侵权,请联系我们删除。

“【hbase】按时间段批量删除hbase数据”的评论:

还没有评论