【大數據】Hbase如何批量刪除指定數據


一、起因:

  Hbase是一個列式存儲,nosql類型的數據庫,類似mongodb。

  目前似乎沒有提供批量刪除的方法,只有一個單行刪除的命令:deleteall 'tablename', rowkey

 

二、刪除方法:

  方法一:通過寫 shell 腳本,從 hbase shell 查出需要刪除的 rowkey ,拼成刪除命令(deleteall 'tablename', rowkey),寫到文本 del_temp.txt ;然后執行 hbase shell del_temp.txt 

  方法二:通過建映射表,比如在 hive 建一個映射表,然后寫 hql 查出需要刪除的 rowkey ,拼成刪除命令(deleteall 'tablename', rowkey),寫到文本 del_temp.txt ;然后執行 hbase shell del_temp.txt 

  方法三:通過python/ java 代碼,調用 hbase 的單行刪除方法,寫個循環刪除 

  方法四:通過建映射表,比如在 hive 建一個映射表,將 需要保留的數據 通過 hql 查詢出來,備份到 hive 的一張臨時表 ;然后 在hbase shell 里面 執行 truncate 'tablename' ,清空 hbase 的數據; 最后 在將數據 從 hive 的備份表 讀出來,插入 映射表,寫回 hbase;

  總結:

  前面3種方法,本質上都是在 hbase 中逐行刪除;而第4種方法,是利用hive的map reduce倒數據。對於不熟悉 hbase 和 java 語法的開發人員而言,使用24方法,是靈活性最好的。

 

三、代碼:

  假設hbase有一張表,表名:test_turboway,列族:cf,以第二種刪除方法為例:

  1、hive 建映射表:

CREATE EXTERNAL TABLE edw.test_turboway_hbase(
  `keyid` string COMMENT 'from deserializer',
  `title` string COMMENT 'from deserializer',
  `bizdate` string COMMENT 'from deserializer',
  `loginid` string COMMENT 'from deserializer')
ROW FORMAT SERDE
  'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY
  'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
  'hbase.columns.mapping'=':key,cf:title,cf:bizdate,cf:loginid',
  'serialization.format'='1')
TBLPROPERTIES (
  'COLUMN_STATS_ACCURATE'='false',
  'hbase.table.name'='test_turboway',
  'numFiles'='0',
  'numRows'='-1',
  'rawDataSize'='-1',
  'totalSize'='0',
  'transient_lastDdlTime'='1543297130')

  2、記錄hive查詢要刪除的數據,拼成命令:

hive -e "select concat('deleteall \'test_turboway\',\'',keyid,'\'') from edw.test_turboway_hbase where loginid = '20181122'" > del_temp.txt && echo 'exit' >> del_temp.txt

  3、hbase shell 執行刪除命令

hbase shell del_temp.txt > del.log

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM