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

问题描述 投票:2回答:4

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

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

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

请帮忙。谢谢。

date hadoop hive bigdata timedelta
4个回答
0
投票

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

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


0
投票

这个解决方案可行吗?

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

0
投票

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


0
投票

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

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

感谢和问候,Kamleshkumar Gujarati

© www.soinside.com 2019 - 2024. All rights reserved.