Hive - 如何在Hive中跟踪和更新增量表中的上次修改日期?

时间:2015-01-08 00:21:26

标签: date hadoop hive bigdata timedelta

我有一个用例,其中Hive中的源表每天更新,以便刷新整个数据。在第一天,我们摄取整个表格,但是从第二天开始,我们只对那些"上次修改日期"已更新,以反映前一天的日期。

建议的解决方案是在第1天和第2天存储上次修改日期的MAX,比较上次修改日期大于存储日期的所有行,并仅处理这些行。

每天生成,存储和检索此上次修改日期的最佳方法是什么?此外,不同的表格将有不同的日期,理想情况下,我喜欢具有Table_Name, Last_Modified_Date的内容,除非有更好的方法。

请帮忙。谢谢。

4 个答案:

答案 0 :(得分:0)

如果我正确理解了您的方案,则在每日新运行时,Last_Modified_Date的值只能大于上次运行时Last_Modified_Date的最大值。

在这种情况下,我建议在Last_Modified_Date上创建表分区,并仅处理落入此分区的记录(这比处理比较要快得多)。

答案 1 :(得分:0)

这个解决方案可行吗?

  1. 从"上次修改日期"提取日期;作为新列,命名为dateid;使用dateid作为分区键。
  2. 刷新整个数据时,可以将所有数据拆分为不同的分区;(此操作可以通过hive的动态分区功能实现)。
  3. 如果您每天处理数据,则可以处理最后一个dateid中的数据。

答案 2 :(得分:0)

经过多次头脑风暴,我们决定继续使用中间表来存储上次修改日期的MAX和表名,并将其用作查找以确定要处理的新记录。由于我们使用的是shell脚本,因此我可以使用变量查询表并获取上次修改日期,然后使用该变量处理新的/更新的记录。

答案 3 :(得分:0)

描述格式化的表名...您将获得transient_lastDdlTime,可以使用以下内容进行转换。

SELECT CAST(from_unixtime(your_transient_lastDdlTime_value)AS时间戳);

感谢与问候, Kamleshkumar Gujarathi