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

Hadoop Oozie工作流:如何在表格中保留最近30天,hadoop,oozie,Hadoop,Oozie,我正试图建立一个蜂巢表,并通过oozie实现自动化。表中的数据不必早于过去30天 工作流程中的操作将每天运行。它将首先清除30天以前的数据,然后插入今天的数据。滑动窗口,间隔30天 有人能举例说明如何实现这一点吗?正如用户ashtonium在中所回答的,hive版本0.14提供了ACID支持。因此,创建.hql脚本并使用简单的DELETE+where条件,当前日期使用unix\u时间戳和INSERT。插入应该以批量方式使用,而不是以OLTP方式使用。配置单元将数据存储在HDFS文件中,并且这些文

我正试图建立一个蜂巢表,并通过oozie实现自动化。表中的数据不必早于过去30天

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


有人能举例说明如何实现这一点吗?

正如用户ashtonium在中所回答的,hive版本0.14提供了ACID支持。因此,创建.hql脚本并使用简单的DELETE+where条件,当前日期使用unix\u时间戳和INSERT。插入应该以批量方式使用,而不是以OLTP方式使用。

配置单元将数据存储在HDFS文件中,并且这些文件是不可变的

实际上,在最近的Hadoop版本中,HDFS文件可以被附加到,甚至被截断,但是使用了一个低级API,并且Hive没有通用的方法来修改text/AVRO/Parquet/ORC/任何格式的数据文件,所以在实际应用中,HDFS文件对于Hive是不可变的

一种解决方法是使用事务性ORC表,在每个事务上创建/重写整个数据文件-需要后台进程定期压缩产生的混乱,例如,将小文件重写为较大文件的另一个步骤

另一种解决方法是,每当您想要删除较旧数据时,对表进行临时批量重写—例如,每两周运行一次删除30天以上数据的批处理

>简单设计

确保在清除结束之前不会运行INSERT或SELECT 创建一个具有相同结构的新分区表和一个虚拟表 分区列 复制所有数据以保留到该虚拟分区 运行命令 删除分区表 现在,旧数据已消失,您可以继续插入 >替代设计,允许在清除运行时插入

使用虚拟分区键重建表,并确保 所有插入总是进入当前分区 在清除时,将当前分区重命名为要清除的分区,然后 确保在清除结束之前运行no SELECT,否则 你可能会得到副本 将要保留的所有数据从复制到清除到当前 删除要清除的分区 现在旧的数据不见了
但是,如果您的表是按月份分区的,则会简单得多,采用ISO格式,即YYYY-MM。在这种情况下,您可以只获取分区列表,并使用一个简单的bash脚本删除所有键早于当前月份1的分区。相信我,它很简单而且坚如磐石。

Table是hadoop上的一个数据表,由hive query创建。它从另外两个表中提取数据。我终于想出了一个解决方案,在插入之前运行清除脚本。清除删除日期小于30天的分区,然后插入为当前日期添加分区。