更新 hive 表中的增量记录

Posted

技术标签:

【中文标题】更新 hive 表中的增量记录【英文标题】:Update delta records in hive table 【发布时间】:2016-04-11 17:28:57 【问题描述】:

我有一个包含超过 TB 大小的历史数据的表,我每天都会收到 delta(更新的信息)记录,这些记录将以 GB 为单位并存储在 delta 表中。现在我想将增量记录与历史记录进行比较,并使用增量表中的最新数据更新历史表。

在 Hive 中执行此操作的最佳方法是什么,因为我要处理数百万行。我已经在网上搜索并找到了以下方法。

http://hortonworks.com/blog/four-step-strategy-incremental-updates-hive

但我认为这不是性能方面的最佳方法。

【问题讨论】:

【参考方案1】:

在最新的 hive (0.14) 中,您可以进行更新。您需要将表格保持为 ORC 格式并按搜索键存储。

哦,我需要添加此链接以获取更多信息: Hive Transactions

此外: 您是否有一个好的分区键,以便更新只需要在最新的分区上工作?最好执行以下操作:

    从所需分区获取数据到临时表 (T1)

    假设 T2 是带有更新记录的新表。需要和T1一样分区

    将 T1 和 T2 与键连接起来,并取出仅存在于 T1 中而不存在于 T2 中的那些。假设这张桌子是 T3 联合 T2 和 T3 以创建表 T4 从 T1 中删除之前占用的分区 将 T4 插入 T1

请记住,这些操作可能不是原子操作,在第 5 步和第 6 步发生期间,在 T1 上运行的任何查询都可能有中间结果。

【讨论】:

以上是关于更新 hive 表中的增量记录的主要内容,如果未能解决你的问题,请参考以下文章

Flyway 最佳实践:一个大型迁移脚本与多个增量脚本

Hive 查询以获取插入表中的最后一条记录

Oracle - 我想找出数据库表中的增量变化

如何使用 Pyspark 在 Databricks 中合并 Hive 表中的记录?

KETTLE如何实现实时的增量更新

从 Hive 中的多个表中选择增量数据