Конвертировать отрицательный Java длинный в clickhouse Uint64 в подготовленном утверждении - PullRequest
0 голосов
/ 04 октября 2019

Есть ли способ конвертировать отрицательный long в Uint64 (тип данных clickhouse) перед вставкой. На данный момент

preparedStatement.setObject(columnNumber, -3108819769473315784);
preparedStatement.execute();

выбрасывает следующее исключение

ru.yandex.clickhouse.except.ClickHouseException: ClickHouse exception, code: 321, host:
localhost, port: 33493; Code: 321, e.displayText() = DB::Exception: Expression returns value
NULL, that is out of range of type UInt64, at: -3108819769473315784

Я понимаю, почему Clickhouse жалуется. Можете ли вы предложить мне какое-либо решение, как преодолеть эту проблему? Может быть какой-нибудь способ преобразовать этот отрицательный длинный объект в другой тип? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 04 октября 2019

Начиная с Java 8 вы можете использовать Long.toUnsignedString(values):

preparedStatement.setObject(columnNumber, Long.toUnsignedString( -3108819769473315784));
0 голосов
/ 04 октября 2019

Вы должны обработать значения до того, как они будут отправлены в ClickHouse.
Тем не менее, при вставке отрицательного значения в столбец типа UInt необходимо вручную преобразовать его в положительное значение / все, что вы хотитебыть представленным как в ClickHouse в диапазоне этого целевого типа.

То же самое относится, например, к. обработка null с при отправке в типы столбцов, отличные от NULL.

...