HiveSQL分区的作用及创建分区表案例演示(图解)

这篇具有很好参考价值的文章主要介绍了HiveSQL分区的作用及创建分区表案例演示(图解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、分区的作用

二、单级分区表

1.准备工作

2.创建数据表

3.查询数据

4.创建分区数据表

5.添加数据

5.1添加方式1:静态分区(需要指定分区字段和值)

5.2添加方式2:动态分区(只需指定分区字段,分区字段相同的数据自动分配到同一个区)

三、多级分区表

1.准备工作

2.创建分区表(按照年、月分区)

 3.查询数据

4.修改分区

 5.删除分区


一、分区的作用

           HiveSQL分区的作用是将数据划分为更小的部分,以及根据特定的字段值将数据进行组织和管理。分区的原理是通过在数据存储和查询过程中利用分区信息来提高性能和查询效率,避免全表扫描,通俗来讲分区相当于分文件夹。

具体来说,HiveSQL分区的作用包括以下几个方面:

1. 数据组织和管理:分区可以将数据按照特定的字段值进行组织和管理。通过将数据划分为更小的分区,可以更方便地进行数据的存储、查询和维护。

2. 查询性能优化:分区可以根据查询的条件过滤掉不满足条件的分区,从而减少需要扫描的数据量,提高查询的性能和效率。尤其是对于大规模数据集的查询,在使用分区时可以显著减少查询的时间。

3. 并行处理能力提升:分区可以将数据划分为更小的单元,从而提供更好的并行处理能力。在查询时,可以同时处理不同的分区,从而提高查询的并发性和整体的查询性能。

4. 存储空间优化:对于分区表,可以根据不同分区的特点选择不同的存储策略。例如,对于不经常查询的历史数据可以选择压缩存储,从而减少存储空间的占用。

5. 数据分析和统计:通过分区,可以更方便地进行数据分析和统计工作。例如,可以根据不同分区的数据分布情况,对不同分区的数据进行分析和处理,从而得到更精确的结果。

       总的来说,HiveSQL分区的作用是提供更好的数据组织、查询性能优化、并行处理能力、存储空间优化以及数据分析和统计的功能,从而更高效地管理和查询大规模数据集。


二、单级分区表

1.准备工作
-- 创建数据库
create database if not exists game;

-- 切库
use game;
2.创建数据表
2.1首先我们先创建一张未分区的数据表,以便后续与分区数据表做对比.
-- 1. 建表.
create table t_all_hero(
    id            int comment 'ID',
    name          string comment '英雄',
    hp_max        int comment '最大生命',
    mp_max        int comment '最大法力',
    attack_max    int comment '最高物攻',
    defense_max   int comment '最大物防',
    attack_range  string comment '攻击范围',
    role_main     string comment '主要定位',
    role_assist   string comment '次要定位'
) comment '射手表'
row format delimited fields terminated by '\t';
2.2上传(6个)源文件到该hive表的HDFS路径下

HiveSQL分区的作用及创建分区表案例演示(图解),大数据

3.查询数据
select * from t_all_hero;

HiveSQL分区的作用及创建分区表案例演示(图解),大数据

 3.1查询出所有的archer数据

select * from t_all_hero where role_main='archer';
问:虽然我们实现了需求, 但是需要进行全表扫描, 如何精准的获取到我们想要的数据呢?
答:可以采用分区表的思路来管理, 把各个职业的数据放到不同的文件夹中即可
4.创建分区数据表
-- 1. 创建分区表, 指定分区字段.
create table t_all_hero_part(
    id            int comment 'ID',
    name          string comment '英雄',
    hp_max        int comment '最大生命',
    mp_max        int comment '最大法力',
    attack_max    int comment '最高物攻',
    defense_max   int comment '最大物防',
    attack_range  string comment '攻击范围',
    role_main     string comment '主要定位',
    role_assist   string comment '次要定位'
) comment '角色表'
partitioned by (role string comment '角色字段-充当分区字段')  -- 核心细节: 分区字段必须是表中没有的字段.
row format delimited fields terminated by '\t';
注意:分区字段必须是新的字段,表中没有的字段哦
5.添加数据
5.1添加方式1:静态分区(需要指定分区字段和值)
load data local inpath '/export/hivedata/archer.txt' into table t_all_hero_part partition(role='sheshou');
load data local inpath '/export/hivedata/assassin.txt' into table t_all_hero_part partition(role='cike');
load data local inpath '/export/hivedata/mage.txt' into table t_all_hero_part partition(role='fashi');
load data local inpath '/export/hivedata/support.txt' into table t_all_hero_part partition(role='fuzhu');
load data local inpath '/export/hivedata/tank.txt' into table t_all_hero_part partition(role='tanke');
load data local inpath '/export/hivedata/warrior.txt' into table t_all_hero_part partition(role='zhanshi');

5.1.1此时HDFS中已已经根据我们的要求分好区

HiveSQL分区的作用及创建分区表案例演示(图解),大数据

5.1.2我们再次查询archer所有的数据时就可以根据分区字段进行筛选,避免全表扫描,提高查询效率.

select * from t_all_hero_part where role='sheshou';
5.2添加方式2:动态分区(只需指定分区字段,分区字段相同的数据自动分配到同一个区)
在进行动态分区前建议: 手动关闭严格模式
set hive.exec.dynamic.partition.mode=nonstrict;

5.2.1创建分区表

-- 1. 创建分区表.
create table t_all_hero_part_dynamic(
    id            int comment 'ID',
    name          string comment '英雄',
    hp_max        int comment '最大生命',
    mp_max        int comment '最大法力',
    attack_max    int comment '最高物攻',
    defense_max   int comment '最大物防',
    attack_range  string comment '攻击范围',
    role_main     string comment '主要定位',
    role_assist   string comment '次要定位'
) comment '角色表'
partitioned by (role string comment '角色字段-充当分区字段')  -- 核心细节: 分区字段必须是表中没有的字段.
row format delimited fields terminated by '\t';

5.2.2动态分区方式添加数据

    由于建表时增加一个role的分区字段,所以总共有9个普通字段和1个分区字段,所以插入数据时select语句中需要单独加上一个分区字段
-- 2. 动态分区的方式, 添加数据.
insert into table t_all_hero_part_dynamic partition(role)
select *, role_main from t_all_hero;  -- role main字段做为分区字段使用

5.2.3查询分区表所有数据 

-- 3. 查询分区表的数据.
select * from t_all_hero_part_dynamic;

 5.2.4查询分区表中archer所有数据

select * from t_all_hero_part_dynamic where role='archer';  

HiveSQL分区的作用及创建分区表案例演示(图解),大数据

三、多级分区表

    我们已经了解了单级分区但实际开发中在数据量比较大的情况下大多数采用多级分区来存储数据, 多级分区一般用采用时间来分区, 可以是: 年, 月, 日...。分区层级不建议超过3级, 一般是: 年, 月2级就够了。
1.准备工作
-- 创建数据库
create database if not exists products;
-- 切库
use products;
2.创建分区表(按照年、月分区)
-- 1. 创建商品表, 按照: 年, 月分区.
create table products(
    pid int,
    pname string,
    price int,
    cid string
) comment '商品表'
partitioned by (year int, month int)        -- 按照年, 月分区, 2级分区
row format delimited fields terminated by ',';
 3.查询数据

3.1查找2023年1月分区下的所有数据

-- 查找2023年1月分区下的所有数据
select * from products where year=2023 and month=1;

 3.1.2HDFS中已经按要求分为2023年和2024年两个区,并且也分了二级月分区

HiveSQL分区的作用及创建分区表案例演示(图解),大数据HiveSQL分区的作用及创建分区表案例演示(图解),大数据

4.修改分区

4.1把2023年1月修改为 2023年5月

-- 2. 修改分区.  例如: 把2023年1月修改为 2023年5月
alter table products partition(year=2023, month=1) 
rename to partition(year=2023, month=5);
 5.删除分区
-- 3. 删除分区.
alter table products drop partition(year=2023, month=3);    -- 删除2023年3月 这个分区
alter table products drop partition(month=1);               -- 删除所有的1月 这个分区
alter table products drop partition(year=2023);             -- 删除2023年 及其所有的子分区.

本篇分享已结束文章来源地址https://www.toymoban.com/news/detail-796735.html

到了这里,关于HiveSQL分区的作用及创建分区表案例演示(图解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • PostgreSQL按日期列创建分区表

          在PostgreSQL中,实现自动创建分区表主要依赖于表的分区功能,这一功能从PostgreSQL 10开始引入。分区表可以帮助管理大量数据,通过分布数据到不同的分区来提高查询效率和数据维护的便捷性。以下是在PostgreSQL中自动创建分区表的一般步骤: 首先,你需要创建一个父表

    2024年02月21日
    浏览(44)
  • postgres分区表的创建-基于继承

    参考文档: http://postgres.cn/docs/12/ddl-partitioning.html 创建基于继承的分区表的步骤 1 创建父表 2 创建子表,从父表继承过来 3 创建函数及触发器,使插入的数据根据规则,插入到对应的子表中  -- 创建父表 -- 创建分区表,5个分区  -- 创建触发器函数,针对不同月份的数据,落入

    2023年04月09日
    浏览(42)
  • Hive创建分区表并插入数据

    业务中经常会遇到这种需求:数据每天全量更新,但是要求月底将数据单独保存一份以供后期查询某月节点的信息。这时就要考虑用到Hive的分区表实现,即按照月份创建分区表,相当于新的月份数据保存在新表,进而实现保存了历史数据。 分区表的创建本质是在HDFS创建了一

    2024年02月07日
    浏览(51)
  • Hive创建分区表时提示错误,java面试线程池

    at org.apache.hadoop.hive.ql.parse.HiveParser.alterTableStatementSuffix(HiveParser.java:7971) at org.apache.hadoop.hive.ql.parse.HiveParser.alterStatement(HiveParser.java:7447) at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:4337) at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:2494) at org.apache.hadoop

    2024年04月10日
    浏览(52)
  • Iceberg从入门到精通系列之五:Zeppelin集成iceberg,创建iceberg普通表和分区表,并插入数据

    Zeppelin支持Flink SQL Flink SQL支持iceberg Zeppelin集成Flink SQL后,就可以在Zeppelin上创建iceberg表了 下面演示下Zeppelin集成iceberg后,创建表,插入数据的方便性。

    2024年02月11日
    浏览(48)
  • 【mysql表分区系】mysql创建分区表提示A PRIMARY KEY must include all columns in the table‘s partitioning function

    首先声明下我这边使用的mysql版本是5.7.29版本,当然下面的问题我这边也是基于这个版本。这里因为没有考证其他版本是否也会有这些问题,可自行官方文档来查阅资料 一个唯一键必须包含表分区函数所有的列,根据这个错误提示我们大概就知道怎么处理,但是why?我们还是沉

    2024年02月06日
    浏览(91)
  • mysql分区表:日期分区

    1.创建分区表 2.查看分区 3.添加分区 4.存储过程:分区删除与创建 5.事件定时 6.触发器设计:子表每插入一行,总表获得一行 7.创建索引 8.添加枚举型字段

    2024年02月16日
    浏览(53)
  • hive分区表 静态分区和动态分区

    现有数据文件 data_file 如下: 2023-08-01,Product A,100.0 2023-08-05,Product B,150.0 2023-08-10,Product A,200.0 需要手动指定分区 现有源数据表如下: CREATE TABLE sales_source (     sale_date STRING,     product STRING,     amount DOUBLE ); INSERT INTO sales_source VALUES     (\\\'2023-08-01\\\', \\\'Product A\\\', 100.0),     (\\\'2023-08-

    2024年02月10日
    浏览(52)
  • Hive分区表实战 - 多分区字段

    本实战教程通过一系列Hive SQL操作,演示了如何在大数据环境下创建具有省市分区的大学表,并从本地文件系统加载不同地区的学校数据到对应分区。首先,创建名为 school 的数据库并切换至该数据库;接着,在数据库中定义一个名为 university 的分区表,其结构包括ID和名称两

    2024年01月15日
    浏览(49)
  • mysql分区表 -列表分区(list prtition)

    示例,创建一张员工表按照employee_id进行列表分区: 查询0号分区: select * from employees partition(p0); select * from employees partition(p1); select * from employees partition(p0,p1); 和range分区一样,可以使用alter table … add/drop partition新增/删除分区: ALTER TABLE employees ADD PARTITION(PARTITION p2 VALUES IN

    2024年02月16日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包