我们目前有一个建议的架构,用于处理BigQuery的追加性质,以支持我们系统中的仪表板和报告功能。我们有许多客户表(租户) - 比方说每个客户一张表。每个表都包含一个主要NoSQL数据存储的BigQuery“镜像” - 一个记录列表。我们希望将BigQuery用作为客户推动这些事件的报告和仪表板的工具。
客户可能会对这些记录进行更新 - 这些更新需要反映在BigQuery中。我们正在考虑为每个主表维护一个名为“Reconcile”的辅助表,该表存储最后一次(例如10分钟)的更新(或删除)。然后,每隔10分钟,我们将从“Reconcile”表中选择所有数据,并从主表中选择所有数据,减去Reconcile表中的行,以创建新的最新视图。
(Old Table - 'Reconcile' Rows) + Reconcile => New Table
Drop Old Table, Truncate Reconcile Table
我们的挑战是,一些客户表可以是10,20,30GB大。每10分钟运行一次的重新实现过程很快就会变得昂贵。
是否有更多(成本)或技术上有效的方法来复制BigQuery中的表而不会产生这种大型操作(及其相关成本)?我们并不真的想要使用DML,并且不希望每个查询的范围都要搜索每条记录的“最新”行(尽管这个答案Does Google BigQuery/ Amazon Redshift use column-based relational database or NoSQL database?很好地解释了它)。