hive基础语法_必修二英语语法结构图

hive基础语法_必修二英语语法结构图1、使用JDBC连接Hive 1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.Prep

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<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>=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相匹配,而不是只需与其字符串匹配。

hive基础语法_必修二英语语法结构图

 

 

 

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]”;

.hive基础语法_必修二英语语法结构图

 

 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

hive基础语法_必修二英语语法结构图 3)substring字符串的截取

hive基础语法_必修二英语语法结构图

 4)split字符串的切分

hive基础语法_必修二英语语法结构图

 

 

 5)explode列转行

hive基础语法_必修二英语语法结构图

 

 

 解析json格式的数据

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

hive基础语法_必修二英语语法结构图

 

 

 

 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:无并列排名

hive基础语法_必修二英语语法结构图

 

分组求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;

 

hive基础语法_必修二英语语法结构图

 

 

##### 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;

 

hive基础语法_必修二英语语法结构图

 

 

##### 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;

hive基础语法_必修二英语语法结构图

##### 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;

hive基础语法_必修二英语语法结构图

 

 

> 假定升序排序,则使用以下公式确定累积分布: 小于等于当前值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)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5814.html

(0)
上一篇 2023-04-23 17:30
下一篇 2023-04-23

相关推荐

  • [开源][示例更新]eCharts配置简化包OptionCreator[typescript版][通俗易懂]

    [开源][示例更新]eCharts配置简化包OptionCreator[typescript版][通俗易懂]前言 eCharts作为国内优秀的开源图表工具,功能强大,但是使用中也存在一定的问题。 文档更新较慢,文档说明不详细。 前端使用的弱类型语言,数据结构在灵活的同时,也容易造成一些问题。例如某些属性到底

    2023-03-19
    144
  • mysql数据库基本类型_四类八种数据类型

    mysql数据库基本类型_四类八种数据类型一 数据库初识 1.1 什么是数据库 数据库(DataBase,简称DB),简而言之可视为电子化的文件柜 存储电子文件的处所,用户可以对文件中的数据运行新增,截取,更新,删除等操作. 所谓数据库是以一

    2022-12-24
    164
  • 【赵强老师】Oracle的PGA与数据库连接建立的过程「建议收藏」

    【赵强老师】Oracle的PGA与数据库连接建立的过程「建议收藏」首先,我们来了解一下Oracle的内存结构,如下: 关于Oracle的内存结构,详情请查看:【赵强老师】Oracle数据库的内存结构 (一)PGA的组成结构 PGA主要由以下三部分组成: 私有SQL区

    2023-02-15
    139
  • day06-多表查询02[亲测有效]

    day06-多表查询02[亲测有效]多表查询02 4.表复制 自我复制数据(蠕虫复制) 有时,为了对某个sql语句进行效率测试,我们需要海量数据时,可以用此法为表创建海量数据 为了对某个sql语句进行效率测试,我们需要海量数据时,

    2023-06-08
    138
  • 登录sqlplus用户名和口令_sqlplus nolog登录

    登录sqlplus用户名和口令_sqlplus nolog登录环境oracle 11.2.0.4, linux redhat 6.9 RAC2个实例 1.问题现象 sqlplus登录用户hang住 oracle@wocdb6 ~]$ sqlplus wa/Sx…

    2023-03-28
    150
  • 实战笔记丨JDBC问题定位指南「建议收藏」

    实战笔记丨JDBC问题定位指南「建议收藏」JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集。JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首…

    2023-03-16
    138
  • Python计算0的正弦值

    Python计算0的正弦值正弦函数是一个周期为2π的连续函数,被广泛应用于科学计算和工程领域。在数学上,它是一种三角函数,通常用sin(x)表示,其中x是角度。然而,在一些数值计算中,需要对0进行正弦值计算,这时可以使用泰勒级数展开进行计算。泰勒级数是将一个特定的函数展开成无穷级数的方法,而正弦函数的泰勒级数为:

    2024-01-20
    97
  • 用Python自加一

    用Python自加一在Python中,我们可以通过给列表添加一个新元素来实现列表加一个数。首先,我们需要定义一个列表:

    2024-05-15
    78

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注