Hive动态分区和分桶使用场景和使用方法

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

    1.分区

            按照数据表的某列或某些列分为多个分区分区从形式上可以理解为文件夹比如我们要收集某个大型 网站的日志数据一个网站每天的日志数据存在同一张表上由于每天会生成大量的日志导致数据表 的内容巨大在查询时进行全表扫描耗费的资源非常多。那其实这个情况下我们可以按照日期对数据 进行分区不同日期的数据存放在不同的分区在查询时只要指定分区字段的值就可以直接从该分区查 找。分区是以字段的形式在表结构中存在通过describe table命令可以查看字段存在但是该字段不存 放实际的数据内容仅仅是分区的表示。

    1. 静态分区

    create table if not exists sopdm.wyp2(id int,name string,tel string)
    partitioned by(age int) row format delimited fields terminated by ‘,’ stored as textfile;
    -- overwrite是覆盖into是追加
    insert into table sopdm.wyp2 partition(age=‘25’) select id,name.tel from sopdm.wyp;

    2. 动态分区

    -- 设置为true表示开启动态分区功能默认为false
    set hive.exec.dynamic.partition=true;
    -- 设置为nonstrict表示允许所有分区都是动态的默认为strict
    set hive.exec.dynamic.partition.mode=nonstrict;
    -- insert overwrite是覆盖insert into是追加
    insert overwrite table sopdm.wyp2 partition(age) select id,name.tel,age from sopdm.wyp;

    3. 静态分区和动态分区的区别

    静态分区与动态分区的主要区别在于静态分区是手动指定而动态分区是通过数据来进行判断。详细来 说
    静态分区
    • 静态分区是在编译期间指定的指定分区名。
    • 支持load和insert两种插入方式。
    • 适用于分区数少分区名可以明确的数据。
    动态分区
    • 根据分区字段的实际值动态进行分区。
    • 是在sql执行的时候进行分区。
    • 需要先将动态分区设置打开。set hive.exec.dynamic.partition.mode=nonstrict
    • 只能用insert方式。
    • 通过普通表选出的字段包含分区字段分区字段放置在最后多个分区字段按照分区顺序放置。

    2.分桶

    分桶是相对分区进行更细粒度的划分。分桶将整个数据内容安装某列属性值得hash值进行区分如果按 照name属性分为3个桶就是对name属性值的hash值对3取模按照取模结果对数据分桶。如取模结果 为0的数据记录存放到一个文件取模为1的数据存放到一个文件取模为2的数据存放到一个文件。
    CREATE TABLE bucketed_user(id INT) name STRING CLUSTERED BY (id) INTO 4 BUCKETS;
    对于每一个表table或者分区可以进一步组织成桶也就是说桶是更为细粒度的数据范围划分。 Hive也是针对某一列进行桶的组织。Hive采用对列值哈希然后除以桶的个数求余的方式决定该条记录 存放在哪个桶当中。把表或者分区组织成桶Bucket有两个理由
    1)获得更高的查询处理效率
    桶为表加上了额外的结构Hive在处理有些查询时能利用这个结构。具体而言连接两个在包含连接 列的相同列上划分了桶的表可以使用Map端连接Map-side join高效的实现。比如JOIN操作。 对于JOIN操作两个表有一个相同的列如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行 JOIN操作就可以可以大大减少JOIN的数据量。
    2)使取样sampling更高效
    在处理大规模数据集时在开发和修改查询的阶段如果能在数据集的一小部分数据上试运行查询会 带来很多方便。
    结语小编能力有限  欢迎大家多多指教。
  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6