一、hive的DML操作
1.load(向表中装载数据)
hive> load data [local] inpath '路径' [overwrite] into table 表名 [partition (partcol1=val1,…)];
特殊说明
1)local:标识从本地加载数据到Hive表,若没有local的话从HDFS加载数据到Hive表
2)overwrite:表示覆盖原有数据,若没有追加在原有数据上
3)若目标是分区表,则需用partition指定分区表
2.insert
1)将查询结构插入表中
INSERT (INTO | OVERWRITE) TABLE tablename [PARTITION
(partcoll=vall, partcol2=va12 ... ) ] select_statement;//INTO是追加,overwrite是覆盖
示例:
insert overwrite table student partition(month='20240818') select id, name from teacher
2)给定values插入表中
INSERT (INTO | OVERWRITE) TABLE tablename [PARTITION
(partcoll [=vall], partcol2[=va12] ... ) ] VALUES values_row [,
values_row ... ]
示例:
insert into table teacher partition(month='202408016') values(1,'mark');
3)将查询结果写入目标路径
INSERT OVERWRITE [LOCAL] DIRECTORY directory
[ROW FORMAT row format] [STORED AS
file format] select statement;
3.Export和Inmport
介绍:Export将表的数据和元数据信息一并导出到Hdfs路径,Import将Export到处的内容导入Hive,表的数据和元数据信息都会恢复
-- 导出
EXPORT TABLE tablename TO 'export_target_path'-- 导入
IMPORT
'source path' [LOCATION 'import_target_path' ][EXTERNAL] TABLE new_or_original_tablename FROM
二、hive的查询语句
语法
[WITH CommonTableExpression (, CommonTableExpression)*] (Note: Only availablestarting with Hive 0.13.0)
SELECT [ALL | DISTINCT] select_expr, select_expr, ...FROM table_reference[WHERE where_condition][GROUP BY col_list][ORDER BY col_list][CLUSTER BY col_list| [DISTRIBUTE BY col_list] [SORT BY col_list]][LIMIT number]
1.基本查询
1)全表查询
select * from emp;
2)特定列查询
select id, name from emp;
注:关键字不能被缩写也不能多行
2)limit语句
//返回前5行
hive (default)> select * from emp limit 5;//从指定行数开始hive (default)> select * from emp limit 5,3;
3)where语句
基本同SQL语句相同,注意where语句中不能使用字段别名
4)关系运算函数
5)逻辑运算函数(与SQL相同)
6)Join语句(与SQL相似)
--内连接(只有进行连接的两个表中都存在与连接条件相匹配的数据才会被保留下来)
select e.empno, e.ename, d.deptno from emp e join dept d on e.deptno = d.deptno;
--左外连接(JOIN操作符左边表中符合WHERE子句的所有记录将会被返回)
select e.empno, e.ename, d.deptno from emp e left join dept d on e.deptno = d.deptno;
--右外连接(JOIN操作符右边表中符合WHERE子句的所有记录将会被返回)
select e.empno, e.ename, d.deptno from emp e right join dept d on e.deptno = d.deptno;
--满外连接(将会返回所有表中符合WHERE语句条件的所有记录。如果任一表的指定字段没有符合条件的值的话,那么就使用NULL值替代)
select e.empno, e.ename, d.deptno from emp e full join dept d on e.deptno = d.deptno;
--笛卡尔积
select * from table1 join table2
2.排序
1)order by(全局排序)
在hive中,order by通常与limit使用
2)Sort By(每个Redeuce内部排序)
对每个Reduce进行排序,对全局结果来说并不是排序
--设置reduce个数
hive (default)> set mapreduce.job.reduces=3;
--查看设置reduce个数
hive (default)> set mapreduce.job.reduces;
3)Distribute By(分区)
结合sort by使用,且要求Distribute by 要在Sort by语句之前
4)Cluster By(分区排序)
当 distribute by 和 sort by字段相同时,可以使用cluster by方式。
cluster by 除了具有distribute by 的功能外还兼具sort by的功能。但是排序只能是升序
排序,不能指定排序规则为asc或者desc。