![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SQL
大象灵感
写sql的
展开
-
验证collect_set后的数据是否比展开的数据占用空间小
验证collect_set后的数据是否比摊开的数据占用空间小?文件格式:parquet去重记录数:776885759验证方式:读取用户日志表,A表记录用户id和日志时间的去重记录,B表把用户id和该用户对应的日志时间的数组作为一行来记录。B表展开后与A表相同。两表存储的数据量是相同的。最后观察A表和B表的磁盘占用空间是否相同。实现结论:A表占用10.9G,B表占用4.7G,说明collect_set后的数据占用空间更小,节省磁盘空间57%。-- 表A:crea原创 2021-10-12 14:19:51 · 204 阅读 · 0 评论 -
数仓归因逻辑实践方案(sql实现)
分享一个相对简洁的处理归因的方式:使用下面逻辑归因的前提是归因事件类型是可枚举的,且是有一定的顺序的(其实归因事件都具备)。例如直播中的上下麦归因事件中,把同属于一组的上麦下麦的流水日志归到同一条记录中,方便后续对上下麦的各种统计。从业务上来讲,上麦下麦正常的事件发生顺序只有以下三种:申请上麦->上麦成功->下麦 上麦成功->下麦 申请上麦->取消申请然后给不同的事件类型以预期时间序列值,就是下面脚本中的action_seq。下面的截图展示了如何区分同一个序原创 2021-10-09 15:04:47 · 714 阅读 · 1 评论 -
greatest()遇到null怎么处理?
greatest(1,null) spark和hive跑出来的结果不一样,小心有坑!!!greatest在spark中如果遇到null值是被忽略的,但是在hive中直接就返回null了。原创 2021-09-28 20:33:43 · 1558 阅读 · 0 评论 -
Spark并行机制简记
几个基础概念RDD分区:Spark中的RDD就是一个不可变的分布式对象集合。每个RDD都被分为多个分区(partitions),这些分区被分发到集群中的不同节点上进行计算。每个分区对应需要启动一个task去执行该分区的数据计算。Executor:是spark任务(task)的执行单元executor下的cores:顾名思义这个参数是用来指定executor的cpu内核个数,分配更多的内核意味着executor并发能力越强,能够同时执行更多的task。下面是一个具体的case分区数:表示同原创 2021-09-26 23:16:53 · 710 阅读 · 0 评论 -
SQL优化之视图合并
下面两个脚本的写法得到的结果是相同的。但是聚合的过程一个发生在外部一个发生在内部,执行过程是大不相同的,其运行的效率也自然不同。脚本1:select t1.meterial_id ,t2.play_cnt ,t2.play_device_cntfrom t_material as t1 inner join ( select track_id ...原创 2019-06-02 21:43:09 · 1729 阅读 · 0 评论