如何检查配置单元中是否存在分区?

q7solyqu  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(430)

我有一个配置单元表,它是按列划分的 dt . 我需要添加一个分区,如果它不存在,例如exmaple, dt='20181219' .
现在我在用 HiveMetaStoreClient#getPartition(dbName, tableName, 20181219) . 如果分区不存在,则捕获 NoSuchObjectException 再加上它。
有什么优雅的方法可以在java中实现这一点吗?

kdfy810k

kdfy810k1#

使用 add_partition(Partition, ifNotExists, needResults) (javadoc)。。。如果第二个参数是 true )只会在分区不存在时创建分区。
或者,只需使用 add_partition(Partition) 在没有测试的情况下添加分区,并捕获 AlreadyExistsException 如果发生了。
任何涉及测试一个动作是否可行,然后执行该动作的方案都有一个潜在的竞争条件。在“test”和“do”之间,其他一些代理(线程、客户机等)可以执行一个操作(相同的或不同的),这将导致您的尝试失败。
所以你现在的做法不仅丑陋。如果分区可以由多个代理创建,那么它还有一个潜在的竞争条件。

相关问题