2016-06-28 70 views
2

獲得鳳凰表中的數據,我創建使用鳳凰JDBC驅動程序在下面的代碼片段一個HBase的表:如何通過HBase的REST服務

Class.forName("org.apache.phoenix.jdbc.PhoenixDriver"); 
    Connection conn = DriverManager.getConnection("jdbc:phoenix:serverurl:/hbase-unsecure"); 
    System.out.println("got connection"); 

    conn.createStatement().execute("CREATE TABLE IF NOT EXISTS phoenixtest (id BIGINT not null primary key, test VARCHAR)"); 

    int inserted = conn.createStatement().executeUpdate("UPSERT INTO phoenixtest VALUES (5, '13%')"); 
    conn.commit(); 

    System.out.println("Inserted or updated " + inserted + " rows"); 

    ResultSet rst = conn.createStatement().executeQuery("select * from phoenixtest"); 

    while (rst.next()) { 
     System.out.println(rst.getString(1) + " " + rst.getString(2)); 
    } 

創建表和表循環正常工作。

現在我試圖通過HBase REST服務獲取表格數據,因爲我從「本機」HBase編程中知道它。

http://server-url:12345/PHOENIXTEST/schema工作正常,並還給請求表信息的URL。

但是當我嘗試例如http://server-url:12345/PHOENIXTEST/5(5是第一個插入行的關鍵字,見上面的代碼),我得到一個Not found消息。

我怎樣才能獲得通過HBase的REST服務的數據?

回答

1

你可能有鳳凰如何編碼它存儲在HBase的表中的數據,VS原生REST API將如何試圖找到一個關鍵的問題。

綜觀上data types鳳凰文檔BIGINT它說:

二進制表示是8字節長符號位翻轉 (使負值各種各樣之前正值)。

所以你應該看看實際上已經插入到表中的內容。 HBase REST API可能正在尋找使用不同編碼的密鑰,因此無法找到它。

1

你真的應該使用鳳不HBase的從鳳凰表中獲取數據。鳳凰使用的是自定義編碼爲IntegerBigIntsalting(如果你使用的話)。

鳳凰也大多用於存儲數據和StringBinary編碼它使用字節。所以很多機會,你的鑰匙不是5,但是\ x80 \ x00 \ x00 \ x05(Integer)

相關問題