由于从kafka消费过来写入hbase的数据量有点大,导致关联的外部hive表使用性能有点差,因此决定把已经导入hive的dwd层后的数据进行删除,删除脚本如下:
del_date=$1
filename=$(pwd)/rowkey.csv
beeline --incremental=true --showHeader=false --outputformat=dsv --delimiterForDSV=$'\t' -e "select concat('deleteall \'default:monitorData\',\'',row_key,'\'') from dw_ods.ods_api_msp_plan_point where row_key like '%${del_date}'">${filename}
sed -i '$d' ${filename}
hbase shell ${filename} > del.log
脚本可能不是很好看,这里截图展示一下:
以上脚本删除的逻辑是首先通过外部关联表查询出需要删除的rowkey,由于这个表的rowkey后缀是日期,因此通过模糊日期查询出需要删除的rowkey写入一个文件,由于写入文件后最后一行是无关的信息,因此这里需要用sed命令进行删除。
脚本编辑好后,写入del_hbase.sh文件,最后执行sh del_hbase.sh yyyyMMdd进行删除指定日期的数据。