HBase 1.x에는 전체 행을 삭제할 수있는 Table 개체에 대한 삭제 메서드가 있습니다. 그러나 행이 실제로 테이블에 있는지 여부에 관계없이 "성공"합니다 (반환 값이 없음). 행이 HBase의 Table.delete에 대한 특정 호출에 의해 삭제되었는지 확인하는 방법이 있습니까?HBase : 삭제할 전화가 실제로 행을 삭제했는지 어떻게 판단 할 수 있습니까?
checkAndDelete가 적합 할 수 있다고 생각합니다. 예를 들어 행이 먼저 있는지 확인하는 것이 좋습니다. 다음과 같은 내용 :
boolean deleted = false;
try (Table table = getTable(TABLE_NAME)) {
byte[] rowKey = Bytes.toBytes(rowId);
deleted = table.checkAndDelete(???, new Delete(rowKey));
} catch (Exception e) {
// handle exceptions here
}
// here I know if the row was deleted or not
'???'에 넣을 조건이 확실하지 않습니다. 부품. 컬럼 값 (내가 알고있는 컬럼 값)이 비어 있지는 않지만, 작동하지 않았다는 것을 확인하려고 노력했다. 같은 효과를 달성하기 위해, 내가 대신 두 통화 (다음 삭제 존재)로 checkAndDelete를 교체 했어 :
if (table.exists(new Get(rowKey))) {
table.delete(new Delete(rowKey));
deleted = true; // row deleted
}
한 원자 전화가 훨씬 좋네요 될 것이다. 확실히 다른 누군가가 이와 비슷한 일을 해왔습니다.
흠 ... 스캔으로 구현 된 다음 삭제 된 경우 스캔 결과가 비어있을 수 있기 때문에 행이 없으면 예외가 발생하지 않는 이유는 무엇입니까? checkAndPut 다른 장소를 사용합니다. checkAndDelete를 사용하는 아이디어에 영감을주었습니다. 내가 거기에 없었던 칼럼이 존재하지 않는지 확인해 보았을 때, 칼럼이 없었던 이유는 확실하지 않았습니다. 더미 열을 추가하고 값을 확인하지 않았습니다. (매우 해킹 된 솔루션처럼 보입니다.) 이 사용 사례 (삭제가 실제로 작동하는지 여부를 아는 것)가 매우 드뭅니다. –