zoukankan      html  css  js  c++  java
  • Hive 分区和分桶

    分区

    Hive分区是指按照数据表的某列或某些列分为多个区,区从形式上可以理解为文件夹,这样可以实现取数据的时候,某个分区取出来的数据就是所需要的分区数据。
    常用的分区字段有:按时间分区,按业务分区等。

    #创建分区表
    create table t1 (
    id int,
    name string,
    age int
    )
    partitioned by (pdate string)
    row format delimited fields terminated by '01'
    ;
    
    常用命令:
    查看分区数据:
    select * from t1 where pdate='2020-01-01';
    
    查看有哪些分区:
    show partitions t1;
    
    向分区插入数据:
    insert overwrite table t1 partition(pdate='2020-01-01')
    select * from xxx
    ;
    

    分桶

    Hive 分桶是比分区更细粒度的数据划分,可以指定分桶表的某一列,让该列数据按照哈希取模的方式随机、均匀地分发到各个桶文件中。
    因为分桶操作需要根据某一列具体数据来进行哈希取模操作,故指定的分桶列必须基于表中的某一列(字段)。分桶改变了数据的存储方式,它会把哈希取模相同或者在某一区间的数据行放在同一个桶文件中。

    如此一来便可提高查询效率,比如我们要对两张在同一列上进行了分桶操作的表进行JOIN操作的时候,只需要对保存相同列值的桶进行JOIN操作即可。同时分桶也可以提高采样率。

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

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

    #常用指令:
    #创建分桶表
    create table t2(
    id int,
    name string
    )
    clustered by (id) sorted by(id) into 4 buckets 
    ;
    
    

    查看分桶表:
    dfs -ls /user/hive/warehouse/bucketed_users;
    文件结构如下所示:
    /user/hive/warehouse/b_table1/000000_0
    /user/hive/warehouse/b_table1/000001_0
    /user/hive/warehouse/b_table1/000002_0
    /user/hive/warehouse/b_table1/000003_0

    动态分区表

    对动态分区表写入数据时,要开启允许动态分区写入。
    set hive.exec.dynamic.partition=true;
    set hive.exec.dynamic.partition.mode=nostrict;

  • 相关阅读:
    vs运行代码版本不一致删除缓存
    spring framework 各版本源码下载地址
    类型初始值设定项引发异常
    datagridview 点击列标题排序
    软媒魔方u盘装系统
    sql中exists,not exists的用法
    java web第一个Servlet程序
    《ASP.NET 本质论》HttpApplication的处理管道 ,HttpMoudle,HttpHandler
    如何正确设置 Informix GLS 及 CSDK 语言环境
    Linux网络流量控制工具—Netem
  • 原文地址:https://www.cnblogs.com/bigband/p/13602986.html
Copyright © 2011-2022 走看看