Hive 分析银行转账风险

news2024/11/25 22:55:35

文章目录

    • 创建数据源
    • 基于转账记录,计算 7 天内各个账号的转账金额
    • 找出相同收付款人 5 天内连续转账3次或以上的记录

创建数据源

数据来源:数据源

drop table transfer_log;

CREATE TABLE transfer_log ( 
  log_id bigint,  -- id
  log_ts timestamp, -- 操作时间
  from_user string, -- 转账卡号 
  to_user string, -- 收款卡号
  type string, -- 操作类型
  amount double);

INSERT INTO transfer_log (log_id,log_ts,from_user,to_user,type,amount) VALUES (1,'2019-01-02 10:31:40','62221230000000',NULL,'存款',50000),(2,'2019-01-02 10:32:15','62221234567890',NULL,'存款',100000),(3,'2019-01-03 08:14:29','62221234567890','62226666666666','转账',200000),(4,'2019-01-05 13:55:38','62221234567890','62226666666666','转账',150000),(5,'2019-01-07 20:00:31','62221234567890','62227777777777','转账',300000),(6,'2019-01-09 17:28:07','62221234567890','62227777777777','转账',500000),(7,'2019-01-10 07:46:02','62221234567890','62227777777777','转账',100000),(8,'2019-01-11 09:36:53','62221234567890',NULL,'存款',40000),(9,'2019-01-12 07:10:01','62221234567890','62228888888881','转账',10000),(10,'2019-01-12 07:11:12','62221234567890','62228888888882','转账',8000),(11,'2019-01-12 07:12:36','62221234567890','62228888888883','转账',5000),(12,'2019-01-12 07:13:55','62221234567890','62228888888884','转账',6000),(13,'2019-01-12 07:14:24','62221234567890','62228888888885','转账',7000),(14,'2019-01-21 12:11:16','62221234567890','62228888888885','转账',70000);

基于转账记录,计算 7 天内各个账号的转账金额

select
       log_id,
       log_ts,
       from_user,
       to_user,
       type,
       amount,
       sum(amount) over(partition by from_user order by unix_timestamp(log_ts) range between 604800 preceding and current row ) total_amount
from
    transfer_log
where
    type = "转账";

计算结果:

在这里插入图片描述

思路:

这里主要是理解子查询中的这条语句:

sum(amount) over(partition by from_user order by unix_timestamp(log_ts) range between 604800 preceding and current row ) total_amount

首先我们先搞清楚 rows betweenrange between 的区别:

  • rows between:只根据所给行号进行范围分析。
  • range between:根据所给值进行范围分析。

例如:

ROWS BETWEEN

SELECT 
   a, 
   AVG(b) OVER (PARTITION BY c ORDER BY d ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)
FROM T;

-- 表示根据字段c进行分组,按照字段d进行排序,求平均值。限定范围是:前 3 行到当前行。

RANGE BETWEEN

SELECT 
   a, 
   AVG(b) OVER (PARTITION BY c ORDER BY d RANGE BETWEEN 3 PRECEDING AND CURRENT ROW)
FROM T;

-- 表示根据字段c进行分组,按照字段d进行排序,求平均值。限定范围是:d-3 到当前行。
-- 并不是直接选取前三行,而是先将该行的 d 值减 3,然后判断是否在该范围内。
-- 如果 d 在 d-3 至 当前d 的范围区间中,才会参与分析。

如果是在 MySQL 中,本题可以直接写成 RANGE BETWEEN INTERVAL '7' DAY PRECEDING AND CURRENT ROW;但在 Hive 中不能直接使用这种形式的区间,需要先将其转换为数值型,然后才可以进行操作。

也就形成了如下条件:

order by unix_timestamp(log_ts) range between 604800 preceding and current row 

已知字段 log_ts 的值为 yyyy-MM-dd HH:mm:ss 形式,所以 unix_timestamp(log_ts) 将其转换后单位为秒 s;根据题干求 7 天内的数据,我们也要将其转换为秒 60 * 60 * 24 * 7 = 604800

这样就完成了基于转账记录,计算 7 天内各个账号的转账金额。

找出相同收付款人 5 天内连续转账3次或以上的记录

SELECT *
FROM 
    (SELECT log_id,
         log_ts,
         from_user,
         to_user,
         type,
         amount,
         count(log_id) over(partition by from_user,to_user ORDER BY  unix_timestamp(log_ts) range BETWEEN 432000 preceding AND current row ) cnt
    FROM transfer_log
    WHERE type = "转账")t1
WHERE cnt >= 3;

这里和上面大同小异,因为是求 相同收付款人,所以分区那里要注意,其它地方都差不多,留给自己思考啦。

计算结果:

在这里插入图片描述

验证:

在这里插入图片描述

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

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

相关文章

128-152-spark-核心编程-源码

128-spark-核心编程-源码(主要以了解基本原理和流程为主): 总体相关 ​ 1.环境准备(Yarn 集群) ​ (1) Driver, Executor ​ 2.组件通信 ​ (1) Driver > Executor ​ (2) Executor > Driver ​ (3) Executor > Executor ​ 3.应用…

Unity异步加载AB包

Unity异步加载AB包写在前面效果关键讲解项目地址写在后面写在前面 最近项目需要在Unity中完成一个非常耗时的工作,所以学习了下异步加载的流程,这里做了一个demo,异步加载AB包,其实异步加载场景等,原理差不多。 效果…

Tomcat的Maven插件使用方法(在idea里面运行Tomcat)

目录 一、概述 二、下载和导入插件 三、测试使用方式 四、总结 一、概述 使用这个插件可以快速的运行Tomcat,比在本地配置快得多。 二、下载和导入插件 1.下载插件Maven Helper ps:已经有下载过这个插件的可以跳过此步骤 (1&#xff…

一、导论——可解释性机器学习(DataWhale组队学习)

目录导言一、什么是可解释人工智能?二、学可解释机器学习有什么用?2.1学习可解释机器学习的原因2.2 Machine Teaching :人工智能教人类学习2.3 细粒度图像分类2.4前沿AI三、本身可解释性好的机器学习模型四、传统机器学习算法的可解释性分析五、卷积神经网络的可解释性分析5.…

前端基础(二)_HTML常用标签(块级标签、行级标签、行块级标签)

HTML常用标签 我们可以分为三类&#xff1a; 1.块级标签 2.行级标签 3.行块级标签 一、块级标签 1.1 h系类标签 标题标签 H1~h6 大到小 H1 在同一个页面中只能使用一次 其他标签可以重复 特点&#xff1a;默认宽度100% 高度自适应 独立成行 自带间距加粗 <body><…

java计算机毕业设计ssm制造型企业仓储管理系统i0180(附源码、数据库)

java计算机毕业设计ssm制造型企业仓储管理系统i0180&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&…

[附源码]计算机毕业设计的项目管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

基于小波变换的图像压缩解压缩的matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 图像压缩的类别 对于图像压缩&#xff0c;主要有两类方法&#xff1a;无损的图像压缩以及有损的图像压缩&#xff0c;分别称为lossless image compression and lossy image compression。 对于无…

[附源码]Node.js计算机毕业设计动漫网站Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

第37篇 网络(七)TCP(一)

导语 TCP即TransmissionControl Protocol&#xff0c;传输控制协议。与UDP不同&#xff0c;它是面向连接和数据流的可靠传输协议。也就是说&#xff0c;它能使一台计算机上的数据无差错的发往网络上的其他计算机&#xff0c;所以当要传输大量数据时&#xff0c;我们选用TCP协议…

ssm+Vue计算机毕业设计校园生活服务预约管理系统(程序+LW文档)

ssmVue计算机毕业设计校园生活服务预约管理系统&#xff08;程序LW文档&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;…

spring切入点表达式(一)

前面写到切入点表达式&#xff0c;如果把全部方法都作为切入点的话&#xff0c;用execution(* *(..))表达式&#xff0c;这个表达式代表什么意思呢&#xff1f; public void login (String name,String address){} * * ( . . ) * *(..)对应方法如上图 * -------->代表修…

【GRU回归预测】基于鲸鱼算法优化门控循环单元WOA-GRU神经网络实现多输入单输出回归预测附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

网络协议—应用层的HTTPS协议

用 HTTP 协议&#xff0c;看个新闻还没有问题&#xff0c;但是换到更加严肃的场景中&#xff0c;就存在很多的安全风险。例如&#xff0c;你要下单做一次支付&#xff0c;如果还是使用普通的 HTTP 协议&#xff0c;那你很可能会被黑客盯上。例如在点外卖的环境中&#xff0c;发…

面试题 —— 真实面试题分享

文章目录 一、对BFC的理解。二、CSS中”::“和”:”的区别&#xff1f;三、对vue生命周期的理解&#xff1f; 四、vue组件通信的方式 五、vue中给data中的对象添加一个新的属性会发生什么&#xff0c;如何解决? 六.微信小程序组件的生命周期 七、javascript原型与继承的理解…

【vue基础】关于组件之间的通信

目录 &#xff08;1&#xff09;父组件向子组件传递信息 1.props&#xff1a; 2.第二种是直接从子组件里面利用&#xffe5;parent和root引用&#xff0c;获取根组件和父组件中的数据 &#xff08;2&#xff09;子组件数据传入父组件 1.通过自定义事件 2.通过$refs引用集合…

Docker-自定义镜像上传阿里云

目录 一、Docker制作jdk镜像 jdkv.1.0的制作 步骤 二&#xff0c;alpine制作jdk镜像 2.1 alpine Linux简介 2.2 基于alpine制作JDK8镜像 前期准备 2.3步骤 2.3.1.下载镜像 2.3.2.创建并编辑dockerfile 2.3.3.执行dockerfile创建镜像 2.3.4.创建并启动容器(可略) 2.3.5.进…

考虑碳交易机制的园区综合能源系统电热协同运行优化研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

【加油站会员管理小程序】05 充值套餐功能

上一篇我们讲解了轮播图的开发,本篇我们讲解充值优惠功能的开发。 开发之前我们要思考如何展示信息,在我们的功能规划里,在首页部分是要展示三个充值的套餐信息。那这个套餐呢最好是存在数据源中,便于日后维护信息。 在应用的编辑器里,点击数据源的图标,我们创建一个数…

m最小二乘法自适应均衡误码率仿真,对比LS,DEF以及LMMSE三种均衡算法误码率

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 信道估计是通信系统接收机的重要功能模块&#xff0c;主要是用来估计信号所经历信道的冲击响应&#xff0c;并用于后续的信道均衡处理&#xff0c;以便消除多径信号混叠造成的ISI。 信道估…