Hive 分区表和分桶表

hive:分桶表和分区表的区别, 分桶表,抽样查询 load的本质是把文件复制再上传>>没有经过map reduce>>数据没有进行拆分>>解决: 使用insert into , 写20个insert 非常不方便>> 创建一个表, 把数据放到表里, 再用insert into。如果把A表B表做成分桶表,按照id分成2个桶, 那么A表和B表分别产生了0号桶和1号桶, 现在A表和B表连接只需要交互50次,即0号桶和0号桶交互(25), 1号桶和1号桶交互。余数为2进2号桶...从2号桶开始抽, 抽取桶的总数=桶的总数/y=4/4=1,即只抽1个桶。 阅读详情

Hive 分区表和分桶表

一、分区表

1.1 分区表基本操作

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

  1. 创建分区表语法

    create table dept_partition(
    deptno int, dname string, loc string
    )
    partitioned by (day string)
    row format delimited fields terminated by ' ';
    

    注意:分区字段不能是表中已经存在的数据,可以将分区字段看成表的伪列。

  2. 加载数据到分区表中

    准备数据

    # dept_20200401.log
    10 ACCOUNTING 1700
    20 RESEARCH 1800
    
    # dept_20200402.log
    30 SALES 1900
    40 OPERATIONS 1700
    
    # dept_20200403.log
    50 TEST 2000
    60 DEV 1900
    

    加载数据

    load data local inpath '/root/mydata/dept_20200401.log' into table dept_partition partition(day='20200401');
    load data local inpath '/root/mydata/dept_20200402.log' into table dept_partition partition(day='20200402');
    load data local inpath '/root/mydata/dept_20200403.log' into table dept_partition partition(day='20200403');
    

    注意:分区表加载数据时,必须指定分区。

  3. 查询分区表中的数据

    # 单分区查询
    select * from dept_partition where day='20200401';
    
    # 多分区查询
    select * from dept_partition where day='20200401'
    union
    select * from dept_partition where day='20200402'
    union
    select * from dept_partition where day='20200403';
    
    # 多分区查询
    select * from depe_partiton 
    where day='20200401' or day='20200402' or day='20200403';
    
  4. 增加分区

    # 增加单个分区
    alter table dept_partition add partition(day='20200404');
    
    # 增加多个分区
    alter table dept_partition add partition(day='20200405') partition(day='20200406');
    
  5. 删除分区

    # 删除单个分区
    alter table dept_partition drop partition(day='20200406');
    
    # 删除多个分区
    alter table dept_partition drop partition(day='20200405'),partition(day='20200404');
    
    
  6. 查看分区表信息

    # 查看分区表有多少分区
    show partitions dept_partition;
    
    # 查看分区表结构
    desc formatted dept_partition;
    

1.2 二级分区

如果一天的数据量也很大,可以再将数据拆分。

  1. 创建二级分区表

    create table dept_partition2(
    deptno int, dname string, loc string
    )
    partitioned by (day string, hour string)
    row format delimited fields terminated by ' ';
    
  2. 正常加载数据

    load data local inpath '/root/mydata/dept_20200401.log' into table dept_partition2 partition(day='20200401',hour='12');
    
    select * from dept_partition2 where day='20200401' and hour='12';
    
  3. 把数据直接上传到分区目录上,让分区表和数据产生关联

    1. 方式一:上传数据后修复

      # 上传数据
      dfs -mkdir -p /user/hive/warehouse/dbhive.db/dept_partition2/day=20200401/hour=13;
      dfs -put /root/mydata/dept_20200401.log /user/hive/warehouse/dbhive.db/dept_partition2/day=20200401/hour=13;
      
      # 修复数据
      msck repair table dept_partition2;
      
      # 查询分区数据
      select * from dept_partition2 where day='20200401' and hour='13';
      
    2. 方式二:上传数据后添加分区

      # 上传数据
      dfs -mkdir -p /user/hive/warehouse/dbhive.db/dept_partition2/day=20200401/hour=14;
      dfs -put /root/mydata/dept_20200401.log /user/hive/warehouse/dbhive.db/dept_partition2/day=20200401/hour=14;
      
      # 添加分区
      alter table dept_partition2 add partition(day='20200401',hour='14');
      
      # 查询分区数据
      select * from dept_partition2 where day='20200401' and hour='14';
      
    3. 方式三:创建文件夹后 load 数据到分区

      # 创建文件夹
      dfs -mkdir -p /user/hive/warehouse/dbhive.db/dept_partition2/day=20200401/hour=15;
      
      # 加载数据
      load data local inpath '/root/mydata/dept_20200401.log' into table dept_partition2 partition(day='20200401',hour='15');
      
      # 查询分区数据
      select * from dept_partition2 where day='20200401' and hour='15';
      

1.3 动态分区调整

关系型数据库中,对分区表 Insert 数据时候,数据库自动会根据分区字段的值,将数据插入到相应的分区中,Hive 中也提供了类似的机制,即动态分区(Dynamic Partition),只不过,使用 Hive 的动态分区,需要进行相应的配置。

  1. 开启动态分区参数设置
# 开启动态分区功能(默认 true,开启)
hive.exec.dynamic.partition=true

# 设置为非严格模式(动态分区的模式,默认 strict,表示必须指定至少一个分区为
# 静态分区,nonstrict 模式表示允许所有的分区字段都可以使用动态分区。)
hive.exec.dynamic.partition.mode=nonstrict

# 在所有执行 MR 的节点上,最大一共可以创建多少个动态分区。默认 1000
hive.exec.max.dynamic.partitions=1000

# 在每个执行 MR 的节点上,最大可以创建多少个动态分区。
# 该参数需要根据实际的数据来设定。
# 比如:源数据中包含了一年的数据,即 day 字段有 365 个值,那么该参数就需要设置成大于 365,如果使用默认值 100,则会报错。
hive.exec.max.dynamic.partitions.pernode=100

# 整个 MR Job 中,最大可以创建多少个 HDFS 文件。默认 100000
hive.exec.max.created.files=100000

# 当有空分区生成时,是否抛出异常。一般不需要设置。默认 false
hive.error.on.empty.partition=false
  1. 例子
# 创建分区表
create table dept_partition_dy(
id int, name string) 
partitioned by (loc int) 
row format delimited fields terminated by ' ';

# 设置为非严格模式,动态分区
set hive.exec.dynamic.partition.mode = nonstrict;

# 自动分区数据
insert into table dept_partition_dy partition(loc) 
select deptno, dname, loc from dept;

# 查看自动分区情况
show partitions dept_partition;

二、分桶表

分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区。对于一张表或者分区,Hive 可以进一步组织成桶,也就是更为细粒度的数据范围划分。

分桶是将数据集分解成更容易管理的若干部分的另一个技术。

分区针对的是数据的存储路径;分桶针对的是数据文件。

  1. 例子

    创建分桶表

    create table stu_buck0(id int, name string)
    clustered by(id) 
    into 4 buckets
    row format delimited fields terminated by '\t';
    
    # 查看表信息
    desc formatted stu_buck;
    # Num Buckets: 4
    

    导入数据

    load data inpath '/student.txt' into table stu_buck;
    

    查看创建的分桶表中是否分成 4 个桶

    在这里插入图片描述

    select * from stu_buck;
    

    分桶规则

    根据结果可知:Hive 的分桶采用对分桶字段的值进行哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。

  2. 分桶表操作需要注意的事项

    • reduce 的个数设置为-1,让 Job 自行决定需要用多少个 reduce 或者将 reduce 的个数设置为大于等于分桶表的桶数。
    • 从 hdfs 中 load 数据到分桶表中,避免本地文件找不到问题?。
    • 不要使用本地模式?
  3. insert 方式将数据导入分桶表

    insert into table stu_buck select * from student_insert;
    

三、抽样查询

对于非常大的数据集,有时用户需要使用的是一个具有代表性的查询结果而不是全部结果。Hive 可以通过对表进行抽样来满足这个需求。

语法: TABLESAMPLE(BUCKET x OUT OF y)

查询表 stu_buck 中的数据:

select * from stu_buck tablesample(bucket 1 out of 4 on id);
Hive分区表和分桶表 一、分区表 1.1 概念 Hive 中的表对应为 HDFS 上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大。 分区为 HDFS 上表目录的子目录,数据按照分区存储在子目录中。如果查询的 where 字句的中包含分区条件,则直接从该分区去查找,而不是扫描整个表目录,合理的分区设计可以极大提高查询速度和性能。 这里说明一下分区表并 Hive 独有的概念,实际上这个概念非常常见。比如在我们常用的 Oracle 数据库中,当表中的数据量不断增大,查询数据的速度就会下降,这时也可以 阅读详情

相关推荐

Hive查询系列之分区表与分桶表

Hive查询之分区表与分桶表 1 分区表 ​ 分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文 件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。 1.1 分区表基本操作 1)引入分区表(需要根据日期对日志进行管理, 通过部门信息模拟) dept_20200401.log dept_20200402.log dept_20200403.log 2)

weixin_49063354的博客 1123

一文彻底学会hive分桶表(实战详解)

本文目录一、分桶表概述1.1、什么是分桶表?1.2、分桶表和分区表有啥区别?二、分桶表实战2.1、创建一个分桶表2.2、准备数据2.3、向分桶表导入数据2.3.1、错误导入示范(引出分桶的本质)2.3.2、正确导入示范(引出分桶规则)2.4、分桶抽样三、总结3.1、分桶表的优点3.2、常用操作3.3、分桶表的实质及与分区表的区别 一、分桶表概述 1.1、什么是分桶表? 分桶是将数据集分解成更容易管...

静待花开 1万+

hive分区表和分桶表

目录1.分区表1.1静态分区小结1.2动态分区2.分桶表 先创建一个数据库myhive2019 create database if not exists myhive2019; 在myhive2019数据库下创建内部表 student: create table student(id int,name string,gender string,age int,department string...

MicoOu的博客 1021

分桶表学习

分桶表

weixin_42282445的博客 1384

Hive中的数据导入和导出、分区表和分桶表的使用与区别详解

目录 一、Hive数据导入 二、Hive数据导出 三、Hive的分区表 1.1 为什么要分区? 1.2 外部分区表综合练习 四、Hive的分桶表 1.1 分桶表原理 1.2 作用 1.3 案例演示:创建分桶表 五、分区表和分桶表的区别 一、Hive数据导入 1 直接向表中插入数据(强烈不推荐使用) hive (myhive)> create table score3 like score; hive (myhive)> insert into table score3

weixin_43230682的博客 3131

【大数据入门 | Hive】分区表和分桶表

Hive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录,每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择查询所需要的分区,这样的查询效率会提高很多。

2301_80912559的博客 1102

hive 建表,分桶表(clustered by)、分桶且桶内排序(clustered by+sorted by)、分区表(partitioned by)、分区分桶一起用

一、分桶表 1、建表语句 create table test_bucket_sorted ( id int comment 'ID', name string comment '名字' ) comment '测试分桶' clustered by(id) sorted by (id) into 4 buckets ROW FORMAT DELIMITED FIELDS TERMINATED ...

祁东握力的博客 2万+

(03)Hive的相关概念——分区表、分桶表

Hive的相关概念——分区表、分桶表

爱吃辣条的博客 2531

Hive分桶表

分桶表 分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区。对于一张表或者分区,Hive 可以进一步组织成桶,也就是更为细粒度的数据范围划分。分桶是将数据集分解成更容易管理的若干部分的另一个技术。分区针对的是数据的存储路径;分桶针对的是数据文件。 1. 创建分桶表 create table stu_buck(id int, name string) clustered by(id) into 4 buckets row format delimited fields term

CharlesCFA的博客 603

【Hive大数据】Hive分区表与分桶表使用详解

Hive分区表与分桶表使用详解

congge_study的博客 6645

HX720数据采集实战:从硬件连接到姿态解析(含避坑指南)

本文详细介绍了HX720高精度ADC芯片在数据采集与姿态解析项目中的实战应用。内容涵盖从硬件电路设计、驱动源码编写与优化,到原始数据处理、校准以及最终姿态角度计算的完整流程,并提供了关键的避坑指南和调试技巧,帮助开发者高效完成从传感器信号到可用姿态数据的转换。

i8j9k0l1的博客 486

Hive 分区表 & 分桶表

八、Hive 分区表 & 分桶表 1.分区表 Ⅰ.分区表基本操作 Ⅱ.二级分区 Ⅲ.动态分区 Ⅳ.手工创建的分区目录,如何让数据与分区信息进行关联 2.分桶表 Ⅰ.分桶表基本操作 Ⅱ.抽样查询

扛麻袋的少年的博客 5555

开关电源补偿设计避坑手册:为什么你的Buck电路总在轻载时振荡?

本文深入剖析了Buck电路在轻载时发生振荡的根本原因,并提供了专业的补偿设计避坑指南。文章指出,轻载下输出滤波器Q值飙升、DCM模式切换导致的小信号模型剧变是主要诱因,并详细对比了Type II与Type III补偿网络在宽负载范围内的表现差异。通过结合LTspice仿真与工程实践,指导工程师如何优化补偿环路设计,确保电源从满载到空载的全程稳定。

hadoop5ranger的博客 673

Hive中的分区表与分桶表详解

不过,并非所有的数据集都可形成合理的分区。分桶表的基本原理是,首先为每行数据计算一个指定字段的数据的 hash 值,然后模以一个指定的分桶数,最后将取模运算结果相同的行,写入同一个文件中,这个文件就称为一个分桶(bucket)。动态分区的模式,默认 strict(严格模式),要求必须指定至少一个分区为静态分区,nonstrict(非严格模式)允许所有的分区字段都使用动态分区。命令后,分区元数据会被删除,而 HDFS 的分区路径不会被删除,同样会导致 Hive 的元数据和 HDFS 的分区路径不一致。

qq_45115959的博客 3667

PG-FP6编程器错误代码解析与高效排障实战指南

在嵌入式系统开发与量产烧录中,编程器是连接开发环境与目标硬件的重要桥梁。其工作原理是通过特定的通信协议(如UART、SWD)与微控制器(MCU)建立连接,完成程序代码的写入、擦除与校验。这项技术的核心价值在于确保固件能够准确、可靠地部署到硬件中,是产品从原型到量产的关键环节。在实际的工程实践中,尤其是在使用瑞萨(Renesas)PG-FP6这类编程器进行调试或批量生产时,工程师常会遇到各种通信失败、编程验证错误或电源异常等问题,这些问题往往以特定的错误代码形式呈现。深入理解这些错误代码背后的硬件连接、电源时

weixin_34387468的博客 577

debian mirrors 镜像源 riscv 64 赛昉 星光 starfive vf2 InRelease‘ doesn‘t support architecture ‘riscv64‘

debian mirrors 镜像 riscv 64 赛昉 星光2 starfive vf2 InRelease' doesn't support architecture 'riscv64'

qq_29758759的博客 1257

一分钟搞明白hive分区表和分桶表的区别

1.两者的区别 (1)分区和分桶都是细化数据管理,但是分区表是手动添加区分,由于hive是读模式,所以对添加进分区的数据不做模式校验。分桶表的数据时按住某些分桶字段进行hash散列 相乘的多个文件,所以数据的准确性高很多 (2)分区表是指按照数据表的某列或某些列分为多个区,区从形式上可以理解为文件夹 (3)分桶是相对分区进行更细粒度的划分。分桶将整个数据内容按照某列属性值的hash值进行区分,如要按照name属性分为3个桶,就是对name属性值的hash值对3取摸,按照取模结果对数据分桶。如取模结

Li_Jian_Hui_的博客 2万+

从传感器到执行-智能家居 Agent 的感知-决策-执行闭环

本文提出了一种面向智能家居的感知型Agent架构,通过"感知-决策-执行"的闭环系统实现智能化控制。感知模块整合多源传感器数据,决策模块基于规则或机器学习模型生成控制策略,执行模块完成设备操作。系统能够实时监测环境参数和用户状态,自动调节温度、照明等设备,提升家居舒适度。该架构可扩展为多模态感知与强化学习相结合的智能系统,为智慧家居发展提供技术基础。

一键难忘的博客 1118

Hive ---- 分区表和分桶表

再比如,若分区表为外部表,用户执行drop partition命令后,分区元数据会被删除,而HDFS的分区路径不会被删除,同样会导致Hive的元数据和HDFS的分区路径不一致。对于一张表或者分区,Hive 可以进一步组织成桶,也就是更为细粒度的数据范围划分,分区针对的是数据的存储路径,分桶针对的是数据文件。分桶表的基本原理是,首先为每行数据计算一个指定字段的数据的hash值,然后模以一个指定的分桶数,最后将取模运算结果相同的行,写入同一个文件中,这个文件就称为一个分桶(bucket)。

是微风,是晚霞,是无可替代 2683

NVIDIA Isaac GR00T N1 人形机器人强化学习入门教程(二)详细步骤

LeRobot 格式 1.1 加载数据集 要加载数据集,我们需要定义以下 3 项内容: 在数据中显示图像帧 我们还可以对 LeRobotSingleDataset 类中的数据进行一系列转换。下面展示了如何对数据进行转换。 现在看看应用转换后的数据有何不同。 例如,对状态和操作进行规范化和串联,对视频图像进行裁剪、调整大小和颜色抖动。 二、GR00T 推断 本教程介绍如何使用 GR00

2506_90492529的博客 3012

41、矩形和圆柱形开槽微带贴片天线设计及性能分析

本文提出了一种适用于ISM频段(2.4 - 2.48 GHz)的微带圆形贴片天线,专为生物医学植入和可穿戴设备设计。通过在贴片上蚀刻矩形槽并去除圆柱形槽,实现了小型化与性能优化。采用Rogers 3010基板材料,结合缺陷接地结构(DGS)技术,有效改善了带宽、回波损耗和极化纯度。仿真结果显示,天线在弯曲状态下仍保持良好性能,回波损耗达-13 dB,VSWR为1.6,方向性提升至5.38 dB。与以往设计相比,本次设计在回波损耗和谐振频率稳定性方面表现优异,具备良好的生物相容性和应用潜力。未来将从开槽结构、

github5actions的博客 258

Hive---分区表和分桶表

分区表和分桶表区别如下:  1、分区使用的是表外字段,需要指定字段类型;分桶使用的是表内字段,已经知道字段类型,不需要再指定。  2、分区通过关键字partitioned by(partition_name string)声明,分桶表通过关键字clustered by(column_name) into 3 buckets声明。  3、分区划分粒度较粗,分桶是更细粒度的划分、管理数据,可以对表进行...

xm_QUQ的博客 2612

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Hive的分区表和分桶表的概念和使用

Hive 中的表对应为 HDFS 上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大。分区为 HDFS 上表目录的子目录,数据按照分区存储在子目录中。如果查询的 字句的中包含分区条件,则直接从该分区去查找,而不是扫描整个表目录,合理的分区设计可以极大提高查询速度和性能。通常,在管理大规模数据集的时候都需要进行分区,比如将日志文件按天进行分区,从而保证数据细粒度的划分,使得查询性能得到提升。在 Hive 中可以使用 子句创建分区表。表可以包含一个或多个分区列,程序会为分区列中

wenqi 3330

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

大数据之hive分区表和分桶表的区别

(一)二者的区别 (1)分区和分桶都是细化数据管理,但是分区表是手动添加区分,由于hive是读模式,所以对添加进分区的数据不做模式校验。分桶表的数据时按住某些分桶字段进行hash散列 相乘的多个文件,所以数据的准确性高很多 (2)分区表是指按照数据表的某列或某些列分为多个区,区从形式上可以理解为文件夹 (3)分桶是相对分区进行更细粒度的划分。分桶将整个数据内容按照某列属性值的hash值进行区...

qq_38603049的博客 6598

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: Hive 查询
下一篇: Hive 函数
努力生活的黄先生
博客等级 码龄7年 38粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力生活的黄先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值