【问题标题】:phoenix map existing HBase tablephoenix 映射现有 HBase 表
【发布时间】:2015-04-24 06:44:42
【问题描述】:

我有一个 Hbase 表“http_access_log”,现在我想在上面使用 Apache phoenix for SQL。

我应该创建 phoenix 视图或表来映射 hbase 表吗?而如果hbase的表被hbase api更新了,那么phoenix view或者table会不会更新呢?

【问题讨论】:

标签: sql hbase phoenix nosql


【解决方案1】:

如果您有一个预先存在的表,则必须创建一个视图来访问它:

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)

但是,如果我针对此 HBase 表的 select * from "config" 创建一个视图:

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)

参考文献

【讨论】:

  • 它真的有效吗?如果 Phoenix 上不存在该表,您如何引用它(“http_access_log”)?
  • @ThomasDecaux 它确实有效,你必须创建一个视图并查询它是否是一个预先存在的 hbase 表。
  • 但是“http_access_log”并没有找到Phoenix的,我相信你必须创建一个与纯HBase表同名的视图,不是吗?
  • @ThomasDecaux - 不,您不必创建具有相同名称的视图。视图本质上类似于表,只是它有自己的列子集,这些列映射到另一个表或选择。 HBase 中的表不能通过 Phoenix 中的 SQL 直接访问。如果它们已经存在,您必须创建一个视图,并将 HBase 表中的列映射到视图中的列。
  • 这里“http_access_log”不是Phoenix表,所以不能在Phoenix中使用。
【解决方案2】:

根据文档:

https://phoenix.apache.org/faq.html#How_I_map_Phoenix_table_to_an_existing_HBase_table

您必须创建一个具有相同名称和所需架构的视图。

【讨论】:

    猜你喜欢
    • 2020-04-28
    • 2015-05-13
    • 2017-10-29
    • 2019-04-18
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多