Hive分区

  • 引言
  • 1、静态分区
    • 1.1 静态分区——单分区
    • 1.2 静态分区——多分区
  • 2、动态分区
    • 2.1 动态分区——单分区
    • 2.2 动态分区——多分区
  • 3、静态+动态分区
  • 4、动态分区优化

引言

  • 分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。

  • Hive中支持的分区类型有两种:

    • 静态分区
    • 动态分区
  • 静态分区和动态分区的主要区别在于静态分区需要手动指定,而动态分区是基于查询参数的位置去推断分区的名称,从而建立分区。总的来说就是,静态分区的列是在编译时通过用户传递来决定的;动态分区只有在SQL执行时才能确定

  • 注意:分区字段绝对不能出现在数据库表已有的字段中!

1、静态分区

1.1 静态分区——单分区

1、创建静态分区表t1,分区字段为部门

create table t1(
id int,
name string,
likes array<string>,
adress map<string,string>
)
partitioned by (department string)
-- 字段分割符
row format delimited fields terminated by ','
-- MAP  和 ARRAY 的分隔符(数据分割符号)
collection items terminated by '_'
-- 键值分隔符
map keys terminated by ':'
-- 行分隔符
lines terminated by '\n';
  • 查看表信息
desc t1;


2、加载数据

  • 下面数据为部门1的数据,存储在department.txt
001,Ace,study,Guangdong:SZ,
002,Jack,reading-movie,Guangdong:GG-Guangdong:DG,
003,Maria,basketball-Computer games-Swimming,Guangdong:SZ-Guangdong:DG,
004,Jimmy,reading-sing,Guangdong:SZ-Guangdong:HZ-Guangdong:DG,
005,Tom,dance-movie,Guangdong:FS-Guangdong:DG
  • 加载数据到表t1,并查看表
load data local inpath '/hive_data/department.txt' into table t1 partition(department='dep-1');


那么数据是存储在哪里呢?

  • hive默认表存放路径一般都是在你工作目录的/user/hive/warehouse/库名.db/下创建一个目录,按表名做文件夹分开。
  • 可在终端里面通过命令hadoop fs -ls /user/hive/warehouse/test.db进行查看
  • 也可以通过dfs端口进行查看



3、查看分区信息

show partitions t1;

  • 查看web页面

  • 如上图所示,在新建分区表的时候,系统会在hive数据仓库默认路径/user/hive/warehouse/库名.db/下创建一个目录(表名),然后在该目录下再创建子目录department=dep-1(分区名),最后在分区名下存放实际的数据文件(load加载进表的文件department.txt)

  • 如上,一个静态分区——单分区表就建成了。

4、我们再导入数据到新的第二分区

  • 查看web页面:

5、删除第二分区

alter table t1 drop if exists partition(department='dep-2');

1.2 静态分区——多分区

1、创建多分区表t2,分区字段为部门,性别

create table t2(
id int,
name string,
likes array<string>,
adress map<string,string>
)
partitioned by (department string comment '部门',sex string comment '性别')
-- 字段分割符
row format delimited fields terminated by ','
-- MAP  和 ARRAY 的分隔符(数据分割符号)
collection items terminated by '_'
-- 键值分隔符
map keys terminated by ':'
-- 行分隔符
lines terminated by '\n';


2、将上面测试数据加载到表中

load data local inpath '/hive_data/department.txt' into table t2 partition(department='math',sex='M');


3、查看分区信息

show partitions t2;


注意:多分区时,分区字段都要加,否则会报错

2、动态分区

  • 在往hive分区表中插入数据时,如果需要创建的分区很多,比如要以表中某个字段进行分区存储,则需要复制粘贴修改很多HQL去执行,如此一来效率很低。
  • 在关系型数据库中,对分区表Insert数据时候,数据自动会根据分区字段的值,将数据插入到相应的分区中,因为hive是批处理系统,所以Hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。

2.1 动态分区——单分区

2.2 动态分区——多分区

1、创建原表t3,加载原数据到表t3

  • 原数据
1,Ace,20,M,study,Guangdong:SZ,
2,Jack,22,M,reading-movie,Guangdong:GG-Guangdong:DG,
3,Maria,20,F,basketball-Computer games-Swimming,Guangdong:SZ-Guangdong:DG,
4,Jimmy,23,M,reading-sing,Guangdong:SZ-Guangdong:HZ-Guangdong:DG,
5,Tom,25,F,dance-movie,Guangdong:FS-Guangdong:DG
  • 创建表t3
create table t3(
id int,
name string,
age int,
gender string,
likes array<string>,
adress map<string,string>
)
-- 字段分割符
row format delimited fields terminated by ','
-- MAP  和 ARRAY 的分隔符(数据分割符号)
collection items terminated by '_'
-- 键值分隔符
map keys terminated by ':'
-- 行分隔符
lines terminated by '\n';
  • 加载数据
load data local inpath '/hive_data/department.txt' into table t3;


2、创建动态分区表t4

  • 注意动态分区表字段中不能有分区字段
  • 由于我们要以age,gender进行多分区,因此我们在创动态分区表中,字段可以是除了age,gender之外原数据任意字段
create table t4(
id int,
name string,
likes array<string>,
adress map<string,string>
)
partitioned by (age int,gender string)
-- 字段分割符
row format delimited fields terminated by ','
-- MAP  和 ARRAY 的分隔符(数据分割符号)
collection items terminated by '_'
-- 键值分隔符
map keys terminated by ':'
-- 行分隔符
lines terminated by '\n';


3、打开动态分区模式,并且设置分区模式为非严格模式

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;


4、加载数据到t4

  • 注意从原数据表t1提取字段时,分区字段必须放在后面
  • 因为我们在动态分区表时,系统默认将分区字段放在后两列。
insert into table t4 partition(age,gender) select id,name,likes,adress,age,gender from t3;


5、查看分区信息

show partitions t4;

3、静态+动态分区

  • 部分字段静态分区,部分动态分区
  • 多个分区字段时,会实现半自动分区
  • 注意:静态分区字段要在动态的前面

1、创建一个只有一个字段,具有两个分区字段的分区表t5

  • country分区为静态,age为动态分区,以查询的age字段为分区名

    3、打开动态分区模式,并且设置分区模式为非严格模式
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

4、加载数据

  • contry为静态分区字段,需要指定字段名为什么
insert overwrite table t5 partition(country='china',age) select id,age from t3;

5、查看分区信息

4、动态分区优化

\quad \quad动态分区的一些参数设置,有时候会优化你的分区。

  • 在所有执行MR的节点上,最大可以创建多少个动态分区
  • 该参数是根据具体的业务场景决定的。比如源数据中包含了一年的数据,若按day进行分区,那么该参数就需要设置成大于365,如果使用默认值100,那么就会报错
hive.exec.max.dynamic.partitions=1000
  • 整个MR Job中,最大可以创建多少个HDFS文件
hive.exec.max.created.files=100000

Hive实践1之【静态分区及动态分区基本操作】相关推荐

  1. hive的静态分区与动态分区-用法实例

    概述 本文是对[3]的复现 所有的SQL操作都在下方gitee链接中 https://gitee.com/appleyuchi/Flink_Code/blob/master/hive动态静态分区/hi ...

  2. 深圳大数据培训:大数据开发之掌握Hive的静态分区与动态分区

    深圳大数据培训:大数据开发之掌握Hive的静态分区与动态分区 分区是hive存放数据的一种方式.将列值作为目录来存放数据,就是一个分区. 这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的 ...

  3. Hive分区——Partition(静态分区,动态分区)详解

    文章目录 分区目的 分区的创建 1.创建建表时候不管动态还是静态分区 2.执行load 装载数据 3.查看表结构,查询分区表的数据 4.静态分区: 5.动态分区: 多分区 表分区的增删改查 分区目的 ...

  4. (王道408考研操作系统)第三章内存管理-第一节4:连续分配管理方式(单一连续、固定分区和动态分区分配)

    文章目录 一:单一连续分配 二:固定分区分配 (1)分区大小相等与分区大小不等 (2)分区说明表 三:动态分区分配 (1)采用的数据结构(主要有两种) (2)动态分配分区算法 (3)如何进行分配与回收 ...

  5. hive静态分区,动态分区,分桶区别

    文章目录 绪论 创建静态分区表 1.准备数据 2.建表语句 3.添加分区,加载数据 4.进入网页(50070)查看 创建动态分区表 1.准备数据 2.建表语句 1.首先创建普通表 2.加载数据 3.创 ...

  6. Hive分区表:静态分区、动态分区、多重分区介绍

    01 分区表的引入.产生背景 现有6份数据文件,分别记录了<王者荣耀>中6种位置的英雄相关信息.现要求通过建立一张表t_all_hero,把6份文件同时映射加载. create table ...

  7. hive动态分区shell_Hive动态分区 参数配置及语法

    Hive本身是不支持动态分区的.. 但动态分区是真的方便啊..不然手动维护要累死..按日期甚至小时来分区时动辄就好几千上万的分区..手动到哪一年去..? 想要用动态分区要先做一些设置来修改默认的配置. ...

  8. hive静态与动态分区理解

    需要建立一个备份带分区的数据表,拷贝时若采用静态分区方式需要写 N 行语句,因此可以使用动态分区,节省大量时间. Hive 的分区方式:由于 Hive 实际是存储在 HDFS 上的抽象,Hive 的一 ...

  9. Hive分区(静态分区+动态分区)

    原文地址: https://www.cnblogs.com/yongjian/archive/2017/03/29/6640951.html   Hive分区的概念与传统关系型数据库分区不同.   传 ...

最新文章

  1. excel最常用的八个函数_Excel中最常用的快捷键
  2. 计算机类东北大学和大连理工,东北大学VS大连理工大学,谁才是第一,辽宁本地考生也两难...
  3. 通信专业考研考C语言,2016年北京邮电大学信息与通信工程学院C语言程序设计考研复试题库...
  4. matlab 2014a 升级,MATLAB R2014a从入门到精通(升级版) pdf扫描版[42MB]
  5. vim 多窗口,多tab编辑
  6. 【渝粤教育】电大中专学前儿童发展心理学3作业 题库
  7. 【数据结构与算法】【算法思想】【算法应用】【排序查找搜索】并行
  8. 计算机课程学习小结,计算机课程学习心得5篇___.docx
  9. java线程工作内存在栈中吗_JVM常见面试题解析
  10. ASP.Net学习笔记013--ViewState初探2
  11. Thymeleaf $/*/#/@语法
  12. Sams_Teach yourself XXX in XXX days
  13. 华为首度公开披露员工薪酬:去年平均年薪近28万
  14. 求最大公约数代码 Java_java怎么求最大公约数?
  15. tolower c语言,tolower()
  16. C#简单使用ManagedWifi
  17. file对象转换为Muti文件对象工具类
  18. 轻量思考,重拳出击,小牛电动车如何解锁世界
  19. 任务管理器不显示gpu_Windows 10将在任务管理器中显示GPU温度
  20. HTML用画布画哆啦A梦,前端小项目:使用canvas绘画哆啦A梦

热门文章

  1. 2023软件工程毕设题目最新
  2. 简单python代码讲解-使用Python编写简单的画图板程序的示例教程
  3. java商城毕业设计 JavaWeb家具家居购物商城毕业设计(7)商品简介、详情(包含产品轮播)
  4. 2021-12-11 WPF上位机 110-欧姆龙串口转网口的封装
  5. 5W无线充SOC方案芯片 封装SOP16和SOP8
  6. “链游之王”Axie引入全新保险机制 Ronin桥重新上线 避免重蹈覆辙
  7. 用Altium Designer,AD不专业-EDA工具的选择-PCB系列教程1-2
  8. 电器学计算机吗,你的维修之路为什么艰难你永远不懂——给跟师傅学电器电脑维修的朋友的一封信...
  9. 10年,知乎为何依旧“赚钱难”?
  10. stub食谱_Excel食谱营养素计算器