让所有家庭都在hbase中

让所有家庭都在hbase中,hbase,Hbase,我有一张hbase表,上面有 行:字,族:日期 我想用扫描仪扫描日期“d”上的所有单词,我该怎么做?因此,我不想指定行值。您的问题不清楚您试图从何处获取扫描仪,因此我将把它视为来自HBase命令行。我已经使用thrift库与hbase交互,CLI命令很明显就是这样翻译的。我想它们也能很好地转换到任何其他你正在使用扫描仪的界面上 要获取特定列族的所有行,可以使用以下命令 scan 'table_name', {COLUMNS => 'col_family:'} 对于您的情况(减去“tabl

我有一张hbase表,上面有

行:字,族:日期


我想用扫描仪扫描日期“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
           }
     }