文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Hive 如何方便地实现存储过程?

2020-10-07 08:11

关注

Hive 如何方便地实现存储过程?

更不方便的是,HPL/SQL 缺乏 JDBC 接口,无法方便地嵌入 JAVA 程序,只能在 JAVA 中调用命令行执行 HPL/SQL,再由 HPL/SQL 实施计算并将结果回写 Hive 临时表,最后 JAVA 通过 Hive 的 JDBC 读取临时表。

第二种是用 JAVA 开发的 UDF 间接实现。JAVA 缺乏结构化计算类库,所有的算法都要硬编码,比如最基本的二维表要用 ArrayList+HashMap 组合实现,最简单的分组汇总要写几十行,关联计算更是冗长繁琐。由于硬编码很难统一规则,所以即使相似的业务逻辑,具体算法也是千差万别,这就导致代码可读性差、维护困难。

JAVA 存储过程还存在高耦合性的问题。JAVA 类无法进行热部署,每次修改都要重新编译并重启 Hive 服务,这会对生产环境产生严重影响。如果设计一个巧妙的结构,也许能降低耦合性,但项目成本必然大幅上升。

如果使用集算器,实现 Hive 存储过程就会方便很多。

imagepng

集算器具有丰富的结构化类库,无论查询、排序、聚合还是分组汇总、关联查询,都可以用内置函数直接实现。集算器也提供了针对结构化数据的分支判断、循环语句、动态语法,复杂业务逻辑也可轻松实现。集算器允许设置断点、跟踪调试,以便程序员快速排错。向上接口方面,集算器提供了标准的 JDBC 驱动,供 JAVA 代码调用,实际的存储过程则以脚本文件的形式存在,修改存储过程不影响 JAVA 代码或 Hive 服务。向下接口方面,集算器除了支持标准的 Hive JDBC,还提供了更高性能的私有接口,两者都可执行 HSQL 语句。

例子:Hive 中 sales 表按销售、年、月分组汇总后如下:

imagepng

存储过程算法:调整每个销售 Q1Q2 的账务,具体是将 4 月份的 1000 元转移到 3 月份。要求对同一个销售同一年的数据做调整,如果 3 月份缺失,则调整时需在 3 月份追加 -1000 的空记录,以便平衡账务,如果 4 月份缺失,则调整时在 4 月份追加 1000 的空记录,都缺失则不做调整。

计算结果应当如下:

imagepng

集算器存储过程如下:

 

 

  A B C D
1 =connect@l("hiveDB")     /connect to hive via jdbc
2 =A1.cursor@x("select   sellerid,year(orderdate) y,month(orderdate) m,sum(amount)amount from   sales  group by   sellerid,year(orderdate),month(orderdate) order by sellerid,   year(orderdate),month(orderdate)") /run HSQL
3 =A2.create()     /prepare a blank result
4 for A2;[sellerid,y]     /batch for every year of  every seller
5   =A4.select(m==3) =A4.select(m==4) /reocrd of Mar. and Apr.
6   if B5!=[] && C5!=[] >B5.amount=B5.amount-1000 /if both exist then modify batch
7     >C5.amount=C5.amount+1000  
8   else if B5==[] &&C5!=[] >A3.record([A4.sellerid,A4.y,3,-1000]) /if Mar. not exists then add new   reocord to result
9     >C5.amount=C5.amount+1000 /modify batch
10   else if B5!=[] &&C5==[] >B5.amount=B5.amount-1000 /if Apr. not exists then add new   record to result
11     >A3.record([A4.sellerid,A4.y,4,1000]) /modify batch
12   >A3.paste@i(A4.(sellerid),A4.(y),A4.(m),A4.(amount)) /union up this batch to result
13 return A3.sort(sellerid,y,m)     /sort and return result

 

关于集算器 JDBC 接口,可以参 Java 如何调用 SPL 脚本
关于集算器安装使用、获得免费授权和相关技术资料,可以参 如何使用集算器? 。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯