首页 > 解决方案 > Alter Table/Partition“连接”命令的工作

问题描述

想知道该命令是如何工作的,在https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable/PartitionConcatenateAlter Table/Partition Concatenate上找不到太多。

假设我在特定分区上运行此命令,同时我SELECT在同一分区上运行命令。

是否存在竞争条件,我试图在 concatenate 命令删除该分区中已经存在的多个文件并且尚未用它创建的临时文件夹中的新组合文件替换它时读取它。

复制这将是困难的,如果有人有任何想法,请帮助!

标签: sqlapache-sparkhadoophiveapache-spark-sql

解决方案


会有no race条件,当我们运行alter table <tb_name> concatenate;时,会Exclusive在表上获得锁(if specific partition mentioned then lock on that specific partition only)

工作完成后将Exclusive Lock发布。MR

然后只有您Select query将在表上执行,直到Exclusive lock在表上您的选择查询将在队列中等待。

来自官方 Hive 文档:

Hive Command                                Locks Acquired
---------------------------------------     ---------------
alter table T1 partition P1 concatenate  |  EXCLUSIVE Lock on T1.P1
alter table T1 concatenate               |  EXCLUSIVE Lock on T1

To check locks on specific Hive table:

show locks <db>.<tb_name>;

推荐阅读