Google cloud platform 如何使用具有过去创建日期的Hbase客户端Put操作在BigTable中插入列

Google cloud platform 如何使用具有过去创建日期的Hbase客户端Put操作在BigTable中插入列,google-cloud-platform,bigtable,google-cloud-bigtable,Google Cloud Platform,Bigtable,Google Cloud Bigtable,我正在尝试执行HBase客户端Put操作,计算的时间戳相当于年份“Thu Sep 21 12:50:34 EDT 1950”,这是一个负值 用例:设置过去的创建日期以对值执行预期的TTL 参考资料: Caused by: java.lang.IllegalArgumentException: Timestamp cannot be negative. ts=-608368165717 错误: Caused by: java.lang.IllegalArgumentException: Tim

我正在尝试执行HBase客户端Put操作,计算的时间戳相当于年份“Thu Sep 21 12:50:34 EDT 1950”,这是一个负值

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

参考资料:

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

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?

我不太清楚您想要实现什么,但正如另一位评论者所指出的,问题是时间戳必须是非负的

在本例中,问题在于,正如您所指出的,编写时creationTime的值为负值,时间戳的值必须为正值,对于任何基于时间的GC表达式,都被解释为从Unix历元开始的毫秒数


看起来你真正想要的是现在计算colFam_TTL,而不是相反,然后将它钳制在0

你的问题只是消极的开始日期。所以为了克服这个问题,你可以改变你所有的日期。例如,将所有日期加上50年。