启动metastore
启动hiveserver2
启动beeline
“-e”不进入 hive 的交互窗口执行 sql 语句
“-f”执行脚本中 sql 语句
DDL
COMMENT:为表和列添加注释。
PARTITIONED BY :创建分区表
CLUSTERED BY :创建分桶表
SORTED BY :不常用,对桶中的一个或多个列另外排序
LOCATION :指定表在 HDFS 上的存储位置。
在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
修改内部表为外部表:
alter table student2 set tblproperties(‘EXTERNAL’=‘TRUE’);
区分大小写!
重命名
ALTER TABLE table_name RENAME TO new_table_name
ADD 是代表新增一字段,字段位置在所有列后面(partition 列前)
REPLACE 则是表示替换表中所有字段。
DML
加载数据
- 本地文件stu.txt
opt/module/hive/stu.txt - 创建一张表
create table student1(id int,name string)
row format delimited fields terminated by ‘\t’; - 加载本地文件到hive
load data local inpath
‘/opt/module/hive/stu.txt’ into table default.student1; - 查询
select * from student1; - 比较运算符
- having 与 where 不同点
(1)where 后面不能写分组函数,而 having 后面可以使用分组函数。
(2)having 只用于 group by 分组统计语句。
where后不能加字段别名,可以加表别名
外连接
涉及到2个表,分为:主表和从表,要查询的信息主要来⾃于哪个表,谁就是主表。
外连接查询结果为主表中所有记录。如果从表中有和它匹配的,则显⽰匹配的值,这部分相当于内连接查询出来的结果;如果从表中没有和它匹配的,则显示null。
最终:外连接查询结果 = 内连接的结果 + 主表中有的⽽内连接结果中没有的记录。
外连接分为2种:
左外链接:使⽤left join关键字,left join左边的是主表。
右外连接:使⽤right join关键字,right join右边的是主表。
满外连接:全外连接=左外连接+右外连接
Truncate :只能删除管理表,不能删除外部表中数据
多表连接
笛卡尔积
(1)省略连接条件
(2)连接条件无效
(3)所有表中的所有行互相连接
关于四个排序
全局排序(order by)
多个列排序
按照部门和工资升序排序
hive (default)> select ename, deptno, sal from emp order by deptno, sal;
先按照部门号排,再根据薪水排序
每个 Reduce 内部排序(Sort By)
为每个 reducer 产生一个排序文件。每个 Reducer 内部进行排序。
分区排序
函数
UDF :一对一
UDAF:多对一 聚集函数 类似:count/max/min
UDTF:一对多 如:lateral view explode()
行转列: 多列转一行
- concat
返回输入字符串连接后的结果,支持任意个输入字符串 - concat_ws
第一个参数是分隔符 - CONCAT_WS must be "string or array
case when then else end
列转行: 一行转多行
- explode
- LATERAL VIEW
LATERAL VIEW udtf(expression) tableAlias AS columnAlias
用于和 split, explode 等 UDTF 一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
over()窗口函数
分析函数 over(partition by 列名 order by 列名 rows between 开始位置 and 结束位置)
即一行对应一个窗口,窗口的范围取决于over()函数里对窗口范围的约束:
注:通过order by 来对order by字段排序后的行进行开窗,第一行数据的窗口大小是1,第二行数据的窗口范围是前2行,第n行的窗口范围是前n行
- 此时每一行的窗口都是所有的行
select *,count(1) over() from test; - over(partition by name)每一行根据 name来区分窗口
- over(order by date) orderdate=1的窗口只有一行,orderdate=2的窗口包括前两行
- over(partition by name order by id) 每一行根据 name来区分窗口,再根据order by 取具体的范围。
常与over()一起使用的分析函数:
- avg()、sum()、max()、min()
- 按照值排序时产生一个自增编号row_number()不会重复、rank()值相等时会重复产生空位、dense_rank()值相等时会重复不会产生空位。
- lag
- lead