Phoenix сопоставить существующую таблицу HBase

У меня есть таблица Hbase "http_access_log", теперь я хочу использовать на ней Apache Phoenix для SQL.

Должен ли я создать представление феникса или таблицу для сопоставления таблицы hbase? И если таблица hbase обновляется с помощью hbase api, будет ли обновляться представление или таблица Phoenix?


person robertc    schedule 24.04.2015    source источник
comment
Добро пожаловать в Stackoverflow. Возможно, вы захотите сослаться на эту ссылку stackoverflow.com/help/how-to-ask   -  person Nagama Inamdar    schedule 24.04.2015


Ответы (2)


Если у вас есть уже существующая таблица, вам нужно будет создать представление для доступа к ней:

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)

использованная литература

person slm    schedule 17.12.2015
comment
Это действительно работает? Если таблица не существует в Phoenix, как вы можете ссылаться на нее (http_access_log)? - person Thomas Decaux; 23.12.2015
comment
@ThomasDecaux это определенно работает, вам нужно создать представление и запрос против него, это уже существующая таблица hbase. - person slm; 23.12.2015
comment
Но http_access_log не найден для Phoenix, я считаю, что вам нужно создать представление с тем же именем, что и чистая таблица HBase, isnit? - person Thomas Decaux; 23.12.2015
comment
@ThomasDecaux - нет, вам не нужно создавать представление с тем же именем. Представление по сути похоже на таблицу, за исключением того, что оно имеет собственное подмножество столбцов, которые сопоставляются либо с другой таблицей, либо с выбранным. Таблицы в HBase недоступны напрямую через SQL в Phoenix. Вы должны создать представление, если оно уже существует, и сопоставить столбцы в таблице HBase со столбцами в представлении. - person slm; 23.12.2015
comment
Здесь http_access_log не является таблицей Phoenix, поэтому вы не можете использовать ее в Phoenix. - person Thomas Decaux; 23.12.2015
comment
@ThomasDecaux - Я не понимаю, что вы говорите. В приведенном выше примере создается представление (http_access_log_v), с которым я затем могу выполнять запросы. Это представление извлекает столбцы из таблицы HBase, http_access_log с помощью select * from http_access_log, для которого было создано представление. - person slm; 23.12.2015
comment
Где вы это видели в документе? (как выбрать * из ...) Вот что я получил в интерфейсе командной строки Phoenix b3.ms/Oq5nR46G90wB Вы можно увидеть, что чистый HBase toto не определен для Phoenix. Может это баг? - person Thomas Decaux; 24.12.2015

Согласно документации:

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

Вы должны создать представление с тем же именем и нужной схемой.

person Thomas Decaux    schedule 23.12.2015