我们正在将本地Oracle数据库迁移到云中。最大的项目是移动我们的事实表来跟踪客户交易。
简短问题:当由于4,000个分区限制而无法使用日期字段进行分区时,在BigQuery中对事实表进行分片/分区的最佳方法是什么?目标是最大化查询性能并最小化成本。
详细问题我不想在BigQuery中复制表格,因为我希望针对BigQuery进行优化。因此,我一直在研究分区,分片和群集。也正在研究非规范化,但这是一个不同的问题。
在我们的Oracle数据库中,我们仅按整数日期YYYYMMDD
进行分区。我不相信我们可以在BigQuery中做到这一点,但是由于一个表只能有4,000个分区。如果我们按天分区,则表只能包含少于11(4000/365)年的数据,这远低于我们当前需要迁移的数据。
当然,除了日期(例如站点位置)以外,我们还可以划分其他字段,但是我认为日期可能是最好的。
以下是我正在考虑的选项。假设该表包含datetime
列order_date
和整数日期版本order_date_id
order_date
的订单进入my_table_2001
,按order_date
划分每个表order_year
)创建一个整数列,并将其用于分区列order_year
进行分区order_year
分割和另一列(例如站点位置),由order_date
分区如果要使用分片表,我绝对希望使用datetime
列进行分区,以便可以使用通配符查询所有分片表。我发现使用整数范围进行分区会阻止您使用通配符。
还要注意,如果不是所有可用数据,业务用户可能希望一致地查询大日期范围的数据。