Big Query Table Last Modified Timestamp 与上次插入表的时间不对应
Posted
技术标签:
【中文标题】Big Query Table Last Modified Timestamp 与上次插入表的时间不对应【英文标题】:Big Query Table Last Modified Timestamp does not correspond to time of last table insertion 【发布时间】:2015-05-10 18:35:57 【问题描述】:我有一张桌子,rising-ocean-426:metrics_bucket.metrics_2015_05_09
根据node 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
这表明正确的最后修改时间是星期日,2015 年 5 月 10 日 00:09:36 GMT,而不是元数据断言的 02:09:43 GMT。
我正在尝试以编程方式生成一个跨多个带有装饰器的表的 FROM 子句,因此我需要准确地创建表和最后修改表的时间,以确定何时可以省略装饰器,因为时间范围跨越整个表。但是,由于这个时间差异,我无法消除表格装饰器。
问题是,我是否正在查看正确的元数据以获得正确的创建和最后修改信息?
【问题讨论】:
【参考方案1】:简短回答:您确实在查看正确的元数据。
长答案: 最后修改时间包括一些内部压缩数据的时间,与数据变化无关。使用以 1431223783125 或 1431216576000 结尾的装饰器对您的表执行查询会产生相同的结果,就像您的实验显示的那样,但稍后执行包括我们的存储效率改进,可能略微缩短执行时间和效率。我们认为这是一个错误,并将很快更新 API 以返回最后的用户修改时间。
同时,除了添加的查询文本之外,包含真正不需要的表装饰器并没有什么坏处。查询成本或性能都不会改变。
【讨论】:
很高兴知道最后一次插入的时间。在我的情况下,这将导致从查询的“from”子句中删除装饰器,从而默认包括内部压缩效率。谢谢你的回复。 仅供参考,我们绝对认为这是一个错误,我已经更新了答案措辞以匹配。期待尽快修复! 太好了,马修,谢谢! 根据我们的内部错误跟踪器,这似乎已修复。以上是关于Big Query Table Last Modified Timestamp 与上次插入表的时间不对应的主要内容,如果未能解决你的问题,请参考以下文章
如何用 Google Big Query Table 中的另一个分区重写一个分区?
Google Big Query Error: CSV table 遇到太多错误,放弃。行:1 错误:1
减少查询大小:根据最新日期将新数据附加到 Big Query 表
如何使用通配符表语法(如 _TABLE_SUFFIX)加入 INFORMATION_SCHEMA 元数据,以便在 Google Big Query 中通过 table_name 获得结果