如何使用过去创建日期的Hbase Client Put操作在BigTable中插入列

时间:2018-10-09 20:32:17

标签: google-cloud-platform bigtable google-cloud-bigtable

我正在尝试执行HBase客户端Put操作,该操作的计算出的时间戳等效于年份“ Thu Sep 21 12:50:34 EDT 1950”,该年份为负值。

用例:设置过去的创建日期以对值执行预期的TTL

参考: How to set a future insert date in Google Cloud Bigtable? Trying to calculate it using 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的列系列工作正常

是否有解决方法?如何设置相似的ts?

1 个答案:

答案 0 :(得分:0)

对于您要完成的任务,我还不太清楚,但是正如另一位评论者所指出的那样,问题在于,时间戳记Cloud Bigtable时间戳记必须为非负数。

在这种情况下,问题在于,正如您所指出的,在编写时,creationTime为负值,并且时间戳记值必须为正值,对于任何基于时间的GC表达式,其解释为距Unix纪元的毫秒数。

似乎您真正想要的是计算colFam_TTL-现在,而不是相反,并将其限制为0。