我们将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 / Spark中的任何参数来控制它,除了用hive.support.concurrency
开启/关闭所有并发性吗?
还有其他方法可以解决这类问题吗?我们测试了特定分区文件夹中的直接覆盖镶木地板文件,但它似乎更麻烦,因为它需要运行recoverPartitions
并一遍又一遍地重新创建DataFrame。