如何列出 hbase 表中的所有行键?
Posted
技术标签:
【中文标题】如何列出 hbase 表中的所有行键?【英文标题】:How to list all row keys in an hbase table? 【发布时间】:2011-07-11 00:38:21 【问题描述】:我需要使用带有 REST 接口的 php 来执行此操作。
【问题讨论】:
how to list all row keys in an hbase table?的可能重复 这是 hbase_user 试图在另一个问题中提出的问题的副本......但这不是实际询问(或回答)的内容。 【参考方案1】:如果您列出 HBase 表中的所有键,那么您使用了错误的工具。 HBase 适用于无法列出所有键的大型数据系统。
可能更明智的做法是从给定键开始并列出接下来的 N 个键(对于 N 小于 10K 的值)。有很好的 Java 接口可以通过扫描来完成这类事情——设置开始键和/或结束键。
大多数 HBase 功能都是通过 Thrift 接口公开的。我建议去那里看看
【讨论】:
嗨,大卫,感谢您的回复。我正在尝试使用 REST 接口,并找到了一些在限制范围内扫描表的方法。不幸的是,它无法正常工作,因为它应该在我的集群中。如果我回去搜索 Thrift,它会浪费我很多工作时间!如果你有什么好的工作方式来使用 REST 接口连接 hbase 和 php,请上来帮助我!【参考方案2】:我找到了办法..
http://localhost:8080/tablename/* 将返回一个 xml 数据,我可以对其进行预匹配以获取行。
邀请更好的建议..
【讨论】:
【参考方案3】:我不知道 REST 接口是什么样的,但您可能希望从客户端过滤掉一些数据以避免大型 RPC 响应。您可以通过在扫描中添加服务器端过滤器来做到这一点:
Scan s = new Scan();
FilterList fl = new FilterList();
// returns first instance of a row, then skip to next row
fl.addFilter(new FirstKeyOnlyFilter());
// only return the Key, don't return the value
fl.addFilter(new KeyOnlyFilter());
s.setFilter(fl);
HTable myTable;
ResultScanner rs = myTable.getScanner(s);
Result row = rs.next();
while (row != null) ...
http://svn.apache.org/repos/asf/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/
【讨论】:
【参考方案4】:这...
http://localhost:8080/tablename/*/columnfamily:columnid
...将返回表中相对于该表中该列的所有值,有点像在扫描仪中应用列过滤器。
此外,如果您要查找多列 - 用逗号分隔它们。
所以:/tablename/*/columnfamily:columnid,columnfamily:columnid2
【讨论】:
以上是关于如何列出 hbase 表中的所有行键?的主要内容,如果未能解决你的问题,请参考以下文章