`
superlxw1234
  • 浏览: 552287 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:44543
社区版块
存档分类
最新评论

[一起学Hive]之六-Hive的动态分区

    博客分类:
  • hive
阅读更多

       前面文章介绍了Hive中是支持分区的。

       关系型数据库(如Oracle)中,对分区表Insert数据时候,数据库自动会根据分区字段的值,将数据插入到相应的分区中,Hive中也提供了类似的机制,即动态分区(Dynamic Partition),只不过,使用Hive的动态分区,需要进行相应的配置。

       先看一个应用场景,源表t_lxw1234的数据如下:

SELECT day,url FROM t_lxw1234;
2015-05-10 url1
2015-05-10 url2
2015-06-14 url1
2015-06-14 url2
2015-06-15 url1
2015-06-15 url2
……

      目标表为:

   

CREATE TABLE t_lxw1234_partitioned (
url STRING
) PARTITIONED BY (month STRING,day STRING)
stored AS textfile;

 

     

需求:将t_lxw1234中的数据按照时间(day),插入到目标表t_lxw1234_partitioned的相应分区中。

如果按照之前介绍的往指定一个分区中Insert数据,那么这个需求很不容易实现。

这时候就需要使用动态分区来实现,使用动态分区需要注意设定以下参数:

  • hive.exec.dynamic.partition

默认值:false

是否开启动态分区功能,默认false关闭。

使用动态分区时候,该参数必须设置成true;

  • hive.exec.dynamic.partition.mode

默认值:strict

动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区,nonstrict模式表示允许所有的分区字段都可以使用动态分区。

一般需要设置为nonstrict

  • hive.exec.max.dynamic.partitions.pernode

默认值:100

在每个执行MR的节点上,最大可以创建多少个动态分区。

该参数需要根据实际的数据来设定。

比如:源数据中包含了一年的数据,即day字段有365个值,那么该参数就需要设置成大于365,如果使用默认值100,则会报错。

  • hive.exec.max.dynamic.partitions

默认值:1000

在所有执行MR的节点上,最大一共可以创建多少个动态分区。

同上参数解释。

  • hive.exec.max.created.files

默认值:100000

整个MR Job中,最大可以创建多少个HDFS文件。

一般默认值足够了,除非你的数据量非常大,需要创建的文件数大于100000,可根据实际情况加以调整。

  • hive.error.on.empty.partition

默认值:false

当有空分区生成时,是否抛出异常。

一般不需要设置。

 

      那么,上面的需求可以使用如下的语句来完成:

SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
SET hive.exec.max.dynamic.partitions.pernode = 1000;
SET hive.exec.max.dynamic.partitions=1000;
 
INSERT overwrite TABLE t_lxw1234_partitioned PARTITION (month,day)
SELECT url,substr(day,1,7) AS month,day
FROM t_lxw1234;

 

    

注意:在PARTITION (month,day)中指定分区字段名即可;

在SELECT子句的最后两个字段,必须对应前面PARTITION (month,day)中指定的分区字段,包括顺序。

执行结果如下:

Loading data to table liuxiaowen.t_lxw1234_partitioned partition (month=null, day=null)

Loading partition {month=2015-05, day=2015-05-10}

Loading partition {month=2015-06, day=2015-06-14}

Loading partition {month=2015-06, day=2015-06-15}

Partition liuxiaowen.t_lxw1234_partitioned{month=2015-05, day=2015-05-10} stats: [numFiles=1, numRows=2, totalSize=10, rawDataSize=8]

Partition liuxiaowen.t_lxw1234_partitioned{month=2015-06, day=2015-06-14} stats: [numFiles=1, numRows=2, totalSize=10, rawDataSize=8]

Partition liuxiaowen.t_lxw1234_partitioned{month=2015-06, day=2015-06-15} stats: [numFiles=1, numRows=2, totalSize=10, rawDataSize=8]

 

使用show partitions t_lxw1234_partitioned;查看目标表有哪些分区:

hive> show partitions t_lxw1234_partitioned;

OK

month=2015-05/day=2015-05-10

month=2015-06/day=2015-06-14

month=2015-06/day=2015-06-15

 

Hive相关文章(持续更新)

一起学Hive系列

—-Hive概述,Hive是什么

—-Hive函数大全-完整版

—-Hive中的数据库(Database)和表(Table)

—-Hive的安装配置

—-Hive的视图和分区

Hive分析函数系列

Hive索引

hive优化之——控制hive任务中的map数和reduce数

1
0
分享到:
评论
1 楼 annmi_cai 2016-03-11  
顶顶更健康

相关推荐

    Hive编程指南-by-_美_Edward-Capriolo Dean-Wampler Jason-Rutherglen-著-_

    此外,Cascading和Crunch等框架也常与Hive一起使用,它们提供了更高级别的抽象,简化了MapReduce编程。 在Hive的基础操作部分,书中涵盖了安装、配置和使用Hive的全过程,包括Java环境的设置、Hadoop的安装(涉及...

    hive

    在实际应用中,Hive 常常与其他大数据组件一起使用,例如 HBase 提供实时查询,Impala 或 Spark SQL 提供更快的查询性能,而 Hue 或 Beeline 则作为 Hive 的交互式查询工具。 总结来说,Hive 是大数据领域中不可或...

    hive优化总结

    JOIN操作是Hive性能优化的关键之一。在执行JOIN操作时,应该将小表放在前面,以避免内存溢出错误。同时,应该使用MAPJOIN操作,以提高 JOIN 的效率。 4. 列裁剪和分区裁剪 列裁剪和分区裁剪是Hive性能优化的重要...

    HIVE和HBASE区别

    HIVE是一个构建在Hadoop基础设施之上的数据仓库。它通过HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,这种语言最终被转化为Map/Reduce。HIVE提供了SQL查询功能,但是HIVE不能进行交互查询,因为它只能在...

    hive_data.rar

    动态分区操作通常与INSERT OVERWRITE语句一起使用,使得数据导入更加灵活。 “id自增数据”可能是指具有连续整数ID的数据,这种数据在数据库中很常见,常用于唯一标识每条记录。在Hive中,虽然没有内置的自增ID机制...

    Programming Hive

    Hive是一个建立在Hadoop之上的数据仓库工具,它提供了一种类似于SQL的语言(HiveQL)来查询存储在HDFS中的数据。Hive使得对大数据集的查询变得简单和直观,特别是对于那些熟悉SQL的用户。在知识方面,这本书可能会...

    03_Hive.docx

    因此,可以说 Hive 是建立在 Hadoop 之上的数据仓库系统。 #### 二、Hive的特点 1. **存储依赖**:Hive 使用 HDFS (Hadoop Distributed File System) 来存储数据。 2. **计算依赖**:Hive 使用 MapReduce 或其他...

    大数据 虚拟机 Linux VM复习题库:题库包括了60题选择题、10题填空题、10题判断题、2题简答题,助你度过期末复习

    Hive分区表能够提高查询效率,通过将大型表分割成更小、更易于管理的部分,根据特定列的值进行组织。这允许用户只查询感兴趣的特定部分,而不是整个大表,从而减少查询时间和资源消耗。 3. **静态分区与动态分区的...

    Hive高级编程经验分享.pdf

    MetaStore负责存储元数据,如表结构、分区信息等,而Thrift API则提供了一种跨语言的服务框架,使得不同语言的应用可以访问Hive服务。SerDe(Serializer/Deserializer)用于数据的序列化和反序列化,支持多种格式如...

    毕业设计:基于Spark+Kafka+Hive的智能货运系统设计与实现.zip

    - **Hive Metastore**:理解Hive元数据存储的概念,它是Hive管理表和分区的关键组件。 - **数据集成**:如何将来自不同来源的数据整合到一起,例如将Kafka中的实时数据与Hive中的历史数据进行融合分析。 - **数据...

    Hadoop_Hive_Project:NYU CSCI-GA.3033-003的课程项目

    2. **元数据管理**:Hive维护了关于数据表、列和分区等元数据的信息,这些信息帮助解析HQL并生成相应的MapReduce任务。 3. **灵活的数据模型**:Hive支持动态schema,允许数据模式随时间演进,便于处理不断变化的...

    蜂巢数据负载分区存储

    通过分区,我们可以将相关数据物理地组织在一起,从而减少查询时的数据扫描量。例如,假设我们有一个电商交易表,可以按照日期进行分区,这样查询特定日期的交易记录时,Hive只会扫描对应的分区,而不是整个表,大大...

    impala单机部署手册

    Impala 是参照谷歌的新三篇论文(Caffeine、Pregel、Dremel)中的 Dremel 实现而来,其中旧三篇论文分别是(BigTable、GFS、MapReduce)分别对应我们即将学的 HBase 和已经学过的 HDFS 以及 MapReduce。 Impala 是...

    zeppelin-spark-notebook:Docker compose和一些笔记本可通过Spark沙箱快速启动并运行

    4. **Hive Metastore**:对于Spark SQL,Hive Metastore提供了元数据存储,使得Spark可以访问Hive表和分区。 5. **Zookeeper**:协调Spark集群的各个组件,确保高可用性。 利用Docker Compose,我们可以轻松地将...

    2017年山东大学大数据管理与分析考试题

    - **扩展性**:Hive构建在Hadoop之上,可以无缝地处理PB级别的数据。 - **集成性**:Hive与其他Hadoop生态系统工具如Pig、HBase等集成良好。 #### 六、朴素贝叶斯分类器的应用 **朴素贝叶斯分类器** 是基于...

    大数据入门安装包Hadoop、JDK等

    此外,了解Hadoop的生态系统也非常重要,包括YARN(Yet Another Resource Negotiator)作为资源调度器,Hive提供SQL-like查询功能,Pig提供高级数据处理语言,以及Spark等更高效的数据处理框架。这些组件和工具与...

    福建师范大学精品大数据导论课程系列 (5.9.1)--4.4 一种基于Hadoop的数据仓库之三.rar

    《福建师范大学精品大数据导论课程系列 (5.9.1)--4.4 一种基于Hadoop的数据仓库之三》 本课程聚焦于大数据处理技术,特别是以Hadoop为基础的数据仓库解决方案。Hadoop作为当前最流行的大数据处理框架,其分布式存储...

    bigdata资料.rar

    - **Hive**:数据仓库工具,支持SQL-like查询,简化了对Hadoop的数据分析。 - **Pig**:高级数据流语言和执行引擎,用于分析大规模数据集。 - **Oozie**:工作流调度系统,管理Hadoop作业的生命周期。 3. **...

    hbase入门到精通

    3. **Column Family**(列族):逻辑上将相关的列分组在一起。 4. **Column**(列):存储具体的数据值。 5. **Timestamp**(时间戳):记录每次数据更新的时间,可用于版本控制。 #### 五、Region与分区策略 随着...

Global site tag (gtag.js) - Google Analytics