Hive 分区与分桶

Hive 分区与分桶

一、Hive创建分区表语句

CREATETABLE employee_partitioned(

name string,

work_place ARRAY<string>,

sex_age STRUCT<sex:string,age:int>,

skills_score MAP<string,int>,

depart_title MAP<STRING,ARRAY<STRING>>)
指定分区“year”

PARTITIONE BY(year INT,month INT)

CLUSTERED BY(employee_id) INTO 2 BUCKETS 

ROW FORMAT DELIMITED 

FIELDS  TERMINATED  BY '|'

COLLECTION ITEMS TERMINATED BY','

MAP KEYS TERMINATED BY':';

stroed as textfile

强制分桶

set hive.enforce.bucketing=true;

使用emp表中的数据进行插入

Insert into table emp_name_buckets select * from emp;

二、Hive分区表/分桶表描述
(一)、Hive分区表描述回顾

1、分区列的值将表划分为文件夹

2、查询时使用“分区”列和常规列类似

3、查询时Hive自动过滤掉不用于提高性能的分区

(二)Hive分桶表描述回顾

1、分桶是相对分区进行更细粒度的划分

2、根据“桶列”的哈希函数将数据进行分桶

3、更高的查询处理效率

三、Hive分区、分桶(静态与动态)

(一)、动态分区:使用动态分区需设置

set hive.exec.dynamic.partition=true;

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

(二)Hive分桶:动态分桶(使用动态分桶需设置)

set hive.enforce.bucketing =true;

  • 分桶相关操作
    (一)随机抽样基于整行数据

SELECT*FROM table_name TABLESAMPLE(BUCKET 30UT OF 32 ON rand()s;

(二)随机抽样基于指定列(使用分桶列更高效)

SELECT*FROM table_name TABLESAMPLE(BUCKET 30UT OF 32 ON id)s;

(三)随机抽样基于block size

SELECT*FROM table_name TABLESAMPLE(10 PERCENT)s;

SELECT*FROM table_name TABLESAMPLE(1M)s;

SELECT*FROM table_name TABLESAMPLE(10 rows)s;

五、概念
(一)什么是分区

在Hive中,分区是将表的数据按照某个列的值进行划分和存储的一种方式。通过分区,可以将数据按照特定的维度进行组织,提高查询效率和数据管理的灵活性。

(二) 分区的优势

1、提高查询性能:通过分区,可以将数据按照特定的列值进行划分,使得查询只需要扫描特定分区的数据,减少了全表扫描的开销。

2、管理数据更加灵活:可以根据业务需求对数据进行分区,方便数据的管理和维护。

3、支持数据生命周期管理:可以根据数据的时间或其他维度进行分区,方便数据的归档和清理。

(三) 什么是分桶

分桶是将表的数据按照哈希函数的结果进行划分和存储的一种方式。通过分桶,可以将数据均匀地分布到不同的桶中,提高查询的并行度和性能。

(四)分桶的优势

1、提高查询性能:通过分桶,可以将数据均匀地分布到不同的桶中,使得查询可以并行地处理不同的桶,提高查询性能。

2、支持随机抽样:分桶可以方便地进行随机抽样操作,从而进行数据分析和调试。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值