Bigquery 去特征化
Posted
技术标签:
【中文标题】Bigquery 去特征化【英文标题】:Bigquery denomalization 【发布时间】:2016-10-20 19:03:02 【问题描述】:在 Google Bigquery(或类似数据库)中,非规范化数据和不重复数据之间的适当平衡是什么?
例如,我们有带有列的table_1
另一个table_2
有列
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 节点库上使用参数化查询吗?