前面文章介绍了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
相关推荐
此外,Cascading和Crunch等框架也常与Hive一起使用,它们提供了更高级别的抽象,简化了MapReduce编程。 在Hive的基础操作部分,书中涵盖了安装、配置和使用Hive的全过程,包括Java环境的设置、Hadoop的安装(涉及...
在实际应用中,Hive 常常与其他大数据组件一起使用,例如 HBase 提供实时查询,Impala 或 Spark SQL 提供更快的查询性能,而 Hue 或 Beeline 则作为 Hive 的交互式查询工具。 总结来说,Hive 是大数据领域中不可或...
JOIN操作是Hive性能优化的关键之一。在执行JOIN操作时,应该将小表放在前面,以避免内存溢出错误。同时,应该使用MAPJOIN操作,以提高 JOIN 的效率。 4. 列裁剪和分区裁剪 列裁剪和分区裁剪是Hive性能优化的重要...
HIVE是一个构建在Hadoop基础设施之上的数据仓库。它通过HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,这种语言最终被转化为Map/Reduce。HIVE提供了SQL查询功能,但是HIVE不能进行交互查询,因为它只能在...
动态分区操作通常与INSERT OVERWRITE语句一起使用,使得数据导入更加灵活。 “id自增数据”可能是指具有连续整数ID的数据,这种数据在数据库中很常见,常用于唯一标识每条记录。在Hive中,虽然没有内置的自增ID机制...
Hive是一个建立在Hadoop之上的数据仓库工具,它提供了一种类似于SQL的语言(HiveQL)来查询存储在HDFS中的数据。Hive使得对大数据集的查询变得简单和直观,特别是对于那些熟悉SQL的用户。在知识方面,这本书可能会...
因此,可以说 Hive 是建立在 Hadoop 之上的数据仓库系统。 #### 二、Hive的特点 1. **存储依赖**:Hive 使用 HDFS (Hadoop Distributed File System) 来存储数据。 2. **计算依赖**:Hive 使用 MapReduce 或其他...
Hive分区表能够提高查询效率,通过将大型表分割成更小、更易于管理的部分,根据特定列的值进行组织。这允许用户只查询感兴趣的特定部分,而不是整个大表,从而减少查询时间和资源消耗。 3. **静态分区与动态分区的...
MetaStore负责存储元数据,如表结构、分区信息等,而Thrift API则提供了一种跨语言的服务框架,使得不同语言的应用可以访问Hive服务。SerDe(Serializer/Deserializer)用于数据的序列化和反序列化,支持多种格式如...
- **Hive Metastore**:理解Hive元数据存储的概念,它是Hive管理表和分区的关键组件。 - **数据集成**:如何将来自不同来源的数据整合到一起,例如将Kafka中的实时数据与Hive中的历史数据进行融合分析。 - **数据...
2. **元数据管理**:Hive维护了关于数据表、列和分区等元数据的信息,这些信息帮助解析HQL并生成相应的MapReduce任务。 3. **灵活的数据模型**:Hive支持动态schema,允许数据模式随时间演进,便于处理不断变化的...
通过分区,我们可以将相关数据物理地组织在一起,从而减少查询时的数据扫描量。例如,假设我们有一个电商交易表,可以按照日期进行分区,这样查询特定日期的交易记录时,Hive只会扫描对应的分区,而不是整个表,大大...
Impala 是参照谷歌的新三篇论文(Caffeine、Pregel、Dremel)中的 Dremel 实现而来,其中旧三篇论文分别是(BigTable、GFS、MapReduce)分别对应我们即将学的 HBase 和已经学过的 HDFS 以及 MapReduce。 Impala 是...
4. **Hive Metastore**:对于Spark SQL,Hive Metastore提供了元数据存储,使得Spark可以访问Hive表和分区。 5. **Zookeeper**:协调Spark集群的各个组件,确保高可用性。 利用Docker Compose,我们可以轻松地将...
- **扩展性**:Hive构建在Hadoop之上,可以无缝地处理PB级别的数据。 - **集成性**:Hive与其他Hadoop生态系统工具如Pig、HBase等集成良好。 #### 六、朴素贝叶斯分类器的应用 **朴素贝叶斯分类器** 是基于...
此外,了解Hadoop的生态系统也非常重要,包括YARN(Yet Another Resource Negotiator)作为资源调度器,Hive提供SQL-like查询功能,Pig提供高级数据处理语言,以及Spark等更高效的数据处理框架。这些组件和工具与...
《福建师范大学精品大数据导论课程系列 (5.9.1)--4.4 一种基于Hadoop的数据仓库之三》 本课程聚焦于大数据处理技术,特别是以Hadoop为基础的数据仓库解决方案。Hadoop作为当前最流行的大数据处理框架,其分布式存储...
- **Hive**:数据仓库工具,支持SQL-like查询,简化了对Hadoop的数据分析。 - **Pig**:高级数据流语言和执行引擎,用于分析大规模数据集。 - **Oozie**:工作流调度系统,管理Hadoop作业的生命周期。 3. **...
3. **Column Family**(列族):逻辑上将相关的列分组在一起。 4. **Column**(列):存储具体的数据值。 5. **Timestamp**(时间戳):记录每次数据更新的时间,可用于版本控制。 #### 五、Region与分区策略 随着...