背景是华为大数据平台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数据导出的几种方式
版权归原作者 怎么不吃祥 所有, 如有侵权,请联系我们删除。