如何解决在hbase中获取所有家庭
| 我有一个hbase表 行:单词,家庭:日期 我想在日期'd \'上找到所有单词的扫描仪,我该怎么做?所以我不想指定行值。解决方法
您的问题不清楚,您试图从哪里获取扫描仪,因此我将通过HBase命令行对其进行处理。我已经使用了Thrift库与hbase进行交互,并且CLI命令显然可以将其转换。我认为它们也可以很好地转换为您要使用扫描仪的任何其他界面。
要获取特定列族的所有行,请使用以下命令
scan \'table_name\',{COLUMNS => \'col_family:\'}
对于您的情况(减去\'table_name \'\',因为我不知道),它看起来像
scan \'yourTable\',{COLUMNS => \'d:\'}
这将返回列族“ 2”中的所有行。
如果您还想指定以“ѭ3”开头的内容,它将看起来像
scan \'yourTable\',{COLUMNS => \'d:\',STARTROW => \'word\'}
该命令将从行键“ 5”开始,并在该点之后获取所有行。如果要将其限制为仅RowKey word
,则还必须添加STOPROW
。 STOPROW
不包括在结果中。所以您不能做scan \'yourTable\',STARTROW => \'word\',STOPROW => \'word\'}
,因为那将不返回任何内容。
指定“ 7”需要一定的RowKey值知识。我不知道您的价值观,因此很难举一个好例子。我经常做的是将下一个字符(在ASCII码集中)用作起始行的最后一个字符。在您的示例中,我会尝试
scan \'yourTable\',STOPROW => \'wore\'}
我不会保证这将一直有效,但是在大多数情况下都可能有效。也许所有情况下,我都还没有解决。 :)
希望有帮助。
有关HBase Shell命令的一个很好的资源是http://wiki.apache.org/hadoop/Hbase/Shell。
,我假设您正在谈论使用Java API的scan命令
如果我正确理解了您的结构,那么您将无法在没有全表扫描的情况下按日期检索单词。 -您可以在扫描中设置setFilter,但仍必须转到每一行以检查
您没有指定,但我想每个单词都可能出现在多个日期中(如果您希望每个日期都有一个家庭,请注意,建议不要有超过2-3个家庭)
如果您想要一种相对有效的存储方式,建议您将结构更改为
关键字Word0xDate并将日期存储在TimeStamp中,然后将某个1字节的值存储为数据(以便存在一行)
在存储方面,它将与您当前的解决方案相同(加上2个字节,您可以通过缩短族和限定符的名称来抵消),您将能够扫描时间戳或时间戳范围(setTimestamp和setTimeRange)效率更高,因为hbase会跳过存储不相关时间戳的文件)
,尝试这个:
HTable t = new HTable(conf,\"YourROW\");
ResultScanner scanner = t.getScanner(new Scan());
for (Result rr = scanner.next(); rr != null; rr = scanner.next())
{
if (rr.getValue(\"YourFamily\",\"YourQualifier\").equals(Bytes.toBytes(\"d\"))
{
Get g = new Get(key);
Result row = t.get(g);
System.out.println(\"\" + row.toString()); //print all data from this row
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。