2011-07-29

HBase で特定行の特定カラムファミリに含まれるカラムを全削除する

たとえば以下のようなテーブルがあったとします。
> scan 'tbl1'
ROW                               COLUMN+CELL
 row1                             column=fam1:col1, timestamp=1311918146512, value=1-1-1
 row1                             column=fam1:col2, timestamp=1311918153880, value=1-1-2
 row1                             column=fam2:col2, timestamp=1311918161976, value=1-2-2
 row2                             column=fam1:col1, timestamp=1311918179710, value=2-1-1
 row2                             column=fam2:col1, timestamp=1311918231004, value=2-2-1
 row2                             column=fam2:col2, timestamp=1311918264142, value=2-2-2
2 row(s) in 0.0760 seconds
このテーブルの row2 のカラムファミリ fam2 に含まれるカラムをすべて削除したい場合、hbase shell で以下のコマンドを実行しても意図通りの結果にはなりません。
> deleteall 'tbl1', 'row2', 'fam2'
意図したとおりの結果を得るには以下のようにします。
> import org.apache.hadoop.hbase.client.HTable
> import org.apache.hadoop.hbase.client.Delete
> t = HTable.new("tbl1".to_java_bytes)
> t.delete(Delete.new("row2".to_java_bytes).deleteFamily("fam2".to_java_bytes))
テーブルの内容を確認すると
> scan 'tbl1'
ROW                               COLUMN+CELL
 row1                             column=fam1:col1, timestamp=1311918146512, value=1-1-1
 row1                             column=fam1:col2, timestamp=1311918153880, value=1-1-2
 row1                             column=fam2:col2, timestamp=1311918161976, value=1-2-2
 row2                             column=fam1:col1, timestamp=1311918179710, value=2-1-1
検証した HBase のバージョン: 0.90.1-CDH3B4