Как обновить row_timestamp Phoenix Hbase

Я использую HBase 1.1, Phoenix 4.7. Следуя этой ссылке о метке времени строки (сопоставление собственной метки времени строки HBase со столбцом Phoenix): https://phoenix.apache.org/rowtimestamp.html

Я создал образец таблицы

CREATE TABLE DESTINATION_METRICS_TABLE
(CREATED_DATE DATE NOT NULL,
METRIC_ID CHAR(15) NOT NULL,
METRIC_VALUE LONG
CONSTRAINT PK PRIMARY KEY(CREATED_DATE ROW_TIMESTAMP, METRIC_ID))
SALT_BUCKETS = 8;

и вставьте ряд

UPSERT INTO DESTINATION_METRICS_TABLE (METRIC_ID, METRIC_VALUE) VALUES (?, ?) - this sets the value of CREATED_DATE to the server side time

Но похоже, что Phoenix не обрабатывает автоматически row_timestamp CREATED_DATE.

Мой код Java не работает:

String sql = "UPSERT INTO DESTINATION_METRICS_TABLE (METRIC_ID, METRIC_VALUE) VALUES (?, ?)";

ps = connection.prepareStatement(sql);
connection.setAutoCommit(false);

ps.setString(1, "asdasd");
ps.setString(2, "123123");

ps.executeUpdate()

Я получаю сообщение об ошибке:

org.apache.phoenix.schema.TypeMismatchException: ERROR 203 (22005): Type mismatch. VARCHAR cannot be coerced to BIGINT

Кто-нибудь дает мне пример синтаксиса UPSERT для row_stamp Apache Phoenix?

Заранее спасибо.


person Amateur    schedule 23.05.2018    source источник


Ответы (1)


Пробовал те же операторы create / upsert в своей среде. Прежде всего, оператор create вызывает проблему со следующей ошибкой для столбца METRIC_VALUE.

Ошибка: ОШИБКА 201 (22000): недопустимые данные. Неподдерживаемый тип sql: LONG (состояние = 22000, код = 201)

Я изменил тип на double и CREATE TABLE, и UPSERT также работал. Проблема в следующей строке, которая задает строку для столбца числового типа.

ps.setString(2, "123123");
person vmaroli    schedule 25.05.2018