将 Spark 数据帧合并到现有的 ACID 事务 Hive table?

Merge a Spark data frame into an existing ACID transactional Hive table?

考虑 Hive 中的一个简单合并语句:

merge into
  base_table A 
using
  merge_from_table B 
on
  (A.id = B.id)
when matched then update set 
  A.lastname = B.lastname 

现在想象一下:

  1. base_table 是一个事务性 Hive table(ACID 操作 已启用)。
  2. 而不是 merge_from_table 我们生成了一个数据框 在 Spark

问题 1: 有什么办法可以直接将data frame合并到Hive中table?

如果问题 1 的答案是“否”,则:

问题2:目前我能想到的最好的办法就是将data frame写到一个临时的hive中table然后用上面的Hive语句合并进入我的 base_table。有更好的方法吗?

验证多于答案。

  • 假设您不使用 Databricks 的增量格式
    • 并且您确实想要重新陈述数据
      • 并且您不想在 Spark 中使用自己的增量计算和优化技术来限制处理
        • 并且您不想将数据插入“当前”分区
          • 然后。 Spark 不支持 DDL 更新
            • 所以您的下一个最佳解决方案确实是最简单的。