我在下面的代码片段中使用Phoenix JDBC Driver创建了一个HBase表:
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
正常工作,并返回请求的表信息。
但是当我尝试例如http://server-url:12345/PHOENIXTEST/5
(5是第一个插入行的键,请参阅上面的代码),我收到一条Not found
消息。
如何通过HBase REST服务获取数据?
答案 0 :(得分:1)
您可能对Phoenix如何编码存储在HBase表中的数据以及本机REST API尝试查找密钥的方式存在问题。
查看关于BIGINT的data types的Phoenix文档,它说:
二进制表示为8字节长,符号位翻转 (以便负值在正值之前排序)。
所以你应该看一下实际插入到你表中的内容。 HBase REST API可能正在使用不同的编码来查找密钥,因此无法找到它。
答案 1 :(得分:1)