如何检查Hive中是否存在分区?

孙兴斌*_*孙兴斌 8 java hive hive-metastore

我有一个Hive表,它由列分区dt.如果不存在,我需要添加一个分区,例如,dt='20181219'.

现在我正在使用HiveMetaStoreClient#getPartition(dbName, tableName, 20181219).如果分区不存在,则捕获NoSuchObjectException并添加它.

在Java中有没有优雅的方法来实现这一目标?

Ste*_*n C 6

使用add_partition(Partition, ifNotExists, needResults)(javadoc)...(如果第二个参数是true)将仅创建一个分区(如果它尚不存在).

或者,只需add_partition(Partition)没有测试的情况下添加分区,并捕获AlreadyExistsException它是否发生.


任何涉及测试行动是否可行然后执行该行动的方案都有潜在的竞争条件.在"测试"和"执行"之间,某些其他代理(线程,客户端,无论什么)可以执行将导致您尝试失败的操作(相同的一个或不同的操作).

所以你现在的方法不仅难看.如果可以由多个代理创建分区,则它还具有潜在的竞争条件.