【问题标题】:Hadoop - Hive : Delete data which is older than specified no of daysHadoop - Hive:删除早于指定天数的数据
【发布时间】:2012-12-25 18:37:25
【问题描述】:

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

附加信息:

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

【问题讨论】:

    标签: hadoop hive bigdata


    【解决方案1】:

    我认为您的用例非常适合在 Hive 表中使用“日”分区。如果“天”只是一列,那么维护和清理表格将变得很困难。

    分区在 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,您的 Hive 表中仍会保留您的分区,但对您删除数据的分区的任何查询都不会返回任何内容。如果要真正删除 Metastore 中的分区,则必须使用以下命令:

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

    一段时间以来,我一直在成功使用非常相似的模式,并且效果很好。

    【讨论】:

      猜你喜欢
      • 2015-02-17
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 2020-05-22
      • 2020-03-11
      相关资源
      最近更新 更多