2014-09-03 3 views
2

Я пытаюсь использовать Apache Phoenix для запуска SQL-запросов в таблицах HBase. На основе official documetation, схема должна быть создана для существующих таблиц с запросом SQL:Phoenix меняет метаинформацию таблиц HBase

CREATE TABLE TABLE_NAME (....) 

Я пытался избежать этого путем прямого подключения к существующей таблице (созданной с HBase API) через феникс API, но я получал исключения. Дело в том, когда Phoenix выполняет этот запрос, он создает много вещей на столе. Например, в таблицах разделе Hbase приборной панели, можно увидеть следующие мета-данные, добавленные феникс к моему столику:

'QUOTES', {METHOD => 'table_att', coprocessor$1 => '|org.apache.phoenix.coprocessor.ScanRegionObserver|1|', coprocessor$2 => '|org.apache.phoenix.coprocessor.UngroupedAggregateRegionObserver|1|', coprocessor$3 => '|org.apache.phoenix.coprocessor.GroupedAggregateRegionObserver|1|', coprocessor$4 => '|org.apache.phoenix.coprocessor.ServerCachingEndpointImpl|1|', coprocessor$5 => '|org.apache.phoenix.hbase.index.Indexer|1073741823|index.builder=org.apache.phoenix.index.PhoenixIndexBuilder,org.apache.hadoop.hbase.index.codec.class=org.apache.phoenix.index.PhoenixIndexCodec'}, {NAME => '0', DATA_BLOCK_ENCODING => 'FAST_DIFF', KEEP_DELETED_CELLS => 'true'} 

Это звучит как Pheonix меняется метаинформацию таблицы (ее создает некоторые сопроцессоры и построители индексов). Разве это не создает проблемы для производства (интерферировать с кодом, использующим HBase API)? если да, то как этого избежать?

ответ

3

Да, Apache Phoenix добавляет сопроцессоры к метаданным для базовых таблиц HBase, когда вы делаете CREATE TABLE или CREATE VIEW, как задокументировано here. Они не будут мешать коду, который использует API-интерфейсы HBase, так как любая обработка, выполняемая сопроцессорами, запускается только тогда, когда специфичные для Phoenix атрибуты устанавливаются клиентом, вызывающим вызов API.

Для Phoenix VIEW сделаны только эти изменения метаданных. Для Phoenix TABLE в дополнение к этим изменениям метаданных пустая KeyValue добавляется к каждой строке таблицы. Это делается для повышения производительности, а также для предотвращения «исчезновения» строки, если для всех столбцов установлено значение null. Подробнее here.

+0

, когда вы говорите, что добавляет сопроцессоры, когда я делаю 'CREATE TABLE', значит ли я использовать phoenix без вызова этого запроса? – bachr

+1

Вы имеете в виду, можете ли вы запустить запрос в Phoenix, не вызывая сначала CREATE TABLE или CREATE VIEW в таблице? Если да, то нет. Однако вы можете [schema-on-read] (http://phoenix.apache.org/dynamic_columns.html) запросить столбцы, которые не были определены заранее. –

+0

Это немного сдерживает, так как мы не владеем таблицей hbase, поэтому мы не можем вмешиваться в ее структуру. Добавление динамически столбцов непосредственно к запросу выглядит интересным, но будет более устрашающим, если нет необходимости заранее определять схему :) – bachr

Смежные вопросы