我们将Spark SQL 2.2.0与Hive Metastore一起使用(在HDInsight上) . 我们有外部表构建在Azure BLOB上存储的分区镶木地板文件上 . 数据将以镶木地板的形式发送到BLOB,我们对此没有影响 .

我们需要接受分区数据更新(也称为重述),对以下内容的影响最小:

  • 对数据运行查询的下游系统(避免破解查询和长时间等待等)

  • 数据更新过程(尽可能避免长时间等待和复杂逻辑)

我们正在考虑做这样的事情来执行更新(没什么特别的):

ALTER TABLE tbl PARTITION(YEAR=2018, MONTH=1, DAY=30) 
SET LOCATION 'wasb:///mylocation/table/20180130/v2'

我们可以期待什么表(或分区)锁定机制/逻辑?我用Google搜索,答案对我来说不清楚 .

除了使用 hive.support.concurrency 打开/关闭所有并发外,我们可以使用Hive / Spark中的任何参数来控制它吗?

还有其他方法可以解决这类问题吗?我们测试了特定分区文件夹中的直接覆盖镶木地板文件,但它似乎更麻烦,因为它需要运行 recoverPartitions 并反复重新创建DataFrame .