
#创作者激励#hive从入门到放弃(三)——DML数据操作 原创
【本文正在参加2023年第一期优质创作者激励计划】
上一篇给大家介绍了 hive 的 DDL 数据定义语言,这篇来介绍一下 DML 数据操作语言。
没看过的可以点击跳转阅读:
hive从入门到放弃(一)——初识hive
hive从入门到放弃(二)——DDL数据定义
数据写入
数据导入部分默认数据文件格式为 textfile,每一列由‘,’进行分割,以换行分行。
insert
insert 表示向表中插入数据,可以直接插入值,也可以通过查询其他表获取数据插入。
insert into 以追加数据的方式插入到表或分区,原有数据不会删除;
insert overwrite 则是覆盖原来的数据。
load
① local 加上此关键字则表示从本地加载数据,不加的话就是从 HDFS 加载;
② inpath 后接要导入的数据文件的路径
数据导出
insert 方式导出
1)将查询的结果导出到本地
2)将查询的结果格式化导出到本地(以’/t’结尾的格式分隔字段)
3)将查询的结果格式化导出到 HDFS 上
HDFS 命令方式导出
由于 hive 的数据文件是在 HDFS 上的,因此可以用 HDFS 命令导出。
在 hive CLI 中,只需要将 Hadoop 命令中将‘hdfs’关键字去掉即可,比如:
Hive Shell 命令导出
基本语法:" hive -f/-e 执行语句或者脚本 > file "
Export & Import
hive 在0.8.0以后的版本中提供了 Export 和 Import 的导数方式
export 可以将数据导出到 HDFS 上,导出数据的同时还会生成一个元数据文件,其用法如下:
import 可将数据导入指定的表中,但导入的数据需要元数据,因此需要配合 export 使用
注意:export/import 命令中的路径必须是目录,而不能是文件
清除数据
truncate 只能清除管理表的数据,不能清除外部表数据
查询数据
查询的语句和大部分的数据库查询 SQL 一样:
因此这里只介绍不同或者需要注意的地方。
like 和 rlike
like 和大部分数据库的用法一样,可用于选择类似的值,% 代表零个或多个字符(任意个字符)。
_ 代表一个字符;
而 rlike 则可以用于匹配正则表达式
排序(重点)
hive 的排序关键字有多个,而且每个对应的应用场景也不相同。
order by
order by 全局排序,在 MapReduce 程序中是将所有数据进行排序,因此只有一个 Reducer
sort by
order by 在处理大规模的数据集效率较低。
在很多情况下,并不需要全局排序,此时可以使用 sort by。
Sort by 为每个 reducer 产生一个排序文件。
每个 Reducer 内部进行排序,但对全局结果集来说无序。
distribute by
在某些场景,我们需要控制某条数据应该到哪个 reducer,一般是为了进行后续的聚集操作。
distribute by 类似 MR 中的 partition(自定义分区),可以对数据进行分区,结合 sort by 使用。
distribute by 要分配多个 reduce 进行处理,否则无法看到 distribute by 的效果。
distribute by 的分区规则是根据分区字段的 hash 码与 reduce 的个数进行模除后,
余数相同的分到一个区。
Hive 要求 DISTRIBUTE BY 语句要写在 SORT BY 语句之前。
cluster by
当 distribute by 和 sort by 字段相同时,可以使用 cluster by 方式。
cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。
但是排序只能是升序,不能指定排序规则为 ASC 或者 DESC。
小结
本文介绍了 hive DML 数据操作,主要介绍了一些 hive 特有的关键字和用法。
对于 hive SQL 而言,它的很多语法和常用函数和其它关系型数据库类似,比如 hiving,count(),min()等,这些的用法相信大家都比较熟悉
当然有个别还是有所不同,具体使用场景可以查阅相关资料。
转载请注明出处,关注【大数据的奇妙冒险】,解锁更多新知识!
