问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

SQL应用笛卡尔积(Cartesian Product)的场景

创作时间:
作者:
@小白创作中心

SQL应用笛卡尔积(Cartesian Product)的场景

引用
CSDN
1.
https://m.blog.csdn.net/lp391930474/article/details/145247949

SQL笛卡尔积(Cartesian Product)是数据库操作中的一个基础概念,但其应用场景远不止表面所见。本文将通过几个具体的业务场景,展示笛卡尔积在数据处理中的实用价值。

引言

SQL笛卡尔积大家都不陌生,在数据库技术中算是基础的基础。但这么基础的逻辑,一样可以有一些很实用的应用,今天就罗列一些用不到的场景。

SQL笛卡尔积应用场景举例

场景1:商品日销售量汇总

场景描述:首先一个应用就是与日期相关的统计预测。比如在销售报表中常见的【商品日销售统计】,它要求统计每一个商品在每一天的销售量和销售额。这里的特别之处是即便某个商品在某一天没有销售,仍要显示一条该产品在这一天的记录,只是对应指标显示为0或空。这里的方案就是先将产品和日期先笛卡尔积,再跟销售数据表关联去统计。

场景2:单记录表(single record table)广播

场景描述:在对大表做一些查询计算时,可能用到若干个参数值,而这些参数又是基于其它一些维表或者逻辑计算所得。那么一个规避表关联和hardcode 的方式就是先将参数构造成一条记录中,比如“lastRefresh Date”,“YTDdays”,“isOpenId”...然后让这个表去cross join 整个大表,以达到将单条记录广播到整个大表每一行,并参与计算。

场景3:计算月累计MTD 或者年 YTD

场景描述:MTD 和 YTD 是 BI 或者报表中非常常见的应用,现在大多BI工具都可自动计算,而在数据库中也可以用开窗函数实现。但在一些低版本的数据库,或者某些限制情况下,我们只能应用基本的SQL。这个时候我们可以让业务表自关联,构造一个笛卡尔积,然后再应用我们的计算逻辑。当然数据量大时这样做是危险的,能怎么优化,这只能去具体问题具体分析了。

场景4:生成Junk Dimension(杂项维度表)

场景描述:Junk Dimension 是Kim Ball在维度建模里面引入的一个概念。本质上就是将一些小的维表,合并进一个大的宽的维度表。这样可以有效减小事实表的大小,并且让模型表易用一些。 那么生成整个Junk Dimension 就可以直接让小的维表笛卡尔积下。

总结

项目中用到笛卡尔积的地方还有很多,以上只是罗列工作中一些常见的。你还遇到过什么样的场景实用笛卡尔积,欢迎评论区讨论!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号