【发布时间】:2017-09-02 16:50:58
【问题描述】:
我对 HBase 完全陌生,我已经习惯了 RDBMS 数据库,我可以使用 WHERE 子句 来过滤记录。 那么,有没有类似于 RDBMS 使用 HBase 公开的 Java API 或 REST API 来过滤使用列限定符的记录?
【问题讨论】:
标签: sql database filter hbase nosql
我对 HBase 完全陌生,我已经习惯了 RDBMS 数据库,我可以使用 WHERE 子句 来过滤记录。 那么,有没有类似于 RDBMS 使用 HBase 公开的 Java API 或 REST API 来过滤使用列限定符的记录?
【问题讨论】:
标签: sql database filter hbase nosql
是的,这是可能的。
如果您只想获得某些列限定符,那么您应该使用 Get 或 Scan 实例的 addColumn(byte[] family, byte[] qualifier) 方法。这是查询所需限定符的最有效方法,因为只需要访问表示请求中特定列的 HBase 存储。用法示例:
Get = new Get(Bytes.toBytes("rowKey"));
get.addColumn(Bytes.toBytes("columnFamily", Bytes.toBytes("Qual"));
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes("columnFamily"), Bytes.toBytes("Qual1"));
scan.addColumn(Bytes.toBytes("columnFamily"), Bytes.toBytes("Qual2"));
如果您需要更复杂的工具来过滤限定符,那么您可以使用 Java API 中的 QualifierFilter 类。示例如何查询具有特定限定符的所有列:
Filter filter = new QualifierFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes("columnQual")));
Get = new Get(Bytes.toBytes("rowKey"));
get.setFilter(filter);
Scan scan = new Scan();
scan.setFilter(filter);
您还可以在 HBase 官方文档中阅读有关 another HBase filters 和 how combine them 的信息。
【讨论】: