如何使用Hbase客户端将操作与过去的创建日期一起插入BigTable中的列

问题描述 投票:1回答:1

我正在尝试执行一个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?

google-cloud-platform bigtable google-cloud-bigtable
1个回答
0
投票

我不太清楚你想要完成什么,但正如另一位评论者所指出的那样,问题是时间戳Cloud Bigtable时间戳必须是非负的。

在这种情况下,问题在于,如您所知,写入时您的creationTime具有负值,并且时间戳值必须是正值,从Unix时期解释为任何基于时间的GC表达式的毫秒。

看起来你真正想要的是计算colFam_TTL - 现在,而不是相反,并将其钳制为0。

© www.soinside.com 2019 - 2024. All rights reserved.