Would the incrementValue [1] work for this? St.Ack 1. http://hadoop.apache.org/hbase/docs/r0.20.3/api/org/apache/hadoop/hbase/client/HTable.html#incrementColumnValue%28byte[],%20byte[],%20byte[],%20long%29
On Wed, Apr 28, 2010 at 7:40 AM, Tatsuya Kawano <tatsuy...@snowcocoa.info> wrote: > Hi, > > I'd like to implement unique row ID constraint (like the primary key > constraint in RDBMS) in my application framework. > > Here is a code fragment from my current implementation (HBase > 0.20.4rc) written in Scala. It works as expected, but is there any > better (shorter) way to do this like checkAndPut()? I'd like to pass > a single Put object to my function (method) rather than passing rowId, > family, qualifier and value separately. I can't do this now because I > have to give the rowLock object when I instantiate the Put. > > =============================================== > def insert(table: HTable, rowId: Array[Byte], family: Array[Byte], > qualifier: Array[Byte], value: > Array[Byte]): Unit = { > > val get = new Get(rowId) > > val lock = table.lockRow(rowId) // will expire in one minute > try { > if (table.exists(get)) { > throw new DuplicateRowException("Tried to insert a duplicate row: " > + Bytes.toString(rowId)) > > } else { > val put = new Put(rowId, lock) > put.add(family, qualifier, value) > > table.put(put) > } > > } finally { > table.unlockRow(lock) > } > > } > =============================================== > > Thanks, > > -- > 河野 達也 > Tatsuya Kawano (Mr.) > Tokyo, Japan > > twitter: http://twitter.com/tatsuya6502 >