【问题标题】:Big Query Append New RowsBig Query 追加新行
【发布时间】:2015-01-27 19:41:35
【问题描述】:

在这个答案中:https://stackoverflow.com/a/28039556/1473460 Pentium10 建议按日期排序以获取最新的用户行。与每次用户更新时使用增加的版本号相比,这对性能有影响吗?

【问题讨论】:

  • 按时间排序与按版本号排序之间的技术区别是什么?有其他方法可以获得相同的结果,但这个问题似乎集中在时间与 id 上?
  • 区别在于列的时间戳类型与 int 类型。这会影响查询性能吗?我想我也可以使用纪元时间戳并将其存储为 int 。我想我应该扩大我的问题范围,并询问有关将新行流式传输到 BQ 的最佳做法以及选择最新行的最佳方法(对于给定用户)。
  • @FelipeHoffa 我很想听听获得相同结果的其他方法。也许在那个答案上编辑/附加,或者一个自我回答的维基帖子。
  • @Pentium10 我在想一个 SELECT record FROM [table] a JOIN (SELECT MAX(ts) ts, id FROM [table] GROUP EACH BY id) b ON a.id=b.id和 a.ts=b.ts。由于 OVER() 有其自身的局限性,因此可能更具可扩展性。 (顺便说一句,感谢您在这里的所有回答 - 我从他们身上学到了很多东西!)
  • @FelipeHoffa - Pentium10 编写的 PARTITION BY user_id 查询将比 self JOIN 查询更好地扩展,而且它的性能也会更好,因为它只会导致对数据的单次扫描。我会使用 FIRST(email) 而不是 ROW_NUMBER() 然后在 seqnum = 1 上进行过滤,以提高执行效率,但这是一个很小的区别。

标签: google-bigquery


【解决方案1】:

时间戳在内部存储为十进制数字,因此,它们的操作方式与递增的版本号相同。唯一的性能影响是内部十进制数和在表示层表示它的格式化字符串之间的转换。有关详细信息,请参阅链接 [1] 上的“数据类型”部分。

[1]https://cloud.google.com/bigquery/preparing-data-for-bigquery

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多