当前位置: 首页 > news >正文

Hive基础和使用详解

文章目录

    • 一、启动hive
      • 1. hive启动的前置条件
      • 2. 启动方式一: hive命令
      • 3. 方式二:使用jdbc连接hive
    • 二、Hive常用交互命令
      • 1. hive -help 命令
      • 2. hive -e 命令
      • 3. hive -f 命令
      • 4. 退出hive窗口
      • 5. 在hive窗口中执行dfs -ls /;
    • 三、Hive语法
      • 1.DDL语句
        • 1.1 创建数据库
        • 1.2 两种方式查询数据库
        • 1.3 显示数据库信息
        • 1.4 切换数据库
        • 1.5 修改数据库配置信息
        • 1.6 删除数据库
        • 1.7 创建hive表(重点)
          • 1.7.1 hive详细的建表语句
          • 1.7.2 创建hive内部表:
          • 1.7.3 创建hive外部表:
      • 2. DML语句
        • 2.1 向表中装载数据(Load)
        • 2.2 Load命令 添加 overwrite, 数据去重
        • 利用含数据的txt文件,添加数据到外部表中
        • 查看建表信息
        • 2.3 删除内部表
        • 2.4 删除外部表
    • 四、Hive其他参考资料

一、启动hive

1. hive启动的前置条件

1.保证hdfs和yarn已启动
2.保证hive的元数据库mysql已启动

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 启动方式一: hive命令

--切换到hive目录下的bin目录cd /opt/softs/hive3.1.2/bin/--执行hive命令
hive

3. 方式二:使用jdbc连接hive

(1)在hive目录下配置文件hive-site.xml

cd /opt/softs/hive3.1.2/conf/
ll
vim hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><property><!-- jdbc 连接的 URL --><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://bigdata03:3306/hive?createDatabaseIfNotExist=true</value></property><!-- jdbc 连接的 Driver--><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property><!-- jdbc 连接的 username--><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value></property><!-- jdbc 连接的 password--><property><name>javax.jdo.option.ConnectionPassword</name><value>111111</value></property><!-- Hive 默认在 HDFS 的工作目录 --><property><name>hive.metastore.warehouse.dir</name><value>/user/hive/warehouse</value></property><!-- 指定 hiveserver2 连接的 host --><property><name>hive.server2.thrift.bind.host</name><value>bigdata03</value></property><!-- 指定 hiveserver2 连接的端口号 --><property><name>hive.server2.thrift.port</name><value>10000</value></property><property><name>hive.server2.enable.doAs</name><value>false</value></property></configuration>

在这里插入图片描述

(2) 启动hiveserver2

-- 启动hiveserver2命令
hive --service hiveserver2-- 注意:启动hiveserver2服务需要些时间才能启动完成,
且没有返回可输入命令行的界面,需要另开一个tab页面输入执行相关的命令指令进阶的启动方式
(1)/opt/softs/hive3.1.2目录下创建logs目录
cd /opt/softs/hive3.1.2
mkdir logs(2)执行如下命令
cd /opt/softs/hive3.1.2/bin/
nohup hive --service hiveserver2 1>/opt/softs/hive3.1.2/logs/hive.log 2>/opt/softs/hive3.1.2/logs/hive_err.log &
-- nohup:放在命令的开头,表示的意思为不挂起即关闭终端进程也保持允许状态
--1:代表标准日志输出
--2:表示错误日志输出
-- &:代表在后台运行
所以整个命令可以理解为:将hiveserver2服务后台运行在标准日志输出到hive.1og,错误日志输出到hive_err.log,唧使关闭终端(窗口),也会保持运行状态

(3)执行beeline命令

beeline -u jdbc:hive2://bigdata03:10000 -root

在这里插入图片描述

进阶:

在这里插入图片描述

注意:执行beeline命令时可能会报错,因为启动hiveserver2需要两三分钟时间,只有等hiveserver2启动完成后,可能用beeline命令完成jdbc连接。

二、Hive常用交互命令

1. hive -help 命令

 hive -help

在这里插入图片描述

2. hive -e 命令

hive -e "show databases"

不进入hive的交互窗口执行sql语句
在这里插入图片描述

3. hive -f 命令

执行文件中的sql语句

-- 创建文件cd /opt/file/touch hive_sql.txtvim hive_sql.txt
-- 添加sql语句命令“show databases”
show databases
cat hive_sql.txt-- 将执行结果写入到新文件中
hive -f /opt/file/hive_sql.txt >/opt/file/query_result.txt
-- 查看执行结果
cat query_result.txt

在这里插入图片描述

4. 退出hive窗口

(1) exit;
(2) quit;

5. 在hive窗口中执行dfs -ls /;

在hive窗口中执行 dfs -ls /; 查看hdfs文件系统

在这里插入图片描述

三、Hive语法

1.DDL语句

在这里插入图片描述
在这里插入图片描述

1.1 创建数据库

create database if not exists bigdata;

在这里插入图片描述

1.2 两种方式查询数据库

在这里插入图片描述

show databases;
show databases like "big*";

在这里插入图片描述

1.3 显示数据库信息

在这里插入图片描述

desc database bigdata;desc database extended bigdata;

在这里插入图片描述

1.4 切换数据库

在这里插入图片描述

1.5 修改数据库配置信息

在这里插入图片描述

alter database bigdata set dbproperties('createtime'='20230423');desc database extended bigdata;

在这里插入图片描述

同时也可以看到数据在hdfs上的存储路径(Location):

hdfs://bigdata03:8028/user/hive/warehouse/bigdata.db

在这里插入图片描述

1.6 删除数据库

注意:两种语法对应的一个是 空数据库,一个是 非空数据库

在这里插入图片描述

1.7 创建hive表(重点)

在这里插入图片描述

1.7.1 hive详细的建表语句
CREATE [EXTERNAL] TABLE [IF NOT EXIST] table_name
[(col_name data_type [COMMENT COL_COMMENT],.....)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment],....)]
[CLUSTERED BY (col_name,col_name,....)]
[SORTED BY (col_name [ASC|DESC],...)] INFO num_buckets BUCKETS]
[ROW FORMAT DELIMITED FIELDS TERMINATED BY ',']
[STORED AS file_format]
[LOCATION hdfs_path]字段解释1 CREATE TABLE创建一个指定名字的表,如果名字相同抛出异常,用户可以使用IF NOT EXIST来忽略异常2 EXTERNAL关键字可以创建一个外部表,在建表的同时指定一个实际数据的路径(LOCATION)
,hive在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据3 COMMENT是为表和列添加注释4 PARTITIONED BY是分区表5 CLUSTERED BY 是建分桶(不常用)6 SORTED BY 是指定字段进行排序(不常用)7 ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 是指每行数据中列分隔符为"," 
默认分隔符为" \001"8 STORED AS 指定存储文件类型,数据文件是纯文本,可以使用STORED AS TEXTFILE9 LOCATION 指定表在HDFS上的存储位置,内部表不要指定,
但是如果定义的是外部表,则需要直接指定一个路径。

对sale_detail 中的数据:

1,小明,男,iphone14,5999,1
2,小华,男,飞天茅台,2338,2
3,小红,女,兰蔻小黑瓶精华,1080,1
4,小魏,未知,米家走步机,1499,1
5,小华,男,长城红酒,158,10
6,小红,女,珀莱雅面膜,79,2
7,小华,男,珠江啤酒,11,3
8,小明,男,Apple Watch 8,2999,1

1.7.2 创建hive内部表:
CREATE TABLE IF NOT EXISTS bigdata.ods_sale_detail
( sale_id    INT      COMMENT  "销售id",user_name  STRING   COMMENT  "用户姓名",user_sex   STRING   COMMENT  "用户性别",goods_name STRING   COMMENT  "商品名称",prcie      INT      COMMENT  "单价",sale_count INT      COMMENT  "销售数量"
)
COMMENT "销售内部表"
ROW FORMAT DELIMITED FIELDS TERMINATED BY ","
STORED AS TEXTFILE;

在这里插入图片描述
查看建表结果

在这里插入图片描述

1.7.3 创建hive外部表:
CREATE EXTERNAL TABLE IF NOT EXISTS bigdata.ods_sale_detail_external
( sale_id    INT      COMMENT  "销售id",user_name  STRING   COMMENT  "用户姓名",user_sex   STRING   COMMENT  "用户性别",goods_name STRING   COMMENT  "商品名称",price      INT      COMMENT  "单价",sale_count INT      COMMENT  "销售数量"
)
COMMENT "销售外部表"
ROW FORMAT DELIMITED FIELDS TERMINATED BY ","
STORED AS TEXTFILE
LOCATION "/bigdata/hive/external_table/ods/ods_sale_detail_external";

在这里插入图片描述

在这里插入图片描述

2. DML语句

2.1 向表中装载数据(Load)

在这里插入图片描述
在虚拟机bigdata03的 /opt/file目录下创建 sale_detail.txt 文件, 添加:

1,小明,男,iphone14,5999,1
2,小华,男,飞天茅台,2338,2
3,小红,女,兰蔻小黑瓶精华,1080,1
4,小魏,未知,米家走步机,1499,1
5,小华,男,长城红酒,158,10
6,小红,女,珀莱雅面膜,79,2
7,小华,男,珠江啤酒,11,3
8,小明,男,Apple Watch 8,2999,1

-- load data [local] inpath '数据的 path' [overwrite] into table dbname.tablename [partition (partcol1=val1,…)];-- 不含overwrite,多次执行装载Load会不去重
load data local inpath '/opt/file/sale_detail.txt' into table bigdata.ods_sale_detail;

Load命令 不含overwrite,多次执行装载Load会不去重

在这里插入图片描述

再次执行Load命令:

在这里插入图片描述
再次查看数据表,会发现数据会再次追加,不会去重

在这里插入图片描述

2.2 Load命令 添加 overwrite, 数据去重

Load命令 添加 overwrite,多次执行装载Load会去重

load data local inpath '/opt/file/sale_detail.txt' overwrite into table bigdata.ods_sale_detail;

在这里插入图片描述

利用含数据的txt文件,添加数据到外部表中

hadoop fs -put /opt/file/sale_detail.txt /bigdata/hive/external_table/ods/ods_sale_detail_external

在这里插入图片描述

命令行界面查询外部表数据:

在这里插入图片描述

查看建表信息

在这里插入图片描述

可以发现表bigdata.ods_sale_detail的存储路径等信息

LOCATION
| ‘hdfs://bigdata03:8020/user/hive/warehouse/bigdata.db/ods_sale_detail’ |

2.3 删除内部表

删除内部表ods_sale_detail

在这里插入图片描述

drop table bigdata.ods_sale_detail;

删除后查看该内部表是否还存在:

hadoop fs -ls /user/hive/warehouse/bigdata.db/ods_sale_detail

删除成功(表和数据一起删除):

在这里插入图片描述

2.4 删除外部表

删除外部表ods_sale_detail_external

drop table bigdata.ods_sale_detail_external;

在这里插入图片描述

删除外部表后,只删表结构,不能在命令行界面查询
在这里插入图片描述
但外部文件还在,数据依旧保留
在这里插入图片描述

当再次创建hive外部表时:

CREATE EXTERNAL TABLE IF NOT EXISTS bigdata.ods_sale_detail_external
( sale_id    INT      COMMENT  "销售id",user_name  STRING   COMMENT  "用户姓名",user_sex   STRING   COMMENT  "用户性别",goods_name STRING   COMMENT  "商品名称",price      INT      COMMENT  "单价",sale_count INT      COMMENT  "销售数量"
)
COMMENT "销售外部表"
ROW FORMAT DELIMITED FIELDS TERMINATED BY ","
STORED AS TEXTFILE
LOCATION "/bigdata/hive/external_table/ods/ods_sale_detail_external";

在这里插入图片描述

依然可以在命令行界面查询数据:

select * from bigdata.ods_sale_detail_external;

在这里插入图片描述

四、Hive其他参考资料

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/62448.html

相关文章:

  • c/c++:栈帧,传值,传址,实参传值给形参,传地址指针给形参
  • 玩元宇宙血亏后 蓝色光标梭哈AI也挺悬
  • 生物---英文
  • ENVI 国产高分2号(GF-2)卫星数据辐射定标 大气校正 影像融合
  • 操作系统考试复习——第二章 进程控制 同步与互斥
  • mac gitstats查看git提交记录
  • 电脑系统错误怎么办?您可以看看这5个方法!
  • 九款顶级AI工具推荐
  • StringRedisTemplate-基本使用
  • ansible自动运维——ansible使用临时命令通过模块来执行任务
  • python 之数据类型(四)
  • 洛谷P1345 无向图最小割点数
  • 适合程序员阅读的有用书籍:
  • MySQL: 自动添加约束、更改(删除)表名和字段、删除表
  • 基于微博评论的细粒度的虚假信息识别软件
  • Android 11.0 系统systemui状态栏下拉左滑显示通知栏右滑显示控制中心模块的流程分析
  • ROS学习第三十二节——xacro构建激光雷达小车
  • 中厂,面试就问了4道题,凉了!
  • 22.轮播模块
  • MYSQL命令小总结
  • Java常见开发工具和Object类
  • Linux 配置YUM源(FTP方式获取软件源、使用阿里云yum源、同时使用本地源与在线源)YUM获取安装包并生成YUM软件仓库
  • Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服务
  • 养老保障金查询系统【GUI/Swing+MySQL】(Java课设)
  • 国考省考行测:词句理解,词的对象指代,就近原则,主语一致法,语意语境分析上下文找出指代含义
  • 部署YUM仓库
  • SpringBoot框架(邮件发送Mail|持久层框架JPA|Extra前后端分离跨域处理|接口管理Swagger)这一篇就够了(超详细)
  • chatGPT对话R语言
  • 代码随想录--字符串--替换空格题型
  • Spring JDBC和事务控制