Hive数据操作

这篇具有很好参考价值的文章主要介绍了Hive数据操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hive数据操作

1. 数据的装载

  • 向管理表中装载数据

(1) 装载数据的方式:

​ overwrite into 为覆写, 单独使用 into 为追加写入。

(2)装载数据的过程:

​ 使用本地路径装载时,执行过程为复制。从HDFS路径装载数据,执行过程为移动。

#装载本地系统上的数据文件(本地路径为绝对路径)
hive>load data local inpath '/usr/local/word.txt' [overwrite] into table tb_name;

#从HDFS路径装载数据文件
hive>load data inpath '/user/hive/data/words.txt' [overwirte] into table tb_name;

关系型数据库插入数据,有一个检验过程,检验插入数据是否与表的字段类型匹配;而数据仓库中加载数据时,没有检查过程的,而是直接将数据文件复制或移动到对应的表目录中。

  • 通过查询语句得到的数据集,将数据集插入到指定的表中

(1)overwrite 为覆写, into 为追加写入;

(2)insert (overwrite|into)都会触发一个mapreduce应用。

#覆写
hive>insert overwrite table tb_name select * from tbl_name2;

#追加
hive>insert into table tb_name select * from tbl_name2;
  • 在创建表的同时,加载数据(CTAS)
  1. 创建新表的过程中,会使用查询的结果集对应的字段名和数据类型作为新表的字段名和数据类型,同时,默认新表的存储格式为 textFile。

  2. 这个功能的常见情况是从一个大的宽表中选取部分需要的数据集。

hive>create table tb_name  as select field1, field2, ... from tbl_name;

2. 数据表中数据的导出,导入

(1)导出方式

使用Mapreduce应用导出数据.

overwrite 为覆写

  • 将数据导出到本地文件系统(使用绝对路径)
#将查询的结果集覆盖写入到本地文件中,文件名自动命名为00000*_0
hive>insert overwrite  local directory '/home/data' select * from tb_name;
  • 将数据导出到HDFS目录(绝对路径)
hive>insert overwrite directory '/user/hive/'  select * from tb_name;
  • export导出数据到指定目录(hdfs路径)
#使用export导出数据到指定目录
hive>export table tb_name to '/user/hive/'

(2)导入方式

使用import命令函数,将HDFS上的数据集,导入到指定的HDFS目录下,并生成一个新的数据表(基本表)

语法格式:

IMPORT [ [EXTERNAL] TABLE new_tablename FROM ‘data_path’ [LOCATION ‘import_target_path’]

#将HDFS目录/input/data中的数据导入并生成新的内部表emp_new
hive>import table emp_new from ‘/input/data’;

3. Hive Shell

  • 语法格式:

hive [-hiveconf x=y] * [<-i filename>] * [<-f filename> | <-e query-string>] [-S] [-d]

  • 参数说明:

    -hiveconf x=y : 配置Hive/Hadoop参数

    -i : 从文件初始化HQL

-f : 执行HQL脚本,与 –i 参数作用类似

-e : 从命令行执行指定的HQL

-S : 静默模式,在交互模式中仅输出主要信息,也就是输出中会去掉“OK”和 “Time taken…”

-d : 自定义变量,以便在HQL脚本中使用

  • 命令行示例
[]#hive -e "select * from tb_name;"
  • 脚本文件示例
# 首先将以下SQL语句写入到一个文件中,文件命名为 query.hql
use empdb;
select count(1) from emp;

# 使用命令“hive –f”执行脚本
$hive –f query.hql 

  • 使用Hive命令行自定义变量,完成通用查询
# 首先修改query.hql文件为以下内容
use ${db};
select count(1) from ${table};

# 使用命令“hive –f”执行脚本
$hive –f query.hql  -d db=empdb  -d table=emp

4. 高级查询

(1)单表查询语句中使用的子句

  • 查看函数的命令
#当前会话中加载的hive的函数
hive>show functions;

#查看指定函数的简单描述, extended 详细描述。
hive>desc  function  extended  func_name;  
  • where子句

where子句

(1)where 条件必须是布尔表达式,用于过滤结果集(参考示例4-1)

(2)where子句中不允许出现子查询,如:select * from tabl_name where fields_name in (select expr) 是无法执行的。

(3)多用于在查询语句中对结果集的过滤

(4)如果查询的结果集是使用了group by 进行了分组,那么不能使用where子句进行过滤,而是使用having子句过滤结果集。

hive>select * from tb_name where id < 100;
  • all, distinct表达式

(1) select查询语句中默认返回所有结果集,默认子句为ALL(缺省)

(2) select查询语句大多数情况使用distinct子句对查询的结果集进行去重操作

hive>select distinct id from tb_name;
  • 嵌套查询

在外层查询语句的from子句中,嵌套一个查询语句。实际开发中,不建议嵌套超过3层。

hive>select * from select id, name from tb2 as tmprel;
  • GROUP BY 分组子句

(1)Hive 支持使用 GROUP BY 进行分组聚合操作,

(2)按照指定的字段进行分组,那么select子句后一定要有该字段。

(3)分组查询通常与聚合函数一起使用。

hive> select id, avg(score) from student group by id;
  • 排序子句sort by 或 order by

(1)默认排序顺序都是升序(asc)

(2)order by 子句排序是对最终结果集进行排序,或者是对全局进行排序。

​ sort by 子句排序,是对mapreduce应用执行过程中,在单一的reduce阶段进行排序。是局部的排序,不能保证最终的结果集是有序的。

(3)在没有指定多个reduer的情况下,order by 与 sort by没有区别。

hive>select deptno, empno from emp order by deptno asc, sal desc;
  • distribute by 结合sort by进行局部排序
hive> select * from poly distribute by id  sort by id,salary;
  • cluster by替代distribute by 结合sort by进行排序,最终结果为全局排序。

当 distribute by和sort by涉及的列完全相同,并且采用升序排列时,使用Cluster by替代,且完成全局排序。

  • having 子句

可以使用 HAVING 对分组数据进行过滤。在使用group by进行分组查询时,通常使用having子句进行数据集的过滤。

select deptno count(*) from emp group by deptno having sum(sal)>9000;

#where过滤用于select查询结果集的过滤,having与group by中的数据过滤
select sex,avg(age)  from big  where id > 1 group by sex having avg(age) > 20;
  • Like 和 RLike子句

like:’%’ 代表零个或多个字符(任意个字符);’_’ 代表一个字符。

RLike:是 Hive 中对 “Like” 的扩展,可以通过 Java 的正则表达式来指定匹配条件。

hive>select * from emp where sal like '88_';
hive>select * from emp where sal like '8%';

(2)多表联查

关键字:A JOIN B ON A.id = B.id

JOIN 语句的关联条件必须用 ON 指定,不能用 WHERE 指定,否则就会先做笛卡尔积,再过滤,这会导致你得不到预期的结果

分类:内连接,外连接(左外连接,右外连接,全连接),笛卡尔乘积

注意:当查询的结果中没有对应数据时,会以NULL值填充。

  • 内连接查询,用于对多个表求交集。
hive>select * from A join B ON A.id = B.id;
  • 左外连接

    (1) 求表A中的所有数据,并且表B中包含的A表中的数据

hive>select * from A left join B ON A.key = B.key;

​ (2)求表A中不包含表B中的所有数据。

hive>select * from A left join B ON A.key = B.key where B.key IS NULL;
  • 右外连接

(1)求表B中的所有数据,并且表A中包含的表B中的数据

hive>select * from A right join B ON A.key = B.key;

(2)求表B中不包含表A中的所有数据

hive>select * from A right join B ON A.key = B.key where A.key IS NULL;
  • 全连接

全连接用于求多个表中数据的并集,即多个表中的全部数据。

hive>select * from A full outer join B ON A.key = B.key;

(1) 去除表a和表b中的相同数据

hive>select * from A full outer join B ON A.key = B.key where A.key IS NULL or B.key is null;
联合查询 union all

语法结构:

select * from tb_name union all select * from tb_name2 ;

使用联合查询时,每一个union子查询都必需具有相同的列,而且对应的每个字段的字段类型必须是一致的,得到的结果是多个表中的数据的合集。文章来源地址https://www.toymoban.com/news/detail-455273.html

到了这里,关于Hive数据操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql-数据库-在表中添加数据三种方式

    创建完成后,就可以进行添加数据的操作了(表的名字是自己起的),记得和下面的名字匹配上就行。 1.第一行数据,使用第一种形式 2.第二行数据,指定你要指定要插入字段 4.使用一条insert into语句插入多条记录 以下仅供参考: 完成后,即可查看表中的数据

    2024年02月08日
    浏览(50)
  • 【MySQL】对表中数据的操作

    本期给大家带来的是MySQL下对表中数据的增删查改操作 目录 一、对表插入数据 1.1 单行数据插入 1.2 多行数据插入 1.3 插入冲突时更新数据 1.4 替换式插入  1.5 插入查询结果 二、对表中数据进行查询 2.1 基本select 2.1.1 使用select查询表中数据  2.1.2 使用select进行计算 2.1.3 在se

    2024年02月14日
    浏览(38)
  • mysql 删除表中数据的方式有几种?各有什么优劣?

    在MySQL中,删除表中数据的方式有多种。下面是一些常用的方式以及它们的优劣势: 使用DELETE语句: 优势:DELETE语句是最常见和简单的删除数据方式。它可以删除表中的所有数据或者根据WHERE子句删除指定条件的数据。 劣势:DELETE语句执行时,会将数据逐行删除,对于大表或

    2024年02月16日
    浏览(52)
  • Mysql 数据库DML 数据操作语言—— 对数据库表中的数据进行更改UPDATE 和删除DELETE

        delete语句可以有条件,也可以没有,如果没有条件的话就是删除整张表 delete不可以删除表中某一个字段的值,但是update可以; 

    2024年01月19日
    浏览(54)
  • hive使用文件方式批量导入数据

    1. 创建表,确定分隔符,换行符: 2. 编写数据文件: 3. 查看此表所在路径:describe extended 表名; 4. 将本地生成好的数据上传至服务器 5. 将生成的txt文件put进HDFS集群 /hive/warehouse/mdp_uat.db/test : 集群路径,第三部查询到的表路径(提前使用 hadoop fs -ls 查看下路径,确认路径正确

    2024年02月13日
    浏览(41)
  • Hive基础知识(十):Hive导入数据的五种方式

    1)语法 (1)load data:表示加载数据 (2)local:表示从本地加载数据到 hive 表;否则从 HDFS 加载数据到 hive 表 (3)inpath:表示加载数据的路径 (4)overwrite:表示覆盖表中已有数据,否则表示追加 (5)into table:表示加载到哪张表 (6)student:表示具体的表 (7)partition:表示上传到

    2024年01月18日
    浏览(56)
  • Hive:元数据的三种部署方式

    1.内嵌模式示意图: 2.Derby数据库: Derby数据库是Java编写的内存数据库,在内嵌模式中与应用程序共享一个JVM,应用程序负责启动和停止。 初始化Derby数据库 1)在hive根目录下,使用/bin目录中的schematool命令初始化hive自带的Derby元数据库 [atguigu@hadoop102 hive]$ bin/schematool -dbType

    2024年01月17日
    浏览(49)
  • hive数据库操作,hive函数,FineBI可视化操作

    1.1、创建数据库 1.2、查看数据库详细信息 数据库本质上就是在HDFS之上的文件夹。 默认数据库的存放路径是HDFS的:/user/hive/warehouse内 1.3、创建数据库并指定hdfs存储位置 使用location,可以指定数据库在HDFS的存储路径。 1.4、删除数据库 删除一个空数据库,如果数据库下

    2024年02月04日
    浏览(45)
  • Hive 解析 JSON 字符串数据的实现方式

    在 Hive 中提供了直接解析 JSON 字符串数据的方法 get_json_object(json_txt, path) ,该方法参数解析如下: json_txt :顾名思义,就是 JSON 字符串; path :指的是匹配 JSON 字符串的格式,通过固定的语法获取 JSON 字符串中的内容。 常用的 path 参数匹配符号有四个,分别是: $ :表示获

    2024年02月05日
    浏览(51)
  • 访问 Hive 的元数据存储(MetaStore)的API方式

    访问 Hive 的元数据存储(MetaStore)的API方式 访问 Hive 的元数据存储(MetaStore)是通过 Hive 的 Thrift API 来实现的。Thrift 是一个跨语言的远程服务调用框架,它可以让不同编程语言之间进行跨语言的远程过程调用(RPC)。Hive 的元数据存储的 Thrift API 允许你通过编程语言(如 J

    2024年02月14日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包