Как проверить, существует ли раздел в Hive?

У меня есть таблица Hive, разделенная столбцом dt. Мне нужно добавить раздел, если он не существует, например, dt='20181219'.

Теперь я использую HiveMetaStoreClient#getPartition(dbName, tableName, 20181219). Если раздела не существует, то ловите NoSuchObjectException и добавляйте его.

Есть ли элегантный способ добиться этого на Java?


person xingbin    schedule 19.12.2018    source источник
comment
Попробуйте это: stackoverflow.com/a/50174062/2700344   -  person leftjoin    schedule 19.12.2018


Ответы (1)


Используйте add_partition(Partition, ifNotExists, needResults) (javadoc) ... который (если 2-й аргумент равен true) создаст раздел только в том случае, если он еще не существует.

Либо просто используйте add_partition(Partition), чтобы добавить раздел без проверки, и поймайте AlreadyExistsException, если это произойдет.


Любая схема, включающая проверку возможности действия и последующее выполнение этого действия, потенциально может привести к состоянию гонки. В промежутке между «тестом» и «выполнением» какой-либо другой агент (поток, клиент, что угодно) может выполнить действие (то же самое или другое), которое приведет к сбою вашей попытки.

Так что ваш нынешний подход не только уродлив. У него также есть потенциальное состояние гонки, если разделы могут быть созданы несколькими агентами.

person Stephen C    schedule 19.12.2018