我有一张桌子,上升海洋-426:metrics_bucket.metrics_2015_05_09
根据节点js API,检索此表的元数据,
Table was created Sat, 09 May 2015 00:12:36 GMT-Epoch 1431130356251
Table was last modified Sun, 10 May 2015 02:09:43 GMT-Epoch 1431223783125
根据我的记录,该表的最后一批插入实际上是:
Sun, 10 May 2015 00:09:36 GMT - Epoch 1431216576000.
这比报告的最后修改时间提前了两个小时。使用表装饰器,我可以显示在Epoch 1431216576000之后没有记录插入到表中,证明在我做的最后一批插入和元数据中报告的最后修改时间之间的最后两个小时内没有插入任何记录:
The query: SELECT
count(1) as count
FROM [metrics_bucket.metrics_2015_05_09@1431216577000-1431223783125];
返回零计数。而查询:
SELECT
count(1) as count
FROM [metrics_bucket.metrics_2015_05_09@1431216576000-1431216577000];
returns count: 222,891
这表明正确的最后修改时间是Sun,2015年5月10日00:09:36 GMT,而不是格林尼治标准时间02:09:43,因为元数据断言。
我正在尝试以编程方式生成一个跨越多个表和装饰器的FROM子句,因此我需要准确的创建和表的最后修改时间,以确定何时可以省略装饰器,因为时间范围跨越整个表。但是,由于这个时间差异,我无法消除表装饰器。
问题是,我是否正在查看正确的元数据以获取正确的创建和最后修改信息?
答案 0 :(得分:2)
简短回答:您确实在查看正确的元数据。
答案很长: 最后修改时间包括一些内部压缩数据的时间,与数据更改无关。使用装饰器结束于1431223783125或1431216576000对您的表执行查询会产生相同的结果,就像您的实验所示,但稍后执行包括我们的存储效率改进,可能略微改善执行时间和效率。我们认为这是一个错误,并将很快更新API以返回最后一次用户修改时间。
与此同时,除了添加的查询文本之外,包含非真正需要的表装饰器也没有什么坏处。查询成本或性能都不会改变。