背景是华为大数据平台mrs,这里运用到HDFS、Hive、HBase;数据通过接口接入到hbase,用hive创建hbase外部表。需求是某段时间数据有问题,需要删掉重新补入。
1 delete命令:删除某列数据
在HBase中,可以使用delete命令来将一个单元格的数据删除。
语法格式如下:delete '表名', 'rowkey', '列蔟:列'
2 deleteall命令:删除整行数据
deleteall命令可以将指定rowkey对应的所有列全部删除。
语法格式如下:deleteall '表名','rowkey'
3 truncate命令:清空表
truncate命令用来清空某个表中的所有数据。
语法:truncate "表名"
方法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
# 将结果导出HDFS
insert 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;
方法1:使用hbase scan命令,整个流程封装到一个shell脚本中(我的数据rowkey中有中文和空格,所以最后执行结果只删掉了部分数据,并没有把想要的数据全删掉)
#!/bin/bash
touch /home/data/record.txt
touch /home/data/delete.sh
# #######第一步:通过时间戳找到要删除的数据
# 注:这里只有rowkey和其中一列,因为目的是找到rowkey
echo "scan 'tablename',{ COLUMNS => 'f1:times',FILTER => "ValueFilter( >=, 'binary:2023-01-01')", FORMATTER => 'toString'}" | hbase shell > /home/data/record.txt
# #######第二步:构建删除数据的shell
echo "#!/bin/bash " >> /home/data/delete.sh
echo "exec hbase shell < >> /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
# #######第三步:执行删除shell
sh /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数据导出的几种方式