每天一道大厂SQL题【Day11】微众银行真题实战(一)

news2024/12/29 10:27:10

每天一道大厂SQL题【Day11】微众银行真题实战(一)

大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题,以每日1题的形式,带你过一遍热门SQL题并给出恰如其分的解答。

一路走来,随着问题加深,发现不会的也愈来愈多。但底气着实足了不少,相信不少朋友和我一样,日积月累才是最有效的学习方式!

每日语录

如果外貌好能够获得他人的关注,又有钱能够支持各种娱乐活动,谁会愿意每天呆在家里打游戏,刷微博,看电视剧。

C:\Users\ADMINI~1\AppData\Local\TemputoolsDoutuPlugin/tempImage1676534111827.gif

第11题:授信金额统计

需求列表

笔试题目

说明:SQL语法请使用HiveSQL/SparkSQL

1.基于附录《核额流水表》和附录2《借据表》统计下述指标,请提供统计SQL

指标当日新增昨日新增历史累计
申请户数
规则通过户数
核额成功户数
授信金额
平均核额
发放金额
户均发放金额

数据准备

debt.txt文件
set spark.sql.shuffle.partitions=4;
create database webank_db;
use webank_db;
create or replace temporary view check_view (ds comment '日期分区',
sno comment '流水号', uid comment '用户id',
is_risk_apply comment '是否核额申请',
is_pass_rule comment '是否通过规则',
is_obtain_qutoa comment '是否授信成功', quota comment '授信金额',
update_time comment '更新时间')
as
values ('20201101', 's000', 'u000', 1, 1, 1, 700, '2020-11-01 08:12:12'),
('20201102',	's088',	'u088',	1,	1,	1,	888, '2020-11-02 08:12:12'),
('20201230',	's091',	'u091',	1,	1,	1,	789, '2020-12-30 08:12:12'),
('20201230',	's092',	'u092',	1,	0,	0,	0, '2020-12-30 08:12:12'),
('20201230',	's093',	'u093',	1,	1,	1,	700, '2020-12-30 08:12:12'),
('20201231',	's094',	'u094',	1,	1,	1,	789, '2020-12-31 08:12:12'),
('20201231',	's095',	'u095',	1,	1,	1,	600, '2020-12-31 08:12:12'),
('20201231',	's096',	'u096',	1,	1,	0,	0, '2020-12-31 08:12:12')
;
--创建核额流水表 
drop table if exists check_t;
create table check_t (
sno string comment '流水号', uid string,
is_risk_apply bigint, is_pass_rule bigint, is_obtain_qutoa bigint, quota decimal(30,6), update_time string
) partitioned by (ds string comment '日期分区');
--动态分区需要设置 
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict; insert overwrite table check_t partition (ds) select sno,
uid, is_risk_apply, is_pass_rule, is_obtain_qutoa, quota, update_time,
ds
from check_view;

img

-- 创 建 借 据 表
create table debt(
duebill_id	string comment '借据号',
uid	string, prod_type		string, putout_date string, putout_amt		decimal(30, 6),
balance	decimal(30, 6), is_buliang		int, overduedays int
)partitioned by (ds string comment '日期分区');
--资料提供了一个34899条借据数据的文件 
--下面补充如何将文件的数据导入到分区表中。需要一个中间普通表过度。drop table if exists webank_db.debt_temp;
create table webank_db.debt_temp(
duebill_id		string comment '借据号', uid	string,
prod_type	string,
putout_date string, putout_amt	decimal(30, 6),
balance decimal(30,6),
is_buliang	int, overduedays int,
ds string comment '日期分区'
) row format delimited fields terminated by '\t';
load data local inpath '/root/debt.txt' overwrite into table webank_db.debt_temp;

--动态分区需要设置 
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table webank_db.debt partition (ds)
select  from webank_db.debt_temp;

--技巧:如果查询debt表,由于分区数太多,导致查询很慢。 
-- 开发阶段,我们可以事先将表缓存起来,并且降低分区数比如为6,那么查缓存表大大提升了开发效率。 
-- 上线阶段,再用实际表替换缓存表。 
--首次缓存会耗时慢 
cache table cache_debt as select /+ coalesce(6) /  from
debt;
--第二次使用缓存会很快 
select count() from cache_debt;
select ds,count(1) from cache_debt group by ds;

先了解表数据的分布情况,有2年多,每天都有分区,共760多个分区。

img

img

随机观察2个借据的情况

img

img

思路分析

方案1
假设当天是20201231,昨日是20201230
预先将复用分数据集缓存起来,只用加载一次源表。后面多次union all起来。cache table仅Spark支持,hive不支持。

方案2

借用stack函数,性能与方案1一样 ,都只加载一次表。

答案获取

建议你先动脑思考,动手写一写再对照看下答案,如果实在不懂可以点击下方卡片,回复:大厂sql 即可。
参考答案适用HQL,SparkSQL,FlinkSQL,即大数据组件,其他SQL需自行修改。

加技术群讨论

点击下方卡片关注 联系我进群

或者直接私信我进群

微众银行源数据表附录:

  1. 核额流水表
字段名字段意义字段类型
ds日期分区,样例格式为20200101,每个分区有全量流水string
sno每个ds内主键,流水号string
uid户idstring
is_risk_apply是否核额申请(核额漏斗第一步)取值0和1bigint
is_pass_rule是否通过规则(核额漏斗第二步)取值0和1bigint
is_obtain_qutoa是否授信成功(核额漏斗第三步)取值0和1bigint
quota授信金额decimal(30,6)
update_time更新时间样例格式为2020-11-14 08:12:12string
  1. 借据表
字段名字段意义字段类型
ds日期分区,样例格式为20200101每个分区有全量借据strng
duebilid借据号(每个日期分区内的主键)strng
uid用户idstring
prod_type产品名称仅3个枚举值XX贷YY贷ZZ贷string
putout_date发放日期样例格式为2020-10-10 00:10:30bigint
putout_amt发放金额decimal(30,6)
balance借据余额decimal(30,6)
is_buliang状态-是否不良取值0和1bigint
overduedays逾期天数bigint
  1. 模型输出表
字段名字段意义字段类型
ds日期分区,样例格式为20200101增量表部分流水记录可能有更新strng
sno流水号,主键strng
create time创建日期样例格式为2020-10-10 00:10:30与sno唯一绑定,不会变更strng
uid用户idstrng
contentson格式key值名称为V01~V06,value值取值为0和1strng
create_time更新日期样例格式为2020-10-1000:10:30strng

文末SQL小技巧

提高SQL功底的思路。
1、造数据。因为有数据支撑,会方便我们根据数据结果去不断调整SQL的写法。
造数据语法既可以create table再insert into,也可以用下面的create temporary view xx as values语句,更简单。
其中create temporary view xx as values语句,SparkSQL语法支持,hive不支持。
2、先将结果表画出来,包括结果字段名有哪些,数据量也画几条。这是分析他要什么。
从源表到结果表,一路可能要走多个步骤,其实就是可能需要多个子查询,过程多就用with as来重构提高可读性。
3、要由简单过度到复杂,不要一下子就写一个很复杂的。
先写简单的select from table…,每个中间步骤都执行打印结果,看是否符合预期, 根据中间结果,进一步调整修饰SQL语句,再执行,直到接近结果表。
4、数据量要小,工具要快,如果用hive,就设置set hive.exec.mode.local.auto=true;如果是SparkSQL,就设置合适的shuffle并行度,set spark.sql.shuffle.partitions=4;

后记

📢博客主页:https://manor.blog.csdn.net

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 Maynor 原创,首发于 CSDN博客🙉
📢不能老盯着手机屏幕,要不时地抬起头,看看老板的位置⭐
📢专栏持续更新,欢迎订阅:https://blog.csdn.net/xianyu120/category_12182595.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/357944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++修炼之路】21.红黑树封装map和set

每一个不曾起舞的日子都是对生命的辜负 红黑树封装map和set前言一.改良红黑树的数据域结构1.1 改良后的结点1.2 改良后的类二. 封装的set和map2.1 set.h2.2 map.h三. 迭代器3.1 迭代器封装3.2 const迭代器四.完整代码实现4.1 RBTree.h4.2 set.h4.3 map.h4.4 Test.cpp前言 上一节…

epoll 笔记

maxevents 参数大小一般不超过64必须够了 maxevents 个事件,才会传到用户空间吗?可见,只要有事件就可以传到用户空间。一台服务器可以支撑多少个链接https://blog.csdn.net/mijichui2153/article/details/81331345 0、两台虚拟机的初始状态如…

数据库必知必会:TiDB(12)TiDB连接管理

数据库必知必会:TiDB(12)TiDB连接管理TiDB连接管理TiDB的连接特性连接TiDBMySQL命令行客户端图形界面客户端连接其他连接方式写在后面TiDB连接管理 TiDB的连接特性 TiDB Server主要负责接收用户的会话请求,接收SQL并负责SQL语句…

【2021/推荐/社交网络】Socially-Aware Self-Supervised Tri-Training for Recommendation

部分公式、图表和排版等显示可能异常,可在个人公众号(码农的科研笔记)进行全文免费阅读。 【2021/推荐/社交网络】Socially-Aware Self-Supervised Tri-Training for Recommendation 原文:https://dl.acm.org/doi/10.1145/3447548.3467340 源码:[伯乐 SEPT]、https://git…

Keychron K3 Pro键盘测评

目录 0.开箱 1.Keychron K3 Pro介绍 2.产品特点 2.1轻薄机身轴体解锁多场景办公 2.2 支持QMK/VIA开源改键蓝牙/有线双模客制化机械键盘 ​2.3支持MacOS/Windows系统秒切换不卡顿 2.4同时适配3台设备可快速切换 ​2.5支持QMK/VIA改键 2.6 超轻薄佳达隆矮轴,触感新体验 …

ChatGPT火爆来袭,携手参与为开源助力

前言: Hello大家好,我是Dream 。最近语言模型ChatGPT在网络上一阵大火,ChatGPT 以惊人的速度问世,在技术圈中引起了广泛讨论。在 GitHub 上近期还诞生了多个 ChatGPT 相关的开源项目,数量之多令人瞠目结舌,…

LeetCode142 环形链表Ⅱ

题目: 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评…

软考高级-信息系统管理师之人力资源管理(最新版)

人力资源管理目录 项目人力资源管理项目人力资源管理概念项目团队项目管理团队领导和管理冲突和竞争项目人力资源管理过程规划项目人力资源管理组建项目团队建设项目团队管理项目团队项目人力资源管理工具虚拟团队集中办公团队发展阶段人际关系技能权力冲突管理激励理论X理论和…

【python】数据分析案例

目录 一、项目内容: 第一步:获取评论数据 第二步:词频统计并可视化展示 第三步:绘制词云 二、项目实现: 第一步:获取评论数据 (1)导入python库 (2)获…

煤矿风险监测预警算法 YOLO

煤矿风险监测预警算法基于YOLO网络模型视觉分析,煤矿风险监测预警算法7*24小时不间断自动识别现场人员作业行为、着装合规情况以及传送皮带撕裂跑偏等风险异常情况。我们使用YOLO(你只看一次)算法进行对象检测。YOLO是一个聪明的卷积神经网络(CNN),用于实…

Hive 2.3.0 安装部署(mysql 8.0)

Hive安装部署 一.Hive的安装 1、下载apache-hive-2.3.0-bin.tar.gz 可以自行下载其他版本:http://mirror.bit.edu.cn/apache/hive/ 2.3.0版本链接:https://pan.baidu.com/s/18NNVdfOeuQzhnOHVcFpnSw 提取码:xc2u 2、用mobaxterm或者其他连接…

【拦截器、过滤器、springAop】那些不为人知的隐秘

首先说到这几个词的时候,大家肯定都很熟悉了,甚至觉得这几个的区别刚刚毕业都能回答了,但是我想大家在实际应用过程中是真得会真正的使用吗?换言之,什么时候用过滤器什么时候使用拦截器,什么时候使用spring…

Atlassian Server用户新选择 | Data Center产品是否适合您的企业?

2021年,Atlassian宣布停止销售新的Server许可证在业内引起轩然大波。就在今年2月,Atlassian所有Server产品及插件均已停售。2024年2月,也就是一年不到,Atlassian将终止对Server产品及插件的所有支持。 此公告发布后,许…

Flink-DataStream API介绍(源算子、转换算子、输出算子)

文章目录DataStream API(基础篇)Flink 支持的数据类型执行环境(Execution Environment)创建执行环境执行模式(Execution Mode)触发程序执行源算子准备工作从集合中读取数据从文件读取数据从 Socket 读取数据从 Kafka 读取数据自定…

Spring Cloud Nacos实战(三)- 服务消费者注册和负载均衡,服务注册中心对比

目录Nacos服务消费者注册和负载均衡服务消费者具体配置新建Modulepomyml主启动测试远程调用与Ribbon什么是Ribbon具体使用验证Nacos自带负载均衡Nacos服务注册中心对比提升各种服务注册中心对比CAP模型CP原则:一致性 分区容错性原则AP原则:可用性原则 …

Unity 基于Netcode for gameObjects实现局域网同步

注意事项: 1.需要将unity升级到2021.3及以后的版本的稳定版本,使用不稳定的2022版本测试过,存在打包问题: 效果: 所需Package: 1.Netcode for gameObjects 2.Multiplayer Tools 该package是附带Netcode…

基于Spring Boot的零食商店

文章目录项目介绍主要功能截图:登录后台首页个人信息管理用户管理前台首页购物车部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关…

[Spring] 难理解的Aop编程 |入门?

作者:狮子也疯狂 专栏:《spring开发》 坚持做好每一步,幸运之神自然会驾凌在你的身上 目录一. 🦁 前言二. 🦁 常见概念2.1 常见术语2.2 AOP入门Ⅰ. 🐇 功能场景Ⅱ. 🐇 实现过程2.3 通知类型Ⅰ.…

使用frp配置内网机器访问

frp简介 frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。frp 项目官网是 https://github.com/fatedier/frp,软件下载地址为https://github.com/fatedier/frp/releases frp工作原理 服务端运行&#xf…

【GO】k8s 管理系统项目[前端部分--项目初始化]

【GO】k8s 管理系统项目[前端部分–项目初始化] 1. 项目概述 API部分已经完成了,着手开始前端部分.构建一个页面展示后端数据. 前端会使用到以下依赖 vue3框架element-plusxterm命令行模拟器nprogress进度条jsonwebtoken jwt token生成和校验json-editor-vue3/codemirror-e…