在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\', {COLUMNS => \'d:\', STARTROW => \'word\', STOPROW => \'word\'}
,因为那将不返回任何内容。 指定“ 7”需要一定的RowKey值知识。我不知道您的价值观,因此很难举一个好例子。我经常做的是将下一个字符(在ASCII码集中)用作起始行的最后一个字符。在您的示例中,我会尝试
scan \'yourTable\', {COLUMNS => \'d:\', STARTROW => \'word\', 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
           }
     }
    

要回复问题请先登录注册