Hive - 如何跟踪和更新 Hive 中增量表的上次修改日期?
Hive - How to track and update Last Modified date in Hive for delta tables?
我有一个用例,其中每天更新 Hive 中的源 table,从而刷新整个数据。在第一天,我们摄取整个 table,但从第二天开始,我们只对 "Last Modified Date" 已更新以反映前一天日期的那些行感兴趣。
建议的解决方案是在第 1 天和第 2 天存储最后修改日期的 MAX,比较最后修改日期大于存储日期的所有行,并仅处理这些行。
每日生成、存储和检索此最后修改日期的最佳方式是什么?此外,不同的 table 会有不同的日期,理想情况下,我想要有 Table_Name, Last_Modified_Date
的东西,除非有更好的方法。
请帮忙。谢谢。
如果我正确理解你的情况,在新的每日 运行 中,Last_Modified_Date 的值只能大于之前 运行 中的最大值 Last_Modified_Date。
在这种情况下,我建议在 Last_Modified_Date 上创建 table 分区并仅处理属于该分区的那些记录(这比处理您的比较要快得多)。
这个解决方案可行吗?
- 从"Last Modified Date"中提取日期作为新列,命名为dateid;使用 dateid 作为分区键。
- 刷新整个数据时,可以将所有数据拆分到不同的分区;(这个动作可以通过hive的动态分区特性实现)。
- 如果按天处理数据,那么可以处理最后一个dateid的数据。
经过多次集思广益,我们决定使用中间体 table 来存储具有 table 名称的最后修改日期的最大值,并将其用作查找以确定新记录待处理。由于我们使用的是 shell 脚本,我突然想到我可以使用一个变量来查询 table 并获取上次修改日期,然后使用该变量来处理 new/updated 记录。
描述格式化 table_name ... 你将得到 transient_lastDdlTime,你可以用下面的方法转换它。
SELECT CAST(from_unixtime(your_transient_lastDdlTime_value) AS 时间戳);
感谢和问候,
Kamleshkumar 古吉拉特语
我有一个用例,其中每天更新 Hive 中的源 table,从而刷新整个数据。在第一天,我们摄取整个 table,但从第二天开始,我们只对 "Last Modified Date" 已更新以反映前一天日期的那些行感兴趣。
建议的解决方案是在第 1 天和第 2 天存储最后修改日期的 MAX,比较最后修改日期大于存储日期的所有行,并仅处理这些行。
每日生成、存储和检索此最后修改日期的最佳方式是什么?此外,不同的 table 会有不同的日期,理想情况下,我想要有 Table_Name, Last_Modified_Date
的东西,除非有更好的方法。
请帮忙。谢谢。
如果我正确理解你的情况,在新的每日 运行 中,Last_Modified_Date 的值只能大于之前 运行 中的最大值 Last_Modified_Date。
在这种情况下,我建议在 Last_Modified_Date 上创建 table 分区并仅处理属于该分区的那些记录(这比处理您的比较要快得多)。
这个解决方案可行吗?
- 从"Last Modified Date"中提取日期作为新列,命名为dateid;使用 dateid 作为分区键。
- 刷新整个数据时,可以将所有数据拆分到不同的分区;(这个动作可以通过hive的动态分区特性实现)。
- 如果按天处理数据,那么可以处理最后一个dateid的数据。
经过多次集思广益,我们决定使用中间体 table 来存储具有 table 名称的最后修改日期的最大值,并将其用作查找以确定新记录待处理。由于我们使用的是 shell 脚本,我突然想到我可以使用一个变量来查询 table 并获取上次修改日期,然后使用该变量来处理 new/updated 记录。
描述格式化 table_name ... 你将得到 transient_lastDdlTime,你可以用下面的方法转换它。
SELECT CAST(from_unixtime(your_transient_lastDdlTime_value) AS 时间戳);
感谢和问候, Kamleshkumar 古吉拉特语