SparkSQL业务分析集锦
作为ROLAP引擎的SparkSQL具备丰富的SQL算子,比如关联、聚合、分组、窗口函数以及内置的各种函数、hint等等,在功能层面较好地满足了业务分析场景的需要。作为平台工具的开发者,在提供好用、稳定的工具的同时,更要掌握一定的SQL使用方式,来加深各个算子在实际场景的应用效果。故开此文,长期记录使用SQL进行经典OLAP分析的场景或者是一些奇淫技巧。
场景1
有用户每日访问数据表,user_visit_log(userid, visit_date, visit_count)
,使用SQL统计出每个用户在当月累积访问次数和总累计访问次数?
1 | create table user_visit_log(user_id string, visit_date string, visti_count int) using orc; |
场景2
有用户表user(user_id, name, age)
和观影记录表view_record(user_id, moive_name)
,记录各个年龄段的观影次数?(10年作为一个区间,70岁以上作为一类)
1 | with a as ( |
场景3
有用户访问日志表user_access_log(date_time, user_id, age),请用SQL计算出活跃用户数量和平均年龄?(活跃用户表示连续两天访问的用户)
1 | create table user_access_log(date_time string, user_id string, age int) using orc; |
场景4
有用户购买记录表,user_pay_log(user_id, money, pay_time, order_id)
,请用sql写出所有用户中在2020年10月份第一次购买商品的金额?
1 | create table user_pay_log(user_id string, money double, pay_time string, order_id string) using orc; |
场景5
有表account(dist_id, account, gold_coin)
,请写出SQL语句,查询各自区组的money排名前3的账号?
1 | CREATE table account(dist_id string, account string, gold_coin int) using orc; |
场景6
有充值记录表credit_log(dist_id, account, money, create_time)
,请写出SQL语句,查询充值日志表2020年08月08号每个区组下充值额最大的账号,要求结果: 区组id,账号,金额,充值时间 ?
1 | create table credit_log(dist_id int, account string, money int, create_time string) using orc; |