BigQuery表设计最佳实践:日期分区和分片的组合?

问题描述 投票:0回答:1

我们正在将本地Oracle数据库迁移到云中。最大的项目是移动我们的事实表来跟踪客户交易。

简短问题:当由于4,000个分区限制而无法使用日期字段进行分区时,在BigQuery中对事实表进行分片/分区的最佳方法是什么?目标是最大化查询性能并最小化成本。


详细问题我不想在BigQuery中复制表格,因为我希望针对BigQuery进行优化。因此,我一直在研究分区,分片和群集。也正在研究非规范化,但这是一个不同的问题。

在我们的Oracle数据库中,我们仅按整数日期YYYYMMDD进行分区。我不相信我们可以在BigQuery中做到这一点,但是由于一个表只能有4,000个分区。如果我们按天分区,则表只能包含少于11(4000/365)年的数据,这远低于我们当前需要迁移的数据。

当然,除了日期(例如站点位置)以外,我们还可以划分其他字段,但是我认为日期可能是最好的。

以下是我正在考虑的选项。假设该表包含datetimeorder_date和整数日期版本order_date_id

  1. 按年份分片(即2001年所有带有order_date的订单进入my_table_2001,按order_date划分每个表
  2. 不分片,有一个大表,并为年份(order_year)创建一个整数列,并将其用于分区列
  3. 由另一列分片(例如,站点位置),然后按order_year进行分区
  4. order_year分割另一列(例如站点位置),由order_date分区

如果要使用分片表,我绝对希望使用datetime列进行分区,以便可以使用通配符查询所有分片表。我发现使用整数范围进行分区会阻止您使用通配符。

还要注意,如果不是所有可用数据,业务用户可能希望一致地查询大日期范围的数据。

database-design google-bigquery partitioning sharding
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.