hive 命令记录(随时更新)

1.进入 hive 数据库:

hive

2.查看hive中的所有数据库:

show databases;

3.用 default 数据库

use default;

4.查看所有的表

show tables;

5.查询 book 表结构:

desc book ;

6.查询 book 表数据

select * from book;

7.创建 shop 数据库

create database shop;

create database if not exists shop;

创建 shop 数据库 并指定在hdfs的位置

create database shop localtion '/test/1';

8.删除 shop 数据库

drop dtatbase if exists shop ;

dorp schema shop;

全部删除相应的表,在删除数据库之前:

drop database if exists shop cascade;

9.创建表tb_employee

create table if not exists tb_employee

( id int ,

name string,

dept string

) comment '员工信息表'

row format DELIMTED

fields terminated by '\t'

lines terminated by '\n'

stored as textfile;

如果要增加分区必须在创建表的时候就创建分区,不然就得删掉重新建表

create table if not exists tb_employee

( id int ,

name string,

dept string

) comment '员工信息表'

partitioned by (year int)

row format DELIMTED

fields terminated by '\t'

lines terminated by '\n'

stored as textfile;
stored as textfile 文件格式,文件格式在hive中有三种:textfile,RCfile,Sequencefile

10.添加数据到表中

load data local inpath '/usr/hadoop/hive/employee.txt'
overwrite into tb_employee;

如果table 是个分区表,则必须在添加时指定分区

load data local inpath '/usr/hadoop/hive/employee.txt' overwrite

into tb_employee partition(year=2023);
load data : 加载数据

local: 本地数据

inpath: 文件地址

overwrite:覆盖表中的数据,不加overwrite是追加数据

插入表数据

insert into tb_employee(id,name) values('1','wcz');

11.重命名表格

alter table tb_temployee rename to emp;

12.修改emp 表中 name 字段 为 user_name

alter table emp change name user_name string;

13.修改 emp 表中 salary 的数据类型从 float 改为 double

alter table emp change salary salary double;

14.删除emp 表

drop talbe emp;

15.创建视图

create view emp_view as select * from emp where salary > 3000;

16.不同的连接

join

left outer join

right outer join

full outer join
left semi join on

只在on设置右表的查询条件且查询只包含左表的结果

17.创建外部表

create external table out_employee

( id int ,

name string,

dept string

) ;

18.查询外部表信息

desc formatted out_employee ;

19.获取字符串第一个字符

1.SUBSTRING(cloumn_name,1,1)

2.LEFT (cloumn_name,1,1)

3.REGEXP_EXTRACT(cloumn_name,'^(.)',1)

20.排序

1.order by : 全局排序,只会有一个reduce,不建议

默认升序: ASC 降序 : DESC

在hive.mapred.mode = strict 模式下 必须指定 limit 否则执行会报错。
2.sort by : 局部排序,保证每个reduce上是有序的,但全局不一定
3..distribute by 分区排序,可以将相同的key放到同一个reduce进行处理,但不保证有序

想要保证有序 distribute by 语句后面加上 sort by
4.cluster by score = distribute by score sort by score

但是默认升序,不支持指定

21.备份一个表

1.先备份表结构,再备份表数据

create table if not exists borrow_log_bak like borrow_log;

insert into borrow_log_bak select * from borrow_log;

2.创建的同时插入数据

create table borrow_log_bak as select * from borrow_log;

以下摘抄 点击跳转到原文 https://zhuanlan.zhihu.com/p/662539681

22.分组 group by

使用 group by 分组后面只能跟 字段 或者聚合函数 后面也可以是使用 having 对数据进行进行筛选

23.聚合函数

count(*) 包含null值,统计所有行数
count(name) 不包含null值
min 求最小值,不包含null值,除非所有值都是null
avg 求平均值,不包括null值

var_pop(col) 统计结果集中col非空集合的总体变量(忽略NULL),返回值 double var_samp(col)

统计结果集中col费空集合的样本变量(忽略NULL)返回值 double stddev_pop

该函数计算总体标准偏离,并返回总体变量的平方根,其返回值与var_pop函数的平方根相同 percentile(BIGINT col,p)

求准确的第pth个百分数,p必须介于0和1之间,但是col字段目前只支持整数,不支持浮点类型

24.关系运算符

等于 =

不等于 != 或者 <>

小于 <

小于等于 <=

大于 >

大于等于 >=

判断为空 is null

判断非空 is not null

25.数值运算

取整: round(double a) 遵循四舍五入原则

指定精度取整:round(double a,int b)

向下取整:floor(double a)

向上取整:ceil(double a)

取随机数:rand() 或者 rand(int seed) 返回0-1内的随机数,如果指定了seed,那每次返回的结果都是一样的

自然指数: exp(double a) 返回自然对数e的a次方

以10为底的对数函数:log10(double a) 返回以10为底a的对数

幂运算:pow(double a,double b) 返回 a 的 b 次幂

开平方:sqrt(double a) 返回 a 的平方根

二进制数:bin(BIGINT a) 返回 a 的二进制表示

。。。。

十六进制函数: hex()、将十六进制转化为字符串函数: unhex()

进制转换函数: conv(bigint num, int from_base, int to_base) 说明: 将数值num从from_base进制转化到to_base进制

此外还有很多数学函数:绝对值函数: abs()、正取余函数:

pmod()、正弦函数: sin()、反正弦函数: asin()、余弦函数: cos()、反余弦函数: acos()、positive函数:

positive()、negative函数: negative()

26.条件函数

If函数: if

语法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)

返回值: T

说明: 当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull

hive> select if(1=2,100,200) ;

200

hive> select if(1=1,100,200) ;

100
非空查找函数: coalesce

语法: coalesce(T v1, T v2, ...)

返回值: T

说明: 返回参数中的第一个非空值;如果所有值都为NULL,那么返回NULL

hive> select coalesce(null,'100','50') ;

100
条件判断函数:case when (两种写法,其一)

语法: case when a then b [when c then d]* [else e] end

返回值: T

说明:如果a为TRUE,则返回b;如果c为TRUE,则返回d;否则返回e

hive> select case when 1=2 then 'tom' when 2=2 then 'mary' else 'tim' end from tableName;

mary

条件判断函数:case when (两种写法,其二)

语法: case a when b then c [when d then e]* [else f] end

返回值: T

说明:如果a等于b,那么返回c;如果a等于d,那么返回e;否则返回f

hive> Select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end from tableName;

mary

27.日期函数

注:以下SQL语句中的 from tableName 可去掉,不影响查询结果

获取当前UNIX时间戳函数: unix_timestamp

语法: unix_timestamp()

返回值: bigint

说明: 获得当前时区的UNIX时间戳

hive> select unix_timestamp() from tableName;

1616906976

UNIX时间戳转日期函数: from_unixtime

语法: from_unixtime(bigint unixtime[, string format])

返回值: string

说明: 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式

hive> select from_unixtime(1616906976,'yyyyMMdd') from tableName;

20210328

日期转UNIX时间戳函数: unix_timestamp

语法: unix_timestamp(string date)

返回值: bigint

说明: 转换格式为"yyyy-MM-dd HH:mm:ss"的日期到UNIX时间戳。如果转化失败,则返回0。

hive> select unix_timestamp('2021-03-08 14:21:15') from tableName;

1615184475

指定格式日期转UNIX时间戳函数: unix_timestamp

语法: unix_timestamp(string date, string pattern)

返回值: bigint

说明: 转换pattern格式的日期到UNIX时间戳。如果转化失败,则返回0。

hive> select unix_timestamp('2021-03-08 14:21:15','yyyyMMdd HH:mm:ss') from tableName;

1615184475

日期时间转日期函数: to_date

语法: to_date(string timestamp)

返回值: string

说明: 返回日期时间字段中的日期部分。

hive> select to_date('2021-03-28 14:03:01') from tableName;

2021-03-28

日期转年函数: year

语法: year(string date)

返回值: int

说明: 返回日期中的年。

hive> select year('2021-03-28 10:03:01') from tableName;

2021

hive> select year('2021-03-28') from tableName;

2021

日期转月函数: month

语法: month (string date)

返回值: int

说明: 返回日期中的月份。

hive> select month('2020-12-28 12:03:01') from tableName;

12

hive> select month('2021-03-08') from tableName;

8

日期转天函数: day

语法: day (string date)

返回值: int

说明: 返回日期中的天。

hive> select day('2020-12-08 10:03:01') from tableName;

8

hive> select day('2020-12-24') from tableName;

24

日期转小时函数: hour

语法: hour (string date)

返回值: int

说明: 返回日期中的小时。

hive> select hour('2020-12-08 10:03:01') from tableName;

10

日期转分钟函数: minute

语法: minute (string date)

返回值: int

说明: 返回日期中的分钟。

hive> select minute('2020-12-08 10:03:01') from tableName;

3

日期转秒函数: second

语法: second (string date)

返回值: int

说明: 返回日期中的秒。

hive> select second('2020-12-08 10:03:01') from tableName;

1

日期转周函数: weekofyear

语法: weekofyear (string date)

返回值: int

说明: 返回日期在当前的周数。

hive> select weekofyear('2020-12-08 10:03:01') from tableName;

49

日期比较函数: datediff

语法: datediff(string enddate, string startdate)

返回值: int

说明: 返回结束日期减去开始日期的天数。

hive> select datediff('2020-12-08','2012-05-09') from tableName;

213

日期增加函数: date_add

语法: date_add(string startdate, int days)

返回值: string

说明: 返回开始日期startdate增加days天后的日期。

hive> select date_add('2020-12-08',10) from tableName;

2020-12-18

日期减少函数: date_sub

语法: date_sub (string startdate, int days)

返回值: string

说明: 返回开始日期startdate减少days天后的日期。

hive> select date_sub('2020-12-08',10) from tableName;

2020-11-28

28.字符串函数

字符串长度函数:length

语法: length(string A)

返回值: int

说明:返回字符串A的长度

hive> select length('abcedfg') from tableName;

7

字符串反转函数:reverse

语法: reverse(string A)

返回值: string

说明:返回字符串A的反转结果

hive> select reverse('abcedfg') from tableName;

gfdecba

字符串连接函数:concat

语法: concat(string A, string B...)

返回值: string

说明:返回输入字符串连接后的结果,支持任意个输入字符串

hive> select concat('abc','def','gh')from tableName;

abcdefgh

带分隔符字符串连接函数:concat_ws

语法: concat_ws(string SEP, string A, string B...)

返回值: string

说明:返回输入字符串连接后的结果,SEP表示各个字符串间的分隔符

hive> select concat_ws(',','abc','def','gh')from tableName;

abc,def,gh

字符串截取函数:substr,substring

语法: substr(string A, int start),substring(string A, int start)

返回值: string

说明:返回字符串A从start位置到结尾的字符串

hive> select substr('abcde',3) from tableName;

cde

hive> select substring('abcde',3) from tableName;

cde

hive> select substr('abcde',-1) from tableName; (和ORACLE相同)

e

字符串截取函数:substr,substring

语法: substr(string A, int start, int len),substring(string A, int start, int len)

返回值: string

说明:返回字符串A从start位置开始,长度为len的字符串

hive> select substr('abcde',3,2) from tableName;

cd

hive> select substring('abcde',3,2) from tableName;

cd

hive>select substring('abcde',-2,2) from tableName;

de

字符串转大写函数:upper,ucase

语法: upper(string A) ucase(string A)

返回值: string

说明:返回字符串A的大写格式

hive> select upper('abSEd') from tableName;

ABSED

hive> select ucase('abSEd') from tableName;

ABSED

字符串转小写函数:lower,lcase

语法: lower(string A) lcase(string A)

返回值: string

说明:返回字符串A的小写格式

hive> select lower('abSEd') from tableName;

absed

hive> select lcase('abSEd') from tableName;

absed

去空格函数:trim

语法: trim(string A)

返回值: string

说明:去除字符串两边的空格

hive> select trim(' abc ') from tableName;

abc

左边去空格函数:ltrim

语法: ltrim(string A)

返回值: string

说明:去除字符串左边的空格

hive> select ltrim(' abc ') from tableName;

abc

右边去空格函数:rtrim

语法: rtrim(string A)

返回值: string

说明:去除字符串右边的空格

hive> select rtrim(' abc ') from tableName;

abc

正则表达式替换函数:regexp_replace

语法: regexp_replace(string A, string B, string C)

返回值: string

说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数。

hive> select regexp_replace('foobar', 'oo|ar', '') from tableName;

fb

正则表达式解析函数:regexp_extract

语法: regexp_extract(string subject, string pattern, int index)

返回值: string

说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。

hive> select regexp_extract('foothebar', 'foo(.?)(bar)', 1) from tableName;
the
hive> select regexp_extract('foothebar', 'foo(.
?)(bar)', 2) from tableName;

bar

hive> select regexp_extract('foothebar', 'foo(.?)(bar)', 0) from tableName;
foothebar
strong>注意,在有些情况下要使用转义字符,下面的等号要用双竖线转义,这是java正则表达式的规则。
select data_field,
regexp_extract(data_field,'.
?bgStart\=([^&]+)',1) as aaa,

regexp_extract(data_field,'.?contentLoaded_headStart\=([^&]+)',1) as bbb,
regexp_extract(data_field,'.
?AppLoad2Req\=([^&]+)',1) as ccc

from pt_nginx_loginlog_st

where pt = '2021-03-28' limit 2;

URL解析函数:parse_url

语法: parse_url(string urlString, string partToExtract [, string keyToExtract])

返回值: string

说明:返回URL中指定的部分。partToExtract的有效值为:HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO.

hive> select parse_url

('https://www.tableName.com/path1/p.php?k1=v1\&k2=v2#Ref1', 'HOST')

from tableName;

www.tableName.com

hive> select parse_url

('https://www.tableName.com/path1/p.php?k1=v1\&k2=v2#Ref1', 'QUERY', 'k1')

from tableName;

v1

json解析函数:get_json_object

语法: get_json_object(string json_string, string path)

返回值: string

说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。

hive> select get_json_object('{"store":{"fruit":[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}], "bicycle":{"price":19.95,"color":"red"} },"email":"amy@only_for_json_udf_test.net","owner":"amy"}','$.owner') from tableName;

空格字符串函数:space

语法: space(int n)

返回值: string

说明:返回长度为n的字符串

hive> select space(10) from tableName;

hive> select length(space(10)) from tableName;

10

重复字符串函数:repeat

语法: repeat(string str, int n)

返回值: string

说明:返回重复n次后的str字符串

hive> select repeat('abc',5) from tableName;

abcabcabcabcabc

首字符ascii函数:ascii

语法: ascii(string str)

返回值: int

说明:返回字符串str第一个字符的ascii码

hive> select ascii('abcde') from tableName;

97

左补足函数:lpad

语法: lpad(string str, int len, string pad)

返回值: string

说明:将str进行用pad进行左补足到len位

hive> select lpad('abc',10,'td') from tableName;

tdtdtdtabc

注意:与GP,ORACLE不同,pad 不能默认

右补足函数:rpad

语法: rpad(string str, int len, string pad)

返回值: string

说明:将str进行用pad进行右补足到len位

hive> select rpad('abc',10,'td') from tableName;

abctdtdtdt

分割字符串函数: split

语法: split(string str, string pat)

返回值: array

说明: 按照pat字符串分割str,会返回分割后的字符串数组

hive> select split('abtcdtef','t') from tableName;

["ab","cd","ef"]

集合查找函数: find_in_set

语法: find_in_set(string str, string strList)

返回值: int

说明: 返回str在strlist第一次出现的位置,strlist是用逗号分割的字符串。如果没有找该str字符,则返回0

hive> select find_in_set('ab','ef,ab,de') from tableName;

2

hive> select find_in_set('at','ef,ab,de') from tableName;

0

29.内置函数

NVL

给值为NULL的数据赋值,它的格式是NVL( value,default_value)。它的功能是如果value为NULL,则NVL函数返回default_value的值,否则返回value的值,如果两个参数都为NULL ,则返回NULL
select nvl(column, 0) from xxx;

行转列

函数 描述

CONCAT(string A/col, string B/col...) 返回输入字符串连接后的结果,支持任意个输入字符串

CONCAT_WS(separator, str1, str2,...) 第一个参数参数间的分隔符,如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间。

COLLECT_SET(col) 将某字段的值进行去重汇总,产生array类型字段

COLLECT_LIST(col) 函数只接受基本数据类型,它的主要作用是将某字段的值进行不去重汇总,产生array类型字段。

列转行(一列转多行)

Split(str, separator): 将字符串按照后面的分隔符切割,转换成字符array。
EXPLODE(col):将hive一列中复杂的array或者map结构拆分成多行。
LATERAL VIEW
用法:
LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。
准备数据源测试

movie category
《功勋》 记录,剧情
《战狼2》 战争,动作,灾难

SQL:

SELECT movie,category_name

FROM movie_info

lateral VIEW

explode(split(category,",")) movie_info_tmp AS category_name ;

测试结果

《功勋》 记录

《功勋》 剧情

《战狼2》 战争

《战狼2》 动作

《战狼2》 灾难

相关推荐
浊酒南街18 小时前
hive中map_concat函数介绍
数据仓库·hive·hadoop
qq_4465980420 小时前
contos7.9 部署3节点 hadoop3.4 集群 非高可用
大数据·hadoop
雷神乐乐21 小时前
Flume学习
hadoop·学习·flume
遥遥晚风点点1 天前
spark 设置hive.exec.max.dynamic.partition不生效
大数据·hive·spark
huaqianzkh1 天前
了解Hadoop:大数据处理的核心框架
大数据·hadoop·分布式
Kika写代码1 天前
【Hadoop】【hdfs】【大数据技术基础】实验三 HDFS 基础编程实验
大数据·hadoop·hdfs
我的K84091 天前
Flink整合Hive、Mysql、Hbase、Kafka
hive·mysql·flink
Java资深爱好者1 天前
数据湖与数据仓库的区别
大数据·数据仓库·spark
heromps1 天前
hadoop报错找不到主类
大数据·hadoop·eclipse
静听山水2 天前
基于ECS实例搭建Hadoop环境
hadoop