Details
Description
Code executed:
@Test public void testHbasePutDeleteCell() throws Exception { TableName tableName = TableName.valueOf("my_test"); Configuration configuration = HBaseConfiguration.create(); HTableInterface table = new HTable(configuration, tableName); final String rowKey = "12345"; final byte[] familly = Bytes.toBytes("default"); // put one row Put put = new Put(Bytes.toBytes(rowKey)); put.add(familly, Bytes.toBytes("A"), Bytes.toBytes("a")); put.add(familly, Bytes.toBytes("B"), Bytes.toBytes("b")); put.add(familly, Bytes.toBytes("C"), Bytes.toBytes("c")); table.put(put); // get row back and assert the values Get get = new Get(Bytes.toBytes(rowKey)); Result result = table.get(get); Assert.isTrue(Bytes.toString(result.getValue(familly, Bytes.toBytes("A"))).equals("a"), "Column A value should be a"); Assert.isTrue(Bytes.toString(result.getValue(familly, Bytes.toBytes("B"))).equals("b"), "Column B value should be b"); Assert.isTrue(Bytes.toString(result.getValue(familly, Bytes.toBytes("C"))).equals("c"), "Column C value should be c"); // put the same row again with C column deleted put = new Put(Bytes.toBytes(rowKey)); put.add(familly, Bytes.toBytes("A"), Bytes.toBytes("a")); put.add(familly, Bytes.toBytes("B"), Bytes.toBytes("b")); put.add(new KeyValue(Bytes.toBytes(rowKey), familly, Bytes.toBytes("C"), HConstants.LATEST_TIMESTAMP, KeyValue.Type.DeleteColumn)); table.put(put); // get row back and assert the values get = new Get(Bytes.toBytes(rowKey)); result = table.get(get); Assert.isTrue(Bytes.toString(result.getValue(familly, Bytes.toBytes("A"))).equals("a"), "Column A value should be a"); Assert.isTrue(Bytes.toString(result.getValue(familly, Bytes.toBytes("B"))).equals("b"), "Column A value should be b"); Assert.isTrue(result.getValue(familly, Bytes.toBytes("C")) == null, "Column C should not exists"); }
This assertion fails, the cell is not deleted but rather the value is empty:
hbase(main):029:0> scan 'my_test' ROW COLUMN+CELL 12345 column=default:A, timestamp=1408473082290, value=a 12345 column=default:B, timestamp=1408473082290, value=b 12345 column=default:C, timestamp=1408473082290, value=
This behavior is different than previous 4.8.x Cloudera version and is currently corrupting all hive queries involving is null or is not null operators on the columns mapped to hbase
Attachments
Attachments
Issue Links
- is blocked by
-
HBASE-12445 hbase is removing all remaining cells immediately after the cell marked with marker = KeyValue.Type.DeleteColumn via PUT
- Closed
- is part of
-
HBASE-11796 Add client support for atomic checkAndMutate
- Closed