是否有任何具有以下行为的扫描/过滤 API?
在给定的时间范围内,我希望扫描器包含来自超出范围的 HFile 的数据,对于范围内的 HFile 中包含的行键。 这个想法是扫描所有 HFile 的内存索引,但仅从磁盘获取范围内 HFile 中行键的数据。
例如,如果HFile1
在范围内而HFile2
在范围外,并且rowkey1
在HFile1<中有任何数据
,我也想从 HFile2
中获取 rowkey1
的所有列,就好像它在范围内一样。
另一方面,如果 rowkey2
包含在 HFile2
中但不包含在 HFile1
中,索引扫描器应该直接跳到下一个行键。
用例是加载在过去 X 小时内修改过的整行(即使只有一列),避免对冗余数据进行全面扫描或任何磁盘扫描。 这将被集成到 Spark/MR 应用程序中,可能基于 TableSnapshotInputFormat,所以我想我可以为 HRegion、HStore 或其他任何东西提供一些自定义代码,如果涉及到这个。
非常感谢
最佳答案
如果这是用例,
The use case is to load entire rows that were modified (even on just one column) during the last X hours, avoiding full scan or any disk scan of redundant data
为什么 Scan with timestamp range 不起作用? HBase JAVA API org.apache.hadoop.hbase.client.Scan.setTimeRange(long, long)
将时间范围作为输入,它仅获取在此时间范围内修改的行。
如果您希望它更灵活,则应用 KeyOnlyFilter()
并获取所有行键。稍后您可以根据行数执行批处理 Get
。
关于java - 基于特定 HFile(s) 作为根的 HBase 扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54685606/