Как проверить, существует ли раздел в 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
если это произойдет.
Любая схема, которая включает в себя проверку того, что действие возможно, а затем выполнение этого действия, имеет потенциальное состояние гонки. Между "тестом" и "делом" какой-то другой агент (поток, клиент и т. Д.) Может выполнить действие (то же самое или другое), которое приведет к вашей неудачной попытке.
Так что ваш нынешний подход не только уродлив. Это также имеет потенциальное состояние гонки, если разделы могут быть созданы несколькими агентами.