在数据仓库中如何做分桶

作者: FxData | 来源:发表于2017-05-08 22:27 被阅读115次
  1. 为什么分桶

(1)获得更高的查询处理效率。桶为表加上了额外的结构,Hive在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现。比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。

(2)使取样(sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。

分区是粗粒度的划分,桶是细粒度的划分,为了让查询发生在更小范围的数据上来提高效率。分桶将整个数据内容安装某列属性值得hash值进行区分,如要安装name属性分为3个桶,就是对name属性值的hash值对3取摸,按照取模结果对数据分桶。如取模结果为0的数据记录存放到一个文件,取模为1的数据存放到一个文件,取模为2的数据存放到一个文件。

与分区不同的是,分区依据的不是真实数据表文件中的列,而是我们指定的伪列,但是分桶是依据数据表中真实的列而不是伪列。所以在指定分区依据的列的时候要指定列的类型,因为在数据表文件中不存在这个列,相当于新建一个列。而分桶依据的是表中已经存在的列,这个列的数据类型显然是已知的,所以不需要指定列的类型。

  1. 如何做分桶
    (1)创建表
    create table if not exists testA
    (
    uuid string comment "UUID",
    dat_at date comment "数据创建日期"
    )
    COMMENT "行为大宽表"
    PARTITIONED BY (evt_id STRING)
    CLUSTERED BY (dat_at) INTO 32 BUCKETS;

(2)设置参数
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.enforce.bucketing= true;

(3)插入数据
insert into table testA partition(evt_id)
select reflect('java.util.UUID', 'randomUUID'),
to_date(created_at),
'5'
from testB

相关文章

  • 在数据仓库中如何做分桶

    为什么分桶 (1)获得更高的查询处理效率。桶为表加上了额外的结构,Hive在处理有些查询时能利用这个结构。具体而言...

  • 预算规则计算

    定义总桶定义:表示总预算桶的模型分桶定义:表示用于分桶模型, 统计使用分桶:用于主流程中扣减的分桶,因为性能考虑,...

  • 深入理解Hive分区与分桶

    概述 目前,在利用hive建设数据仓库的过程中,总会遇见分区分桶的,跟传统的DBMS系统一样,通过表分区能够在特定...

  • 数据仓库笔记

    数据仓库的作用 数据仓库的特点 数据仓库中的数据是面向主题的 数据仓库中的数据是集成的 数据仓库中的数据是不可更新...

  • Hive 1.2.1 分区和分捅

    1. 借鉴 Hive学习笔记——Hive中的分桶Hive分区和分桶(0925)HIVE表索引,分区和分桶的区别 2...

  • 大数据框架(分区,分桶,分片)

    前言 在大数据分布式中,分区,分桶,分片是设计框架的重点。此篇就来总结各个框架。建议收藏 目录 Hive分区与分桶...

  • 数据仓库中如何做增量处理

    为什么做增量数据量大,只需要增量最新被更改的数据。 如何做增量(1)insert into比如行为数据,发生一条记...

  • 简述:数据中台、数据仓库、数据湖

    概述: 简述数据仓库、数据湖、数据中台的相关概念。 一、数据仓库: 1、定义: 数据仓库之父 W.H.Inmon ...

  • 数仓开发应避免的10个陷阱

    在Ralph Kimball和Margy Ross 的《数据仓库工具包》一书中,提到了数据仓库设计中的10个常见陷...

  • 实训总结20170923

    数据仓库概述 什么是数据仓库? 创始人W.H.Inmon在《建立数据仓库》一书中对数据仓库的定义是:数据仓库就是面...

网友评论

    本文标题:在数据仓库中如何做分桶

    本文链接:https://www.haomeiwen.com/subject/wsbvtxtx.html