Bigquery 去特征化

Posted

技术标签:

【中文标题】Bigquery 去特征化【英文标题】:Bigquery denomalization 【发布时间】:2016-10-20 19:03:02 【问题描述】:

在 Google Bigquery(或类似数据库)中,非规范化数据和不重复数据之间的适当平衡是什么?

例如,我们有带有列的table_1

日期 值A 值 B

另一个table_2 有列

日期 值 B 值 C

table_1 大约比table_2 大 10 000 倍,因此创建包含所有三列的表会复制大量数据。而table_2 用于其他一些情况,所以分开可能是有意义的

感谢您的任何见解

思考这个问题的最佳方式是什么?

【问题讨论】:

您是否对这些进行了成本方面的比较?请记住,目前 20 美元等于 BigQuery 上的 1TB 数据。我觉得现在的存储比我们想象的要便宜,只是我们根据需要多次重复使用数据。 与其说是成本问题,不如说是数据管理问题。你说得对,现在存储是如此便宜。我担心的是,很难从加载和维护 POV 中管理大量数据。 【参考方案1】:

除非对数据进行非规范化会导致存储成本大幅增加(这不太可能),否则最好将其完全非规范化。

Bigquery 可能会执行得更快,并且查询会更容易设置。尽量减少存储的数据量并没有什么好处,而且当您需要重新连接表时,您需要付出查询时间和查询成本。

如果您有一些大表和小表的混合,并且您并不总是需要参考大表进行查询,则将表分开可能会带来实际好处,并且可能会降低查询成本。

【讨论】:

【参考方案2】:

考虑到 table1 比 table2 大 10000 倍,我不会对数据进行非规范化。如果只使用表 2 中的数据运行查询,您将支付 10000 倍以上的费用。

为了做出决定,我将分析将列 C 与 A 连接起来的查询的频率,以了解非规范化的成本是否得到回报。 BigQuery 中的联接很昂贵,但如果不经常发生,仍然可以负担得起。

【讨论】:

以上是关于Bigquery 去特征化的主要内容,如果未能解决你的问题,请参考以下文章

如何安全地为 bigquery 节点插入转义用户输入?可以在 bigquery.insert 节点库上使用参数化查询吗?

BigQuery 在参数化查询中使用数组

将参数化 BigQuery 自定义查询连接到数据洞察

使用窗口化时 BigQuery 不会返回结果

如何获取参数化 BigQuery 查询的控制台视图?

BigQuery - 股票分类帐的窗口化