I têm uma tabela colmeia, que é repartido por coluna dt
. Eu preciso adicionar uma partição, se ele não existe, por exmaple, dt='20181219'
.
Agora eu estou usando HiveMetaStoreClient#getPartition(dbName, tableName, 20181219)
. Se a partição não existe, em seguida, pegar NoSuchObjectException
e adicioná-lo.
Existe alguma maneira elegante de conseguir isso em Java?
Use add_partition(Partition, ifNotExists, needResults)
( javadoc ) ... que (se o segundo argumento é true
) só irá criar uma partição se ele ainda não existir.
Em alternativa, basta usar add_partition(Partition)
para adicionar a partição sem um teste , e pegar o AlreadyExistsException
caso ele ocorra.
Qualquer esquema que envolve testar que uma ação é possível e, em seguida, fazendo que a ação tem uma condição de corrida potencial. Entre o "teste" eo "fazer", algum outro agente (rosca, cliente, qualquer que seja) poderia fazer uma ação (o mesmo ou um diferente), que fará com que sua tentativa de falhar.
Portanto, sua abordagem atual não só é feio. Ele também tem uma condição de corrida potencial se partições poderia ser criado por vários agentes.