大数据SQL如何实现笛卡尔积

本文探讨了如何在SQL中利用笛卡尔积和JOIN操作生成大量数据,特别强调了CROSSJOIN和等于1连接的用法。同时,作者指出在处理大数据时需谨慎,并分享了笛卡尔积在统计窗口分析中的应用。最后,涉及从A表过滤B表数据的方法。
摘要由CSDN通过智能技术生成

根据笛卡尔积的定义,JOIN的两表中的任意一行都会形成一组关系对,如果A表有N条记录,B表有M条记录,A X B 会生产N*M条数据。
1. 可以通过" CROSS JOIN " 来实现笛卡尔积select * from A cross join b。
2. 如果不支持CROSS JOIN的情况下,可以采用 "select * from A join B on 1 = 1" 的方式实现。
3. 第二种方法可能在语法检测阶段就报错不支持,可以转成如下语法

select * from 
(select * , '1' as flag from A)
t1 on
(select *, '1' as flag from B)
t2 where t1.flag = t2.flag


笛卡尔积会产生大量的数据,对内存、计算资源都会产生巨大压力,慎用!但是这种用法在应对需要统计不同窗口长度的指标时(如从订单表中计算7天、30天、90天内不同商户25%分位的订单金额或不重复的客户数量--具体使用会在SQL实践文章中详细说明)有很大帮助,可以减少重复代码量,也能避免重复读表。

下次聊聊在从A表中过筛选出或者排除掉 包含在名单表B中 的客户数据

(觉得写得不错就点个赞吧, 头条号: 风控数据开发-唔崎 欢迎关注)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GDRetop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值