본문 바로가기

IT for developer/Hadoop+Nosql

HBase - DELETE


HTable에 다음 함수를 통해 삭제를 수행한다.

void delete (Delete delete) throws IOException

put과 유사하게 Delete 객체를 생성해서서 전달하면 된다. Delete 객체를 생성하는 방법도 기존 Get, Put 객체를 생성하는 것과 유사하다.
 

Delete(byte[] row)
Delete(byte[] row, long timestamp, RowLock rowLock) 



특정 컬럼 패밀리 또는 컬럼을 지정하여 삭제할 수도 있다. 아무것도 지정하지 않으면 해당 rowKey에 해당하는 모든 셸을 지운다.

Delete deleteFamily(byte[] family)

Delete deleteFamily(byte[] family, long timestamp)

Delete deleteColumns(byte[] family, byte[] qualifier)

Delete deleteColumns(byte[] family, byte[] qualifier, long timestamp)

Delete deleteColumn(byte[] family, byte[] qualifier)

Delete deleteColumn(byte[] family, byte[] qualifier, long timestamp)

void setTimestamp(long timestamp)


deleteColumns에 timestamp를 지정하면 해당 timtestamp 보다 오래된 컬럼을 지우고 지정되지 않으면 모든 타임스탬프에 해당되는 컬럼을 지운다.
deleteColumn에 timestamp를 지정하면 해당 timestamp의 컬럼을 지우고 지정되지 않으면 가장 최신의 컬럼을 지운다.

deleteFamily는 Family를 기준으로 지운다는 점만 다르고 deleteColumn과 유사하다.(컬럼 패밀리에 속하는 모든 Column을 지운다는 점이 다르다.)

결국 , 삭제 대상을 찾는데 사용되는 범위로 해당 rowKey의 전체, 컬럼 패밀리 또는 특정컬럼으로 지정하고 이를 타임스탬프를 전달하느냐 안하느냐에 따라 삭제대상이 달라진다.

이를 표로써 나타내면 다음과 같다.


 함수  타임스탬프가 없는 경우  타임스탬프가 있는 경우
 none  모든 컬럼들, 모든 버전  타임스탬프를 포함하여 이보다 오래된 컬럼의 모든 버전들
 deleteColumn()  가장 최신버전 정확히 일치하는 버전
 deleteColumns()  주어진 컬럼의 모든 버전 주어진 컬럼의 지정 타임스탬프를 포함하여 이보다 오래된 컬럼의 모든 버전들
 deleteFamily()  주어진 패밀리의 모든 컬럼들(모든버전) 주어진 패밀리의 모든 컬럼들중 지정 타임스탬프를 포함하여 이보다 오래된 컬럼의 모든 버전들



예제)

Delete delete = new Delete(Bytes.toBytes("row1"));  1)

delete.setTimestamp(1);  2)
delete.deleteColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"))  3) 

delete.deleteColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"), 1);  4)

delete.deleteColumns(Bytes.toBytes("colfam2"), Bytes.toBytes("qual1"));  5)

delete.deleteColumns(Bytes.toBytes("colfam2"), Bytes.toBytes("qual3"), 15);  6)


delete.deleteFamily(Bytes.toBytes("colfam3"));  7)

delete.deleteFamily(Bytes.toBytes("colfam3"), 3);  8)

table.delete(delete);  9)
 

table.close();


1) 특정 row에 대한 Delete 객체를 생성한다.
2) row 삭제를 위한 타임스탬프 지정
3) 하나의 컬럼에 최신 버전 Delete (colfam1:qual1 컬럼 )
4) 하나의 컬럼에 특정 버전 Delete (timestamp가 1인 버전)
5) 하나의 컬럼에 모든 버전 Delete
6) 하나의 컬럼에 주어진 타임스탬프를 포함하여 이전 버전모두 Delete.
7) 컬럼패밀리에 속하는 모든 컬럼들과 버전 Delete
8) 컬럼패밀리에 속하는 컬럼들중 타임스탬프를 포함하여 이전 버전 모두 Delete
9) HBase 테이블로부터 ㅇ데이터를 삭제한다.



단일 Row가 아니라 여러 Row를 삭제할 때는 다음과 같은 함수를 사용한다.

void delete(List<Delete> deletes) throws IOException



    List<Delete> deletes = new ArrayList<Delete>(); 


    Delete delete1 = new Delete(Bytes.toBytes("row1"));

    delete1.setTimestamp(4); 

    deletes.add(delete1);


    Delete delete2 = new Delete(Bytes.toBytes("row2"));

    delete2.deleteColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1")); 

    delete2.deleteColumns(Bytes.toBytes("colfam2"), Bytes.toBytes("qual3"), 5); 

    deletes.add(delete2);


    Delete delete3 = new Delete(Bytes.toBytes("row3"));

    delete3.deleteFamily(Bytes.toBytes("colfam1")); 

    delete3.deleteFamily(Bytes.toBytes("colfam2"), 3); 

    deletes.add(delete3);


    table.delete(deletes); 


    table.close();


생략