Как вставить столбец в BigTable с помощью операции Hbase Client Put с датой прошлого создания - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь выполнить операцию Put клиента HBase с вычисленной временной меткой, эквивалентной году «Четверг 21 сентября 12:50:34 ПО ВОСТОЧНОМУ ВРЕМЕНИ 1950 года», что является отрицательным значением.

Вариант использования: Установка даты прошлого создания для выполнения ожидаемого TTL для значений

Ссылка: Как установить будущую дату вставки в Google Cloud Bigtable?Попытка вычислить его, используя TTL

Ошибка:

Caused by: java.lang.IllegalArgumentException: Timestamp cannot be negative. ts=-608368165717 

Код:

long now = System.currentTimeMillis();
long colFam_TTL = cfDescriptor1.getTimeToLive() * 1000; // TTL: Forever => 2147483647 Seconds
long expiry_past = now - colFam_TTL;
long creationTime = (expiry_past + 3600000); // Expected TTL : 1 hour(3600000 ms)
Put p = new Put(rowkey, creationTime);

Расчет работает хорошо для семейств столбцов с TTL, установленным как maxage: 1h или maxage: 5d

Есть ли обходной путь для этого?Как мне установить аналогичный тс?

1 Ответ

0 голосов
/ 13 февраля 2019

Я не совсем понимаю, что вы пытаетесь достичь, но, как заметил другой комментатор, проблема в том, что временные метки временные метки Cloud Bigtable должны быть неотрицательными.

В этом случае проблема заключается в том, что, как вы заметили, при написании ваше creationTime имеет отрицательное значение, а значение отметки времени должно быть положительным значением, интерпретируемым как миллисекунды из эпохи Unix для любой из основанных на времениGC выражения.

Похоже, что вы действительно хотите вычислить colFam_TTL - сейчас, а не наоборот, и зафиксировать его на 0.

...