需要关于基于非日期列和日期分区在 bigquery 中拆分表的建议

Posted

技术标签:

【中文标题】需要关于基于非日期列和日期分区在 bigquery 中拆分表的建议【英文标题】:Need suggestion on splitting table in bigquery based on non-date column along with date partition 【发布时间】:2019-05-20 05:56:25 【问题描述】:

我们有一个日期分区表,其中包含 5 年(每日增量负载)的数​​据,其中包含数百万条记录。为了提高性能,考虑基于非日期字段(id)拆分表,因为所有查询都将在该列(id)上包含 where 子句。并且还使用日期分区对每个拆分表进行分区,以便我们可以查询具有日期范围的较小数据集。我们不会使用通配符表,因为我们将知道 id 并计划将其附加到表中并针对该特定表运行查询。需要知道这是否是追求提高性能和降低查询成本的好选择。

[更新]:我们继续并根据 id 列(tablename_id)拆分表,并将表日期与查询中常用的 4 个其他列(最大支持)进行分区和聚集.这样,我们能够获得更好的性能,并减少每个查询访问的数据。根据测试,只要避免对表进行通配符查询,并且 Bigquery 支持基于非日期/非日期时间列的分区,它似乎是一个不错的选择。

【问题讨论】:

cloud.google.com/bigquery/docs/clustered-tables 感谢@ElliottBrossard。我们已经将表与其他 4 个列聚集在一起。我们尝试了基于 id 的拆分表方法,并按日期和集群进行分区。拆分表方法减少了执行查询所花费的时间,并减少了为返回结果而处理的数据量。在 Bigquery 支持基于非日期/非日期时间列的分区之前,这似乎是一个不错的选择。 太好了!我看到您更新了问题,但考虑将您的发现添加为答案,以帮助人们在未来找到它。谢谢! @ElliottBrossard 我添加了与答案相同的方法和统计数据。 【参考方案1】:

我们根据创建多个表的 id 列拆分表。每个拆分表都是日期列上的分区。除此之外,我们根据需要将它作为其他 4 列上的聚集表。在下面的示例数据集上查找性能。 Old Table(UserInfo) 有超过 500,000 行。我们捕获的统计数据是针对给定日期范围和 id、旧表(非拆分/组合表)和拆分表(基于 ID 拆分)在处理的数据量和同一查询所用时间方面的性能.

【讨论】:

【参考方案2】:

这是不可能的。 BigQuery 不支持对非日期列进行分区。

有一个feature request。我建议subscribing 继续接收有关其可用性的信息。

【讨论】:

感谢您的回复。我知道按非日期列分区现在不可用。但是我们已经通过拆分表并使其日期分区来解决问题。我提供了与答案相同的方法和统计数据。

以上是关于需要关于基于非日期列和日期分区在 bigquery 中拆分表的建议的主要内容,如果未能解决你的问题,请参考以下文章

列中的 BigQuery 日期分区

在 2 TB 数据的 BigQuery 中进行日期分区的有效方法是啥?

BigQuery 日期分区视图

使用 python 将历史数据从谷歌云存储移动到日期分区的 bigquery 表

按日期时间 Google BigQuery 分区

BigQuery、日期分区表和装饰器