Hadoop - Hive:删除超过指定天数的数据

Abi*_*san 6 hadoop hive bigdata

我正在研究一个使用Hadoop-hive进行数据分析的电信项目.有一天,我们将获得数百万条记录.在指定了几天之后,我们需要删除旧数据,因为我们没有存储容量.删除记录的最佳方法是什么?

附加信息:

那些配置单元表将具有一个具有填充日期的列.

Cha*_*guy 12

我认为你的用例非常适合在你的Hive表中使用"day"分区.如果"日"只是一个列,则很难维护和清洁您的桌子.

分区在Hive中的真正含义是每个"日期"都有一个目录

例如:

create table mytable (
   ...
) partitioned by (day string)
Run Code Online (Sandbox Code Playgroud)

因此,当您添加数据时,您将拥有HDFS中的以下结构:

/user/hive/warehouse/mytable/day=2013-01-10
/user/hive/warehouse/mytable/day=2013-01-11
...
Run Code Online (Sandbox Code Playgroud)

在每个分区中,您将获得当天的内容.

然后删除旧数据变得微不足道,例如,您可以拥有一个每天运行的cron作业并删除x天前的数据(例如使用该命令date --date '30 days ago' +\%Y-\%m-\%d)并简单地执行以下命令:

hadoop fs -rmr -skiptrash /user/hive/warehouse/mytable/day=`date --date '30 days ago' +\%Y-\%m-\%d`
Run Code Online (Sandbox Code Playgroud)

此时,如果show partitions mytable对分区执行了任何查询,您仍将在Hive表中拥有分区,而删除数据的分区将不返回任何内容.如果要真正删除Metastore中的分区,则必须使用以下命令:

ALTER TABLE mytable DROP PARTITION (day='xxxx-xx-xx');
Run Code Online (Sandbox Code Playgroud)

我已经成功使用了一个非常相似的模式一段时间,它运作良好.