无法通过 phoenix 从 hbase 上的现有 table 读取数据

Can't read data from existing table on hbase via phoenix

使用java通过phoenix查询Hbase时遇到如下问题: 我的连接正常,所以我使用此查询从 SYSTEM.CATALOG 获取所有数据:

SELECT * FROM SYSTEM.CATALOG

它给我的结果是:

TENANT_ID TABLE_SCHEM TABLE_NAME ...

null      DEVLOCAL    BASE_COMMENTS ...
null      SYSTEM      CATALOG ...
null      g           edges ...
null      g           messages ...
...

我猜 g.edge 确实存在,所以我尝试:

Select * from g.edges

问题从这里开始:

Exception in thread "main" org.apache.phoenix.schema.TableNotFoundException: ERROR 1012 (42M03): Table undefined. tableName=G.EDGES
at org.apache.phoenix.query.ConnectionQueryServicesImpl.getAllTableRegions(ConnectionQueryServicesImpl.java:575)
at org.apache.phoenix.iterate.DefaultParallelScanGrouper.getRegionBoundaries(DefaultParallelScanGrouper.java:72)
at org.apache.phoenix.iterate.BaseResultIterators.getRegionBoundaries(BaseResultIterators.java:529)
at org.apache.phoenix.iterate.BaseResultIterators.getParallelScans(BaseResultIterators.java:696)
at org.apache.phoenix.iterate.BaseResultIterators.getParallelScans(BaseResultIterators.java:627)
at org.apache.phoenix.iterate.BaseResultIterators.<init>(BaseResultIterators.java:499)
at org.apache.phoenix.iterate.ParallelIterators.<init>(ParallelIterators.java:62)
at org.apache.phoenix.execute.ScanPlan.newIterator(ScanPlan.java:242)
at org.apache.phoenix.execute.BaseQueryPlan.iterator(BaseQueryPlan.java:351)
at org.apache.phoenix.execute.BaseQueryPlan.iterator(BaseQueryPlan.java:212)
at org.apache.phoenix.execute.BaseQueryPlan.iterator(BaseQueryPlan.java:207)
at org.apache.phoenix.execute.BaseQueryPlan.iterator(BaseQueryPlan.java:202)
at org.apache.phoenix.jdbc.PhoenixStatement.call(PhoenixStatement.java:310)
at org.apache.phoenix.jdbc.PhoenixStatement.call(PhoenixStatement.java:290)
at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:289)
at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:283)
at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:1706)
at HbaseDataProvider.query(HbaseDataProvider.java:29)
at Main.main(Main.java:10)

... G.EDGES 不存在。我尝试 "g"."edges" 不是大写,但仍然给我这样的错误 如果我误解了什么,请给我一个想法或告诉我。 谢谢!

哦,我解决了我的问题。那是缺少凤凰造成的。实际上,apache phoenix 不会从 hbase 自动同步其元数据,因此如果您使用 hbase shell 创建了 table,您首先必须使用相同的 table 创建 table ] 名称,phoenix 中的模式名称,以便 phoenix 可以从 hbase 同步元数据。我的错是我没有仔细阅读文档。 这是参考:https://phoenix.apache.org/faq.html