让所有家庭都在hbase中
我有一张hbase表,上面有 行:字,族:日期让所有家庭都在hbase中,hbase,Hbase,我有一张hbase表,上面有 行:字,族:日期 我想用扫描仪扫描日期“d”上的所有单词,我该怎么做?因此,我不想指定行值。您的问题不清楚您试图从何处获取扫描仪,因此我将把它视为来自HBase命令行。我已经使用thrift库与hbase交互,CLI命令很明显就是这样翻译的。我想它们也能很好地转换到任何其他你正在使用扫描仪的界面上 要获取特定列族的所有行,可以使用以下命令 scan 'table_name', {COLUMNS => 'col_family:'} 对于您的情况(减去“tabl
我想用扫描仪扫描日期“d”上的所有单词,我该怎么做?因此,我不想指定行值。您的问题不清楚您试图从何处获取扫描仪,因此我将把它视为来自HBase命令行。我已经使用thrift库与hbase交互,CLI命令很明显就是这样翻译的。我想它们也能很好地转换到任何其他你正在使用扫描仪的界面上 要获取特定列族的所有行,可以使用以下命令
scan 'table_name', {COLUMNS => 'col_family:'}
对于您的情况(减去“table_name”,因为我不知道),它看起来像
scan 'yourTable', {COLUMNS => 'd:'}
scan 'yourTable', {COLUMNS => 'd:', STARTROW => 'word'}
这将返回列族d
中的所有行
如果您还想指定行键的起始位置,它将类似于
scan 'yourTable', {COLUMNS => 'd:'}
scan 'yourTable', {COLUMNS => 'd:', STARTROW => 'word'}
该命令将从行键word
开始,并获取该点之后的所有行。如果要将其限制为仅包含行关键字
,还必须添加停止行
。STOPROW
不包括在结果中。因此,您不能执行扫描'yourTable',{COLUMNS=>'d:',STARTROW=>'word',STOPROW=>'word'}
,因为这将不会返回任何结果。
指定一个STOPROW
需要了解一些RowKey值。我不知道你的价值观,所以很难举个好例子。我经常做的是使用下一个字符(在ASCII集中)作为起始行的最后一个字符。在你的例子中,我会试试看
scan 'yourTable', {COLUMNS => 'd:', STARTROW => 'word', STOPROW => 'wore'}
我不打算保证这会一直有效,但在大多数情况下可能有效。也许在所有情况下,我都还没有解决
希望这能有所帮助
HBase shell命令的一个很好的资源是。我假设您正在谈论使用javaapi的scan命令 如果我正确理解了你的结构,你目前没有办法在没有完整表格扫描的情况下按日期检索单词。-您可以在扫描上进行更改,但仍需要转到每一行以检查是否正确 您没有指定,但我猜每个单词都可以出现在许多日期中(如果您的意思是每个日期都有一个族,请注意,建议不要超过2-3个族) 如果你想要一种相对有效的存储方式,我建议你改变你的结构 关键字0xdate并将日期存储在时间戳中,然后将一些1字节的值作为数据(这样就存在一行) 在存储方面,它将与您当前的解决方案相同(加上2个字节,您可以通过缩短族和限定符名称来抵消这些字节),并且您将能够扫描时间戳或一系列时间戳(分别为和),这将更有效,因为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
}
}