我有一个 Hbase 表“http_access_log”,现在我想在上面使用 Apache phoenix for SQL。
我应该创建凤凰视图或表来映射 hbase 表吗?而如果hbase api 更新了hbase table,phoenix view 或者table 会更新吗?
如果您有一个预先存在的表,则必须创建一个视图来访问它:
create view "http_access_log_v" (pk VARCHAR PRIMARY KEY, "colfam1"."colum1" VARCHAR, "colfam1"."colum2" VARCHAR) as select * from "http_access_log";
有了上面的视图,您就可以像这样对它进行选择:
select * from http_access_log_v;
假设我有一个 HBase 表“配置”。我无法通过 Phoenix 直接针对此表进行选择。
sqlline> select * from "config";
Error: ERROR 1012 (42M03): Table undefined. tableName=config (state=42M03,code=1012)
select * from "config"
但是,如果我针对这个 HBase 表创建一个视图:
sqlline> create view "config-data" (pk VARCHAR PRIMARY KEY, "data"."id" VARCHAR, "data"."categoryName" VARCHAR) as select * from "config";
No rows affected (1.588 seconds)
然后,我可以查询已在 Phoenix SQL 视图中配置的可用列的子集:
sqlline> select * from "config-data";
+------------------------------------------+------------------------------------------+------------------------------------------+
| PK | id | categoryName |
+------------------------------------------+------------------------------------------+------------------------------------------+
| QA-AA00|D|MC|MSG|C10|M3 | null | null |
| QA-AA00|D|MC|MSG|C2|M1 | null | null |
...
而且我仍然无法直接查询 HBase 表:
sqlline> select * from "config"; Error: ERROR 1012 (42M03): Table undefined. tableName=config (state=42M03,code=1012)
根据文件:
https://phoenix.apache.org/faq.html#How_I_map_Phoenix_table_to_an_existing_HBase_table
您必须创建一个具有相同名称和所需架构的视图。