2011-05-01 78 views

回答

5

你的問題並不清楚你試圖從哪裏獲得掃描器,所以我會把它看作是來自HBase命令行。我已經使用了thrift庫與hbase進行交互,並且CLI命令非常明顯地轉化爲這一點。我假設他們也將很好地轉化爲你正在獲得掃描儀的任何其他界面。

要獲得所有行特定柱族,你可以使用下面的命令

scan 'table_name', {COLUMNS => 'col_family:'} 

對於你的情況(減去「表名」,因爲我不知道做)它會看起來像

scan 'yourTable', {COLUMNS => 'd:'} 

這將在列族d返回所有行。

如果您還需要指定哪些RowKeys在啓動,它看起來像

scan 'yourTable', {COLUMNS => 'd:', STARTROW => 'word'} 

該命令將在該行關鍵word的開始和點之後獲得的所有行。如果您想限制爲RowKey word,則還需要添加STOPROW。結果中不包括STOPROW。所以你不能scan 'yourTable', {COLUMNS => 'd:', STARTROW => 'word', STOPROW => 'word'}因爲這將不會返回。 指定STOPROW需要了解RowKey值的一些知識。我不知道你的價值觀,所以很難舉一個好榜樣。我經常做的是使用下一個字符(在ASCII集中)作爲我的起始行的最後一個字符。在您的例子我想嘗試

scan 'yourTable', {COLUMNS => 'd:', STARTROW => 'word', STOPROW => 'wore'} 

我不會答應這將工作的所有時間,但很可能在大多數情況下工作。也許所有的情況下,我只是沒有解決。 :)

希望有幫助。

HBase shell命令的一個很好的資源是http://wiki.apache.org/hadoop/Hbase/Shell

0

我假設你是在談論使用Java API

的掃描命令。如果我理解你正確的結構,你現在還沒有辦法以檢索日期的話,而不全表掃描。 - 你可以在掃描setFilter,但它仍然必須去每一行檢查,

你沒有指定,但我想每個單詞可以發生在許多日期(如果你的意思是你有一個家庭的每個日期然後注意,它不建議有超過2-3個家庭)

如果你想要一個相對有效的方式來存儲,我建議你改變你的結構 關鍵Word0xDate和存儲日期在TimeStamp,然後將一些字節值作爲數據(這樣一行將存在) 存儲方面,它將與您當前的解決方案相同(加上2個字節,您可以通過縮短系列和限定符名稱來抵消)和你將能夠掃描一個時間戳或一個(分別setTimestampsetTimeRange)範圍時間戳其中井是更有效的作爲HBase的將跳過文件,其中不相關的時間戳被存儲)

0

嘗試這種情況:

 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 
      } 
    }