У меня проблемы с записью данных из HBase и чтением их с помощью Phoenix.Вот шаги, чтобы воспроизвести проблему:
Создайте таблицу, используя Phoenix.
CREATE TABLE test (
id varchar not null,
t1.a unsigned_int,
t1.b varchar
CONSTRAINT pk PRIMARY KEY (id))
COLUMN_ENCODED_BYTES = 0;
Если я добавлю информацию в таблицу, используя Phoenix, используя Upsert
upsert into test (id, t1.a, t1.b) values ('a1',1,'foo_a');
И я пытаюсь запросить таблицу, я получаю это:
select * from test;
+-----+----+--------+
| ID | A | B |
+-----+----+--------+
| a1 | 1 | foo_a |
+-----+----+--------+
На данный момент все работает, как ожидалось, но теперь я собираюсь добавить новую запись, используя HBase напрямую.
put 'TEST', 'id_1','T1:A', 2
put 'TEST', 'id_1','T1:B','some text'
После этого я больше не могу запрашивать таблицу, получая это:
select * from test;
Error: ERROR 201 (22000): Illegal data. Expected length of at least 4 bytes, but had 1 (state=22000,code=201)
Я знаю, что проблема связана с тем, как HBase хранит unsigned_int, и если я удаляю этот столбец из таблицы,запросы снова будут работать.Как решить эту проблему?