Вид Phoenix поверх существующей таблицы hbase работает, но таблица Phoenix не работает - PullRequest
0 голосов
/ 15 ноября 2018

Я новичок в HBase и Phoenix. У меня проблема с отображением существующей таблицы HBase в Phoenix. Мое конечное намерение здесь состоит в том, чтобы я мог обновлять существующие строки таблицы HBase, а также вставлять в нее новые строки с помощью Phoenix SQL. Моя таблица в HBASE выглядит следующим образом (в семействе столбцов CASEDETAILS пять столбцов):

CASES
COLUMN FAMILIES DESCRIPTION
{NAME => 'CASEDETAILS', BLOOMFILTER => 'NONE', VERSIONS => '2', IN_MEMORY => 
'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL 
=> 'FOREVER',COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 
'false', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}

Когда я создаю представление над этой таблицей с помощью команды

create view CASES( pk VARCHAR PRIMARY KEY,
                    CASEDETAILS.CASEID VARCHAR,
                    CASEDETAILS.CREATED VARCHAR,
                    CASEDETAILS.CREATEDBY VARCHAR,
                    CASEDETAILS.MBI VARCHAR,
                    CASEDETAILS.MEMBER VARCHAR);

это работает, и я могу получить данные из таблицы с помощью запроса select, но я не могу обновить ни строки, ни вставить новые строки. Выдает ошибку «Таблица только для чтения»

Но когда в приведенной выше команде создания Phoenix я заменяю "view" на "table", т.е. я пытаюсь создать таблицу с таким же именем в Phoenix; Создание таблицы успешно, но оператор выбора не работает.

Так что у меня есть несколько вопросов здесь:

1) Почему просмотр существующей таблицы Hbase работает, а таблица - нет?

2) Есть ли способ обновить существующие строки в таблице HBase, используя интерфейс Phoenix SQL?

3) Насколько важно поддерживать порядок имен столбцов и имен столбцов при отображении существующей таблицы в Phoenix?

Примечание: я изучил существующую базу данных для похожих вопросов и дошел до того, что понял, что мое мнение работает, но не таблица. Однако ни один из вопросов не смог решить мою конечную проблему, которая заключается в обновлении существующих строк существующей таблицы HBase с помощью Phoenix

1 Ответ

0 голосов
/ 19 ноября 2018

Вот ответы:

1.Просмотры также могут быть определены с более сложными предложениями WHERE, но в этом случае вы не можете использовать DML для них, поскольку вы получите исключение ReadOnlyException. Вам по-прежнему разрешено выполнять запросы через них, и их предложения WHERE будут действовать, как и в случае стандартных представлений SQL.
Как и ожидалось, вы можете создать VIEW для другого VIEW, чтобы дополнительно фильтровать набор данных. Применяются те же правила, что и выше: если в VIEW и его родительских VIEW используются только простые выражения равенства, новое представление также можно обновлять, в противном случае оно доступно только для чтения.

Более подробную информацию о представлении вы можете найти здесь: https://phoenix.apache.org/views.html

2.Да, вы можете обновить / вставить значения в таблицу phoenix, которая также обновляет базовую таблицу HBase.

UPSERT INTO TEST(NAME,ID) VALUES('foo',123);

Он вставит запись в таблицу, если она не существует, в противном случае обновите существующее значение.

3. Нет необходимости поддерживать порядок имени столбца. Имена столбцов сопоставляются с именами. По умолчанию он принимает все имена в верхнем регистре, но если вы хотите, вы можете указать в кавычках в нижнем регистре. https://phoenix.apache.org/language/index.html#create_table

...