xingbin:
私は列で分割されているハイブテーブルを持っていますdt
。私は、exmapleのために、それが存在しない場合は、パーティションを追加する必要がありますdt='20181219'
。
今、私が使用していますHiveMetaStoreClient#getPartition(dbName, tableName, 20181219)
。パーティションが存在しない場合は、キャッチNoSuchObjectException
し、それを追加します。
Javaでこれを達成するための任意のエレガントな方法はありますか?
スティーブンC:
使用add_partition(Partition, ifNotExists, needResults)
(javadocの)...(2番目の引数がある場合true
、それはまだ存在しない場合のみ、パーティションを作成します)。
また、単に使用add_partition(Partition)
パーティションを追加するためにテストせずに、そしてキャッチしAlreadyExistsException
、それが発生した場合。
アクションが可能であることをテストし、その行動をしていることを伴う任意のスキームは、潜在的な競合状態を持っています。「テスト」と、「やる」いくつかの他のエージェントとの間で(スレッド、クライアント、何でも)は、アクションあなたの試みは失敗します(同じものまたは異なるもの)を行うことができます。
だからあなたの現在のアプローチは、醜いではありません。パーティションが複数のエージェントによって作成することができれば、それはまた、潜在的な競合状態を持っています。