我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Hive语法及其进阶(二)

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Hive语法及其进阶(二)

Hive语法及其进阶(二)

1、使用JDBC连接Hive

 1 import java.sql.Connection;
 2 import java.sql.DriverManager;
 3 import java.sql.PreparedStatement;
 4 import java.sql.ResultSet;
 5 
 6 public class HiveDemo {
 7     public static void main(String[] args) throws Exception {
 8         Class.forName("org.apache.hive.jdbc.HiveDriver");
 9         //"jdbc:hive2://master:10000/test3"
10         Connection connection = DriverManager.getConnection("jdbc:hive2://master:10000/myhive");
11         String sql="select * from students";
12         PreparedStatement ps = connection.prepareStatement(sql);
13         ResultSet rs = ps.executeQuery();
14         while (rs.next()){
15             int id = rs.getInt(1);
16             String name = rs.getString(2);
17             int age = rs.getInt(3);
18             String gender = rs.getString(4);
19             String clazz = rs.getString(5);
20             System.out.println(id + "," + name + "," + age + "," + gender + "," + clazz);
21         }
22         rs.close();
23         ps.close();
24         connection.close();
25     }
26 }

 

2、Hive常用函数

1.关系运算

 

// 等值比较 = == <=>
// 不等值比较 != <>
// 区间比较: select * from default.students where id between 1500100001 and 1500100010;
// 空值/非空值判断:is null、is not null、nvl()、isnull()

操作符

支持的数据类型

描述

A=B

基本数据类型

如果A等于B则返回TRUE,反之返回FALSE

A<=>B

基本数据类型

如果AB都为NULL,则返回TRUE,如果一边为NULL,返回False

A<>B, A!=B

基本数据类型

A或者BNULL则返回NULL;如果A不等于B,则返回TRUE,反之返回FALSE

A

基本数据类型

A或者BNULL,则返回NULL;如果A小于B,则返回TRUE,反之返回FALSE

A<=B

基本数据类型

A或者BNULL,则返回NULL;如果A小于等于B,则返回TRUE,反之返回FALSE

A>B

基本数据类型

A或者BNULL,则返回NULL;如果A大于B,则返回TRUE,反之返回FALSE

A>=B

基本数据类型

A或者BNULL,则返回NULL;如果A大于等于B,则返回TRUE,反之返回FALSE

A [NOT] BETWEEN B AND C

基本数据类型

如果AB或者C任一为NULL,则结果为NULL。如果A的值大于等于B而且小于或等于C,则结果为TRUE,反之为FALSE。如果使用NOT关键字则可达到相反的效果。

A IS NULL

所有数据类型

如果A等于NULL,则返回TRUE,反之返回FALSE

A IS NOT NULL

所有数据类型

如果A不等于NULL,则返回TRUE,反之返回FALSE

IN(数值1, 数值2)

所有数据类型

使用 IN运算显示列表中的值

A [NOT] LIKE B

STRING 类型

B是一个SQL下的简单正则表达式,也叫通配符模式如果A与其匹配的话,则返回TRUE;反之返回FALSEB的表达式说明如下:‘x%’表示A必须以字母‘x’开头,‘%x’表示A必须以字母’x’结尾,而‘%x%’表示A包含有字母’x,可以位于开头,结尾或者字符串中间。如果使用NOT关键字则可达到相反的效果。

A RLIKE B, A REGEXP B

STRING 类型

B是基于java的正则表达式,如果A与其匹配,则返回TRUE;反之返回FALSE。匹配使用的是JDK中的正则表达式接口实现的,因为正则也依据其中的规则。例如,正则表达式必须和整个字符串A相匹配,而不是只需与其字符串匹配。

 

 

 

2 .数值计算

取整函数(四舍五入):round
向上取整:ceil
向下取整:floor

 like、rlike、

1)查找名字以A开头的员工信息

hive (default)> select * from emp where ename LIKE "A%";

2)查找名字中第二个字母为A的员工信息

hive (default)> select * from emp where ename LIKE "_A%";

3)查找名字中带有A的员工信息

hive (default)> select * from emp where ename  RLIKE "[A]";

.

 

 3.日期函数

 

1 select from_unixtime(1610611142,"YYYY/MM/dd HH:mm:ss");
2unix_timestamp(),获取当前时间的时间戳

3 select from_unixtime(unix_timestamp(),"YYYY/MM/dd HH:mm:ss");
4 // "2021年01月14日" -> "2021-01-14" 
6 select from_unixtime(unix_timestamp("2021年01月14日","yyyy年MM月dd日"),"yyyy-MM-dd");
8 select from_unixtime(unix_timestamp("04-2021-16","MM-yyyy-dd"),"yyyy/MM/dd");

 

4.字符串函数

1)cancat()字符串拼接 当有空值则为NULL

2)cancat_ws()指定可以指定分隔符,并且会自动忽略NULL

 3)substring字符串的截取

 4)split字符串的切分

 

 

 5)explode列转行

 

 

 解析json格式的数据

select get_json_object
("{"name":"zhangsan",
"age":18,
"score":[{"course_name":"math","score":100},{"course_name":"english","score":60}]}
",
"$.score[0].score");

 

 

 

 6) Hive中的wordcount

create table words(
    words string
)row format delimited fields terminated by "|";

// 数据
hello,java,hello,java,scala,python
hbase,hadoop,hadoop,hdfs,hive,hive
hbase,hadoop,hadoop,hdfs,hive,hive

select word,count(*) from (select explode(split(words,",")) word from words) a group by a.word;

 

4.开窗函数

 

##### row_number:无并列排名

 

分组求TOPN

select * from (select  *, row_number() over(partition by clazz order by score desc)as s from new_score)tt where tt.s<=3;

用法: select xxxx, row_number() over(partition by 分组字段 order by 排序字段 desc) as rn from tb group by xxxx

 

##### dense_rank:有并列排名,并且依次递增

 

hive> select  *, row_number() over(partition by clazz order by score desc)as s,
    > dense_rank()  over(partition by clazz order by score desc)as s from new_score;

 

 

 

##### rank:有并列排名,不依次递增

 

hive> select  *, row_number() over(partition by clazz order by score desc)as s,
    > dense_rank()  over(partition by clazz order by score desc),
    > rank() over(partition by clazz order by score desc)from new_score;

 

 

 

##### percent_rank:(rank的结果-1)/(分区内数据的个数-1)

 

select *, row_number() over(partition by clazz order by score desc)as s,
> rank() over(partition by clazz order by score desc),
> percent_rank() over(partition by clazz order by score desc)from new_score;

##### cume_dist:计算某个窗口或分区中某个值的累积分布。

select *, row_number() over(partition by clazz order by score desc)as s,
> rank() over(partition by clazz order by score desc),
> percent_rank() over(partition by clazz order by score desc),
> cume_dist() over(partition by clazz order by score desc) from new_score;

 

 

> 假定升序排序,则使用以下公式确定累积分布: 小于等于当前值x的行数 / 窗口或partition分区内的总行数。其中,x 等于 order by 子句中指定的列的当前行中的值。

 

##### NTILE(n):对分区内数据再分成n组,然后打上组号

 

##### max、min、avg、count、sum:基于每个partition分区内的数据做对应的计算

 

5.窗口帧格式
  格式1:按照行的记录取值

      ROWS BETWEEN (UNBOUNDED | [num]) PRECEDING AND ([num] PRECEDING | CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)

  格式2:当前所指定值的范围取值

      RANGE BETWEEN (UNBOUNDED | [num]) PRECEDING AND ([num] PRECEDING | CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
注意:
    UNBOUNDED:无界限

    CURRENT ROW:当前行

 

rows格式1:前2行+当前行+后两行

    sum(score) over (partition by clazz order by score desc rows between 2 PRECEDING and 2 FOLLOWING)

rows格式2:前记录到最末尾的总和

    sum(score) over (partition by clazz order by score desc rows between CURRENT ROW and UNBOUNDED FOLLOWING)

 

range格式1: 如果当前值在80,取值就会落在范围在80-2=78和80+2=82组件之内的行

    max(score) over (partition by clazz order by score desc range between 2 PRECEDING and 2 FOLLOWING)

 

免责声明:

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

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

Hive语法及其进阶(二)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Hive语法及其进阶(二)

1、使用JDBC连接Hive 1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.PreparedStatement; 4 import java.s
Hive语法及其进阶(二)
2016-12-30

Hive语法及其进阶(一)

1、Hive完整建表 1 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name( 2 [(col_name data_type [COMMENT col_comment], ...)] 3
Hive语法及其进阶(一)
2021-04-17

C++ 递归进阶:理解尾递归优化及其应用

尾递归优化 (tro) 可提高特定递归调用的效率。它将尾递归调用转换为跳转指令,并将上下文状态保存在寄存器中,而不是堆栈上,从而消除对堆栈的额外调用和返回操作,提高算法效率。利用 tro,我们可以针对尾递归函数(例如阶乘计算)进行优化,通过
C++ 递归进阶:理解尾递归优化及其应用
2024-04-30

systemctl用法及其语法是什么

这期内容当中小编将会给大家带来有关systemctl用法及其语法是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.确定是否安装systemd及其版本# systemctl –version2.确定s
2023-06-05

js二进制数据及其互相转化如何实现

这篇文章主要介绍“js二进制数据及其互相转化如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“js二进制数据及其互相转化如何实现”文章能帮助大家解决问题。file在js中有很多二进制数据,有fi
2023-07-05

js二进制数据及其互相转化实现详解

这篇文章主要为大家介绍了js二进制数据及其互相转化实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-27

阶乘相关的算法及其C++实现的示例分析

本篇文章为大家展示了阶乘相关的算法及其C++实现的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。C++中的阶乘亦是如此。有关阶乘的算法,不外乎
2023-06-17

Python 语法的进阶指南:从基础到精通

Python作为一种高级编程语言,其语法简洁清晰,易于学习。本文将提供一份进阶指南,从基础语法到高级特性,循序渐进地帮助您提升Python编程技能。
Python 语法的进阶指南:从基础到精通
2024-02-19

JavaMorris遍历算法及其在二叉树中的应用

Morris遍历是一种基于线索二叉树的遍历算法,可以在不使用栈或递归的情况下,实现二叉树的前序、中序和后序遍历。该算法利用二叉树中的空指针或线索指针,将遍历序列嵌入到原二叉树中,实现了常数级别的空间复杂度,适用于对空间要求较高的场景
2023-05-18

编程热搜

目录