Как проверить, существует ли раздел в Hive? - PullRequest
0 голосов
/ 19 декабря 2018

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

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

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

1 Ответ

0 голосов
/ 19 декабря 2018

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

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


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

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

...