Hive存储过程实现-hpsql

1. 什么是hpsql

目前版本的hive中没有提供类似存储过程的功能,使用Hive做数据开发时候,一般是将一段一段的HQL语句封装在Shell或者其他脚本中,然后以命令行

的方式调用,完成一个业务或者一张报表的统计分析。好消息是,现在已经有了Hive存储过程的解决方案(HPL/SQL –Procedural SQL on hadoop),并

且在未来的Hive的版本(2.0)中,会将该模块集成进来。该解决方案不仅支持Hive,还支持在SparkSQL,其他NoSQL,甚至是RDBMS中使用类似于

Oracle PL/SQL的功能,这将极大的方便数据开发者的工作,Hive中很多之前比较难实现的功能,现在可以很方便的实现,比如自定义变量、基于一个结果集的游标、循环等等。

2. 安装配置hpsql

2.1 下载软件

可以从官网 http://www.hplsql.org/download下载最新版本安装包,并解压

也可以从我的云盘下载 <hplsql-0.3.17.tar.gz>  链接是:https://pan.baidu.com/s/1i5mTBEH 密码是:xbf

2.2 安装配置hpsql

mkdir /opt/hpsql

tar -zxf  hplsql-0.3.17.tar.gz -C /opt/hpsql

2.2.1 进入hplsql安装目录,配置 HADOOP_CLASSPATH

vi hplsql

2.2.2 进入hive安装目录,配置和启动Hive的thrift服务HiveServer2

启动HiveServer2:

nohup hive --service hiveserver2 > hiveserver2.log 2>&1 &

2.2.3 配置HPL/SQL与Hive的连接

vi hplsql-site.xml

2.3 使用hplsql执行HPL/SQL语句

2.3.1 使用-e 命令在命令行窗口直接运行

2.3.2 使用-f 命令运行脚本

创建测试表people

创建测试脚本

执行语句

2.3.3 存储过程调用

第一步,按如下格式创建存储过程

use database;

create procedure

begin

......

end;

第二步,按如下方式调用存储过程

include path/sp name

call sp name;

示例如下:

此处省略逻辑部分......

创建完成以后,调用运行,查看执行结果

时间: 2025-01-01 03:42:34

Hive存储过程实现-hpsql的相关文章

ORACLE存储过程如何迁移到HIVE?

在将ORACLE存储过程迁移到HIVE平台时,不可避免地会遇到各种问题. ORACLE与HIVE都使用SQL语句,但是语法和特性不尽相同,本文简述了几个迁移时需要注意的地方. 一.INSERT语句 ORACLE: EXECUTE IMMEDIATE 'TRUNCATE TABLE TABLE_A'; INSERT /*+APPEND*/ INTO A NOLOGGING ( COL_1, COL_2, COL_3, ) 迁移至HIVE语句为: INSERT OVERWRITE TABLE TAB

python 调用hive查询实现类似存储过程

需求:数据仓库中所有表的定义结构保存到新的文件中,保存后类似下面数据,重复的数据只保留7月份即可 ****************ods_log_info*****************lid string uid string mb_uid string operation string module string result string ts string remark1 string remark2 string remark3 string ****************ods_

Hive入门到剖析(一)

1 Hive简介 1.1 Hive定义 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 本质是将SQL转换为MapReduce程序. 1.2 为什么使用Hive 1.面临的问题 人员学习成本太高 项目周期要求太短 我只是需要一个简单的环境 MapReduce  如何搞定 复杂查询好难 Join如何实现 2.为什么要使用Hive 操作接口采用类SQL语法,提供快速开发的能力 避免了去写MapReduce,减少开发人员的学习成本 扩展

Hive中分组取前N个值

分享两篇文章,结合看更清楚一点. 背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科,成绩做order by排序,然后对排序后的成绩,执行自定义函数row_number(),必须带一个或者多个列参数,如ROW_NUMBER(col1, ....),它的作用是按指定的列进行分组生成行序列.在ROW_NUMBER(a,b) 时,若两条记录的a,b列相同

Pig、Hive、MapReduce 解决分组 Top K 问题(转)

问题: 有如下数据文件 city.txt (id, city, value) cat city.txt 1 wh 5002 bj 6003 wh 1004 sh 4005 wh 2006 bj 1007 sh 2008 bj 3009 sh 900需要按 city 分组聚合,然后从每组数据中取出前两条value最大的记录. 1.这是实际业务中经常会遇到的 group TopK 问题,下面来看看 pig 如何解决: 1 a = load '/data/city.txt'  using PigSto

集算器协助Java处理多样性数据源之Hive

Java使用jdbc连接Hive比较简单,但是Hive的计算能力相对于其它数据库的SQL而言较弱,要完成非常规的计算需要将数据取出后用Java进一步计算,编程比较麻烦. 使用集算器配合Java编程,可以减少Java使用Hive时要进行复杂计算工作量.下面我们通过例子来看一下具体作法:Hive中的orders表中保存了订单的明细数据,需要计算同期比和比上期.数据如下: ORDERID CLIENT SELLERID AMOUNT ORDERDATE    1 UJRNP 17 392 2008/1

BG.Hive - part1

1. Hive架构 What is hive? Facebook,https://en.wikipedia.org/wiki/Apache_Hive a> 一种工具,可以通过SQL轻松的访问数据,可以完成数据仓库任务,如ETL,报表及数据分析 b> 一种机制,增强多样化数据格式的结构 c> 数据访问,HDFS或者其他的数据存储系统(HBase) d> 查询方式,类SQL的HiveQL 默认引擎为MapReduce,简单的Select * From..不会转换为MR任务 e>

hive 文件系统学习实例

Hive存储是基于hadoop hdfs文件系统的,通过默认内嵌的Derby 数据库或外部数据库系统(如mysql)组织元数据访问,下面就通过实际案例描述其存储过程. 1, 在hive 中创建表,然后把外部csv文件导入其中(外部文件为Batting.csv, 内部表为temp_batting): hive>create table temp_batting(col_value STRING); hive> show tables;OKtemp_batting... hive>LOAD

对比hive和mysql 复杂逻辑流处理

1.Mysql中可用存储过程和函数来实现复杂逻辑处理,两者的对比如下:存储过程作为可执行文件,编译一次放在数据库中,函数又返回值.可设定使用权限. 存储过程中可使用游标,声明变量.用call调用. 2.Hive可用udf(user defined function)来实现复杂逻辑处理 编辑Python脚本 常用的Python字符串分割处理函数有:split 等等 加载udf 调用udf HQL语法 可将返回结果重新写入其他表内,此时 as后字段和插入表字段一致.