Ali*_*Ali 5 timestamp hbase hbase-shell
我正在尝试从 HBase 表中删除所有数据,该表的时间戳早于指定的时间戳。这包含所有列族和行。
有没有办法使用shell和Java API来完成?
HBase 没有范围删除标记的概念。这意味着如果您需要删除多个单元格,您需要为每个单元格放置删除标记,这意味着您必须扫描每一行,无论是在客户端还是服务器端。这意味着您有两个选择:
扫描和删除:这是一个干净且最简单的选项。既然您说需要删除所有早于特定时间戳的列族,那么通过使用服务器端过滤仅读取每行的第一个键,可以大大优化扫描和删除操作。
Scan scan = new Scan();
scan.setTimeRange(0, STOP_TS); // STOP_TS: The timestamp in question
// Crucial optimization: Make sure you process multiple rows together
scan.setCaching(1000);
// Crucial optimization: Retrieve only row keys
FilterList filters = new FilterList(FilterList.Operator.MUST_PASS_ALL,
new FirstKeyOnlyFilter(), new KeyOnlyFilter());
scan.setFilter(filters);
ResultScanner scanner = table.getScanner(scan);
List<Delete> deletes = new ArrayList<>(1000);
Result [] rr;
do {
// We set caching to 1000 above
// make full use of it and get next 1000 rows in one go
rr = scanner.next(1000);
if (rr.length > 0) {
for (Result r: rr) {
Delete delete = new Delete(r.getRow(), STOP_TS);
deletes.add(delete);
}
table.delete(deletes);
deletes.clear();
}
} while(rr.length > 0);
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
5145 次 |
| 最近记录: |