gpt4 book ai didi

hadoop - Oozie工作流程:如何在表格中保留最近30天

转载 作者:行者123 更新时间:2023-12-02 21:31:46 26 4
gpt4 key购买 nike

我试图建立一个Hive表并通过oozie使其自动化。表中的数据不必早于最近30天。

工作流程中的操作将每天运行。它将首先清除30天之前的数据,然后插入今天的数据。间隔30天的滑动窗口。

有人可以举例说明如何实现这一目标吗?

最佳答案

Hive将数据存储在HDFS文件中,这些文件是不变

好吧,实际上,在最新的Hadoop版本中,HDFS文件可以附加到,甚至被截断,但是具有低级API,并且Hive没有通用的方式来为文本/ AVRO / Parquet / ORC /任何格式修改数据文件,因此出于实际目的,HDFS文件对于Hive是不可变的。

一种解决方法是使用事务ORC表,它们在每个“事务”上创建/重写整个数据文件-需要进行后台处理以定期压缩所产生的混乱(例如,将小文件重写为更大的文件的另一步骤)。

另一个解决方法是每当您想删除旧数据时对表进行临时批处理重写,例如每2周运行一次批处理,以删除30天之前的数据。

>简单设计

  • 确保在清除结束后没有INSERT或SELECT运行。
  • 用相同的结构和一个虚拟对象创建一个新的分区表
    分区列
  • 将所有要保留的数据复制到该虚拟分区
  • 运行EXCHANGE PARTITION命令
  • 删除分区表
  • 现在较旧的数据已消失,您可以继续INSERTs

  • >替代设计,允许在运行清除时插入
  • 使用虚拟分区键重建表,并确保
    所有INSERT总是进入“当前”分区
  • 清除时使用
  • ,将“当前”分区重命名为“to_be_purged”(并且
    确保在清除结束之前不运行任何SELECT,否则
    您可能会得到重复)
  • 将所有要保留的数据从“to_be_purged”复制到“当前”
  • 拖放分区“to_be_purged”
  • 现在较旧的数据不存在了

  • 但是会很简单,如果您的表是按月按ISO格式(即YYYY-MM)进行分区的。在那种情况下,您可以使用简单的bash脚本获取分区列表,并删除所有具有比(当前月份-1)“更旧”的键的分区。相信我,它简单而坚如磐石。

    关于hadoop - Oozie工作流程:如何在表格中保留最近30天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33923423/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com