实践演练Hive增删改查(图+文)

发布于:2022-12-05 ⋅ 阅读:(807) ⋅ 点赞:(0)

1 缘起

网络上关于Hive的基础教程参差不齐,
Hive高手太多,所以关于Hive的CURD介绍比较少,
但是,总有需要系统性学习的读者,需要从基础学起,
所以,我准备完善Hive基础这块内容,
帮助读者轻松入门Hive。

环境准备:
Ubuntu部署Hadoop
Hadoop3.3.0部署Hive3.1.2

2 Usage

2.1 新建

2.1.1 新建数据库

  • 命令格式
create database database-name;
  • 新建数据库:myhivedb
create database if not exists myhivedb;

或者

create database myhivedb;
  • 新建结果
    在这里插入图片描述

2.1.2 新建表

  • 命令格式
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name

[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[ROW FORMAT row_format]
[STORED AS file_format]
  • 创建分区表:my_user
    分区为dt,属性使用逗号分割(,),行使用换行分割(\n),
    读取数据时按照规则即可读取,使用TEXTFILE存储数据,更多存储类型后续分享。
CREATE TABLE IF NOT EXISTS myhivedb.my_user (
uid String, name String, age int, deposit double)
COMMENT '用户表'
PARTITIONED BY (dt String)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
  • 创建结果
    在这里插入图片描述

2.1.3 新建数据

通过载入本地数据方式新增数据,由于新建的表是分区表,所以,原始数据带有分区标识,
方便载入时使用对应的分区,这里,有三个分区数据,分别为:20220925、20220926和20220927,
按照建表是的规则构建原始数据,
(1)分区为dt;
(2)属性使用逗号分割(,);
(3)行使用换行分割(\n)。
数据如下:

  • test_data_20220925.txt
0x00011,xiaoshiyi,11,111.11,20220925
0x00012,xiaoshier,12,122.22,20220925
0x00013,xiaoshisan,13,133.33,20220925
0x00014,xiaoshisi,14,144.44,20220925
0x00015,xiaoshiwu,15,155.55,20220925
  • test_data_20220926.txt
0x0006,xiaoliu,6,66.11,20220926
0x0007,xiaoqi,7,77.22,20220926
0x0008,xiaoba,8,88.33,20220926
0x0009,xiaojiu,9,99.44,20220926
0x00010,xiaoshi,10,100.55,20220926
  • test_data_20220927.txt
0x0001,xiaoyi,10,11.11,20220927
0x0002,xiaoer,1,22.22,20220927
0x0003,xiaosan,3,33.33,20220927
0x0004,xiaosi,4,44.44,20220927
0x0005,xiaowu,5,55.55,20220927
  • 命令格式
LOAD DATA LOCAL INPATH 'file_path' OVERWRITE INTO TABLE database-name.table-name PARTITION (parttion-name=partition);
  • 载入数据
    通过该LOAD DATA方式将本地数据写入Hive表:my_user,根据本地文件新建三个分区。
LOAD DATA LOCAL INPATH '/home/xindaqi/software/install/apache-hive-3.1.2-bin/test_data_20220925.txt' OVERWRITE INTO TABLE myhivedb.my_user PARTITION (dt='20220925');
LOAD DATA LOCAL INPATH '/home/xindaqi/software/install/apache-hive-3.1.2-bin/test_data_20220926.txt' OVERWRITE INTO TABLE myhivedb.my_user PARTITION (dt='20220926');
LOAD DATA LOCAL INPATH '/home/xindaqi/software/install/apache-hive-3.1.2-bin/test_data_20220927.txt' OVERWRITE INTO TABLE myhivedb.my_user PARTITION (dt='20220927');
  • 结果
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 文件路径
    Hadoop平台的Web界面查看新建的数据,如下图所示,
    表路径为:/user/hive/warehouse/myhivedb.db/my_user,
    其中,/user/hive/warehouse/为数仓存储的默认路径,
    myhivedb.db为新建的数据库名,
    my_user为hive表名。
    在这里插入图片描述

2.1.4 新建分区

  • 命令格式
ALTER TABLE database-name.table-name ADD IF NOT EXISTS PARTITION(partition-name='partition') LOCATION 'partition-location';
  • 添加分区
    这里为了测试,新建分区20220924,关联的分区数据为:/user/hive/warehouse/myhivedb.db/my_user/dt=20220925,
    即分区20220924和分区20220925共用数据。
ALTER TABLE myhivedb.my_user ADD IF NOT EXISTS PARTITION(dt='20220924') LOCATION '/user/hive/warehouse/myhivedb.db/my_user/dt=20220925';
  • 结果
    在这里插入图片描述
  • 查询数据
    此时分区20220924的数据如下图所示,与20220925分区的数据一致。
    在这里插入图片描述

2.2 删除

2.2.1 删除库

  • 命令格式
drop database database-name;
  • 删除数据库myhivedb
drop database if exists myhivedb;
  • 结果
    在这里插入图片描述

2.2.2 删除表

  • 命令格式
DROP TABLE [IF EXISTS] table_name;
  • 删除表:my_user
DROP TABLE IF EXISTS myhivedb.my_user;
  • 结果

在这里插入图片描述

2.2.3 分区

  • 命令格式
ALTER TABLE database-name.table-name DROP IF EXISTS PARTITION(partition-name='partition');
  • 删除分区:20220924
ALTER TABLE myhivedb.my_user DROP IF EXISTS PARTITION(dt='20220924');
  • 结果
    在这里插入图片描述
  • 查询数据
    由于关联的存储位置为:,所以,删除分区20220924数据时,20220925分区的数据同时被删除,
    查询结果如下图所示。
    在这里插入图片描述

2.3 修改

修改表

ALTER TABLE table-name RENAME TO new_name
ALTER TABLE table-name ADD COLUMNS (col_spec[, col_spec ...])
ALTER TABLE table-name DROP [COLUMN] column_name
ALTER TABLE table-name CHANGE column_name new_name new_type
ALTER TABLE table-name REPLACE COLUMNS (col_spec[, col_spec ...])

2.4 查询

2.4.1 库

查看Hive中的数据库列表。

show databases;
  • 结果
    结果如下图所示。
    由结果可知,当前Hive中有3个数据库,分别为:db_hive_test、default和myhivedb(新建的库)。
    在这里插入图片描述

2.4.2 查询表

查询某个数据库中有哪些表,和MySQL一样,
先进入想要查询的数据库,在查询表列表。

-- 进入数据库:myhivedb
use myhivedb;
-- 查看表列表
show tables;
  • 结果
    结果如下图所示,由结果可知,当前数据库只有一个Hive表:my_user。
    在这里插入图片描述

2.4.3 数据

新建的Hive表分区,因此查询数据时有分区的概念,
可以使用分区作为筛选条件查询需要的数据。
当然,也可以不带分区,查询所有分区的数据,
如果分区过多,会导致查询变很慢很慢或者卡死,如果仅是熟悉数据内容,可以按照分区查询。

  • 查询所有分区
    查看所有数据,则不带分区标识,由于测试的数据非常少,且只有三个分区,
    所以,查询所有数据很快。
select * from myhivedb.my_user;
  • 结果
    在这里插入图片描述

  • 查询某个分区
    按照分区查询数据,可只查询某个分区的数据,如分区20220926。

select * from myhivedb.my_user where dt='20220926';
  • 结果
    在这里插入图片描述

  • 查询分区范围:>=20220926
    当然可以按照分区范围查询数据。

select * from myhivedb.my_user where dt>=20220926;
  • 结果
    在这里插入图片描述

3 小结

无。


网站公告

今日签到

点亮在社区的每一天
去签到