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

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

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

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

1 ответ

Решение

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

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


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

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

Другие вопросы по тегам