大数据学习---HIVE入门SQL学习

时间:2024-10-30 07:36:36

其实HIVE的SQL和MySQL的语法基本类似。

一、数据库

创建数据库

create database 数据库名;

查看数据库

show databases;

切换数据库

use database 数据库名

二、表

创建表

方式一:

create table 表名(

字段名 字段类型,

字段名 字段类型

) row format delimited

fields terminated by "" 使用分隔符

方式二:

create table 表名 as (查询语句查询的结果)

三、加载数据

传统的数据库添加数据使用的是insert,但是这里官方推荐使用load进行数据加载。

数据加载有两种方式:复制形式的加载,移动形式的加载。

命令:

load data local inpath 要加载的文件地址 into table 对应文件的表名

这里加载的是服务器本地的文件系统中的文件,此时是一种纯复制操作。

load data inpath 要加载的文件地址 into table 对应文件的表名

这里加载的是HDFS系统中的文件,此时是一种纯移动操作。

insert插入数据,要启动MR进行计算,所以插入时间会比较长。不过在这里可以使用insert+select进行数据查询插入。

insert into table 表名 查询语句获取相同字段的记录进行批量插入

四、查询数据

1、基本查询语法

HIVE的基本查询语句是与常规的SQL语句一致的。

select current_database();  查询当前看数据库

2、去重

去重使用distinct,放在字段名之前可以根据当前字段进行去重。也可以放在返回结果的多个字段前,就会对多个字段同时去重。

3、where

where查询,其后面是跟一个布尔值

4、聚合函数

AVG(cloumn) 计算平均值

count(cloumn) 统计数量,不包括null

count(*) 统计数量,包括null

max(cloumn) 统计该字段内最大值

min(cloumn) 统计该字段内最小值

sun(cloumn) 对该字段数据求和

5、分组

group by 字段  :按字段进行分组,字段可以是多个,就是按照多个字段进行分组

限制:返回的结果中的字段必须是分组的字段或在聚合函数之中,否则报错。

6、having

having 后面也是布尔类型过滤,他要放在分组之后。

having和where的区别:

having where
分组后执行 分组前执行
可以使用聚合函数 不可以使用聚合函数

7、排序

orderBy 字段 排序:根据某个字段进行排序 ,也可以根据多个字段进行排序

排序分两种:升序排序(asc) 、降序排序(desc)

默认排序是升序排序。

8、限制

limit 数量 n:显示前n条数据

limit n,m :从n开始,显示m条数据

索引从0开始

执行顺序:

from > where > group by > having  > order by > limit > select

示例:

select * from 表

where 条件

group by 字段

having 条件

order by 字段 顺序

limit n|[n,m]

9、关联查询

内连接

select * from A inner join B where =

select * from A join B where =

select * from A,B where =

左连接

select * from A inner left join B where =

在关联查询中,内连接是只将关联到的记录进行展示。外连接则是对所有的记录进行展示,在关联不到的记录中所对应的数据为空。

左连接查询,是以左表为主表,再对右表进行关联,能关联到的显示关联数据,关联不到的只展示左边数据,右表字段为null。右连接相反。

10、内置函数

操作字符串的:

length(str)  查看某个数据的长度

reverse(str) 将字符串进行反转

concat(str1, str2, strArr) 对字符串进行拼接

concat_ws(分隔符,str1, str2, strArr) 对字符串进行分隔符拼接

substr(int start,int length) |substring(int start,int length) 对字符串进行截取 索引是从1开始的

split(str,分隔符) 对字符串进行分割 返回值是一个数组

操作日期的:

current_date();获取当前时间

unix_timestamp():获取当前时间的时间戳

unix_timestamp(date,时间格式):获取自定义的时间的时间戳

from_unixtime(时间戳,自定义的时间格式):将时间戳转换为固定格式的时间

date_diff(时间1,时间2):获取两个时间的天数差

date_add(时间1,int n) :添加几天

date_sub(时间1,int n) :减少几天

数学函数

round(double b) 四舍五入

round(double b,int a):保留a位小数

rand() :获取随机数(0-1)

rand(int n):获取固定数,在随机数获取后就会固定

条件函数

if(boolean b,成功默认值,失败默认值) :判断后可以得到默认值,只能有两个

case str when str1 默认1 when str2 默认2 else 默认3 end :可以判断多个条件