JAVA开发搞了一年多大数据的总结

作为一名Java开发者,作者在项目中接手了大数据工作,逐渐从0到1掌握了大数据开发。文章重点分享了他在大数据工作中频繁使用的SQL技巧,如with..as..、开窗函数、case when等,同时对比了Presto、Spark和MapReduce计算引擎的差异,并讨论了数据同步的方法和挑战。
摘要由CSDN通过智能技术生成

2021年7月份加入了当前项目组,以一个原汁原味的Java开发工程师的身份进来的,来了没多久,项目组唯一一名大数据开发工程师要离职了,一时间一大堆的数据需求急需人来接手,此刻又招不来新的数据开发。没辙,我和同组的另一位Java开发同事算是临危受命,接下了大数据方面的工作,开启了Java工程师从0到1搞大数据的漫长旅途,开始的磕磕碰碰叫苦不堪到如今的还算得心应手,已经整整16个月了,16个月期间双向支持着数据分析和后端开发的工作,两者时而穿插时而并行处理,大数据工作占得比重之多,有时让我怀疑我还是不是一名纯粹的Java开发工作者,当我看见假期值班表中我的角色填写一项变成“B端后端/数据”时,我就知道我已经不纯粹了。

1.Sql -- 大数据分析的灵魂

​       搞大数据究竟每天在做些什么?坦白讲,情况和我想象的不太一样,因为做大数据开发时最最主要的工作居然写Sql,曾经我还以为它是有一套刁钻困难冷门的牛逼技术,将海量数据玩弄于股掌之中。现在看来,我是每天和各种各样的大数据表打交道,在大数据平台用sql提取出业务方想要的信息,有时会出各式各样的数据报表,有时是为C端项目服务,提供底层海量数据计算的支持,有时是为各种数据看板服务,提供他们想要的销量排行了、人群覆盖情况了诸类。工作前两年纯粹写java时也是对sql有所研究的,毕竟数据持久层的交互离不开sql,然后搞了大数据才明白,之前写的sql都是小儿科,现在一条sql写上百行那都是常有的事,而且最开始解读大sql时总是慢半拍,好久才能搞明白前辈留下的交接文档表达的是什么,现在不一样了,看见那些sql都亲切很多,很多需求提出来总能迅速想到sql解决的方案,下面呢,我就开始分享一些我在写大sql时经常会使用的一些语法,这些语法可能针对于只做Java的人并不会经常性的熟练使用。

1.1with.. as..

with temp1 as (
select * from ... where ..
),
temp2 as (
select * from ... where...
),
...
tempn as (
select * from ... inner join ... where
)
select a.*,b.*,c.* from temp1 a inner join temp2 b on a.id = b.id left join ..tempn c on a.iid = c.iid where ...

模板中的temp1,temp2,tempn都可以看做这个sql执行过程中的临时表,存在周期仅限于执行这条sql期间,sql执行完毕临时表也销毁,并且和其他的sql是相互隔离的,下面的sql都可以使用之前的产生的临时表(temp2就可以使用temp1的结果),使用with时最后一定跟的select语句,当然,跟的是insert into table ...... select * from也是可以的。

使用with..as..语法大大提高了长Sql的解读性。

之前一直以为这个HiveSql特有的语法,后来才发现在mysql中也可以使用,只不过是mysql8.0以后的版本可以使用,之前的版本是没有这个语法的。

1.2开窗函数:row_number() over(partition by file order by file2 desc/asc)

select  row_number() over(partition by userid order by pay_time desc) as rn,userid,name,order_cd,goods_name,pay_time
from  db_dw.table _order 
having rn = 1

这个sql的作用就是找出每个用户的最新付款的那笔订单的订单信息。

实现思路就是利用开窗函数按照用户id分组,再按照付款时间倒叙排序,给每组的数据加上一个rn的编号,每组的第一条rn 都等于 1 ,第二条rn = 2,以此类推,再通过having函数将结果中rn = 1的数据全取出来,这样就能通过单条sql完成取每一个用户最新一条订单的数据需求。

1.3开窗函数lag(field, num, defaultvalue) over(partition by ..order by ..) 与 lead() over()

select  lag(pay_time,1,NULL) over(partition by userid order by pay_time asc) as last_pay_time,userid,name,order_cd,goods_name,pay_time
from  db_dw.table _order 

select  lead(pay_time,1,NULL) over(partition by userid order by pay_time 
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java开发大数据都有前途。 Java是一种流行的编程语言,在企业级应用开发、金融、保险、医疗保健等领域有着广泛的应用,并且具有良好的可维护性和可扩展性,因此Java开发前景非常广阔。 大数据是当今科技发展的一个重要方向,随着数字化趋势的加速,大数据的需求也在不断增长,因此大数据也具有广阔的发展前景。 总体来说,Java开发大数据都有自己的特点和优势,因此都是不错的选择。 ### 回答2: Java开发大数据都有广阔的前景,具体取决于个人兴趣和目标。 Java开发是一种传统的编程语言,被广泛应用于各行各业的软件开发Java开发人员可以设计并实现各种应用程序,比如Web应用程序、移动应用程序和桌面应用程序。Java在企业级应用开发中得到特别重视,因为它具有良好的跨平台兼容性和可靠性。由于Java开发人员需求量大,工作机会也相对较多。尤其是在金融技术、医疗保健、电子商务和游戏开发等领域,Java开发的前景非常广阔。 大数据是指巨大的数据集合,需要特殊的技术和工具来处理和分析。大数据分析可以帮助企业从庞大的数据中提取有价值的信息,并进行预测和决策支持。随着云计算和物联网的发展,大数据分析的重要性越来越突出。大数据领域需要懂得使用各种大数据处理框架和工具的专业人才,比如Hadoop和Spark。大数据工程师和数据科学家是大数据领域中非常紧缺的人才,他们的薪资和职业发展空间相对较大。 无论选择Java开发还是大数据,都需要具备扎实的编程基础和良好的问题解决能力。根据自己的兴趣和长期发展的目标,可以选择重点学习和发展其中一项,但也可以同时学习两者,以拓宽自己的技能范围和就业机会。总之,无论选择哪条道路,都有广阔的前景和机会。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值