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

这篇具有很好参考价值的文章主要介绍了Hive动态分区和分桶使用场景和使用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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.toymoban.com/news/detail-442258.html

到了这里,关于Hive动态分区和分桶使用场景和使用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Apache Doris (十六) :Doris分区和分桶2-List分区

    目录 1. List分区 1.1 创建List分区方式 1.2 增删分区 ​​​​​​​1

    2024年02月12日
    浏览(30)
  • 【Hive大数据】Hive分区表与分桶表使用详解

    目录 一、分区概念产生背景 二、分区表特点 三、分区表类型 3.1 单分区 3.2 多分区

    2024年02月03日
    浏览(39)
  • 关于HIVE的分区与分桶

    Hive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录,每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择查询所需要的分区,这样的查询效率会提高很多 个人理解白话:按表中或者自定义的一个列,对数据进行了group by, 然后这时候,查询

    2024年02月14日
    浏览(32)
  • Hive-分区与分桶详解(超详细)

    本文将介绍Hive中的两个重要概念:分区和分桶。在大数据处理场景下,通过合理地使用分区和分桶可以提高查询性能、管理灵活性以及支持更多的数据操作。 在Hive中,分区是将表的数据 按照某个列的值 进行划分和存储的一种方式。通过分区,可以将数据按照特定的维度进

    2024年04月14日
    浏览(41)
  • MySQL分区表的正确使用方法,适用场景,建立分区的条件

    什么是MySQL分区? MySQL分区是将一张表分割成独立的子表的技术。每个子表被称为分区,它们有着相同的结构和字段,但存储着不同的数据。这项技术可以提高查询速度,减少日志文件和磁盘空间的使用。 建立分区的条件 要建立MySQL分区,需要满足以下几个条件: 1.所需的

    2024年02月07日
    浏览(36)
  • Hive分区(静态分区+动态分区)

            Hive分区的概念与传统关系型数据库分区不一样。            传统数据库的分区方式:就oracle而言,分区独立存在于段里,里面存储真实的数据,在数据进行插入的时候自动分配分区。            Hive的分区方式:因为Hive实际是存储在HDFS上的抽象,H

    2023年04月14日
    浏览(29)
  • hive分区表 静态分区和动态分区

    现有数据文件 data_file 如下: 2023-08-01,Product A,100.0 2023-08-05,Product B,150.0 2023-08-10,Product A,200.0 需要手动指定分区 现有源数据表如下: CREATE TABLE sales_source (     sale_date STRING,     product STRING,     amount DOUBLE ); INSERT INTO sales_source VALUES     (\\\'2023-08-01\\\', \\\'Product A\\\', 100.0),     (\\\'2023-08-

    2024年02月10日
    浏览(43)
  • Hive 动态分区以及分区以及中文分区字段

    hive 提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。 1.1 主要配置参数 以下为 Hive 动态分区涉及的配置参数: 1.2 调优相关参数 动态分区相关的调优参数: 2.1 准备数据 以下为准备数据的步骤,以及数据中的内容。 2.2 创建分区表 以

    2024年02月04日
    浏览(37)
  • Hive的静态分区与动态分区

    在 Hive 中,分区是一种组织数据的方式,允许你将表数据划分成更小的子集,以便更有效地管理和查询大型数据集。分区可以分为静态分区和动态分区,它们有不同的特点和用途。 1. 静态分区(Static Partitioning): 静态分区是在创建表时显式定义的分区方式。在静态分区中,

    2024年02月09日
    浏览(30)
  • Hive的动态分区与静态分区(区别及详解)

    静态分区与动态分区的区别: 1、静态分区 2、动态分区 静态分区与动态分区的区别: 静态分区是先把分区表创好,然后手动把数据导入到对应的分区里面去。 静态分区实在 编译期间指定分区名 。 静态分区支持load、insert两种插入方式。 静态分区是用于分区少,分区名可以

    2023年04月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包