hive:删除超过指定天数的数据

jaxagkaj  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(494)

我正在从事一个电信项目,它使用hadoop-hive进行数据分析。有一天,我们会得到数百万张唱片。在指定的天数之后,我们需要删除旧数据,因为我们没有存储容量。删除记录的最佳方法是什么?
其他信息:
这些配置单元表将有一个包含填充日期的列。

uz75evzq

uz75evzq1#

我认为您的用例非常适合在您的hive表中使用“day”分区。如果“日”只是一栏,那么你的table就很难保养和清洁了。
分区在hive中的真正含义是,您将为每个“天”拥有一个目录
例如:

create table mytable (
   ...
) partitioned by (day string)

因此,当您添加数据时,例如,hdfs中会有以下结构:

/user/hive/warehouse/mytable/day=2013-01-10
/user/hive/warehouse/mytable/day=2013-01-11
...

在每个分区中,你都会有当天的内容。
然后删除旧数据变得很简单,例如,您可以有一个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`

此时,如果执行 show partitions mytable 但是对删除数据的分区的任何查询都不会返回任何结果。如果要真正删除元存储中的分区,必须使用以下命令:

ALTER TABLE mytable DROP PARTITION (day='xxxx-xx-xx');

我已经成功地使用了一个非常相似的模式一段时间了,而且效果很好。

相关问题