7.5、Hive 分区表和分桶表 一、分区表 1.1 概念 Hive 中的表对应为 HDFS 上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大。分区为 HDFS 上表目录的子目录,数据按照分区存储在子目录中。如果查询的 字句的中包含分区条件,则直接从该分区去查找,而不是扫描整个表目录,合理的分区设计可以极大提高查询速度和性能。 这里说明一下分区表并 Hive 独有的概念,实际上这个概念非常常见。比如在我们常用的 Oracle 数据库中,当表中的数据量不断增大,查询数据的速度就会下降,这时也可以对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据存放到多个表空间(物理文件上),这样查询数据时,就不必要每次都扫描整张表,从而提升查询性能。 1.2 使用场景 通常,在管理大规模数据集的时候都需要进行分区,比如将日志文件按天进行分区,从而保证数据细粒度的划分,使得查询性能得到提升。 1.3 创建分区表 在 Hive 中可以使用 子句创建分区表。表可以包含一个或多个分区列,程序会为分区列中的每个不同值组合创建单独的数据目录。下面的我们创建一张雇员表作为测试: 1.4 加载数据到动态分区 要设置动态插入操作,必须设置动态分区相关参数动态分区参数: 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 默认值: 整个MR Job中,最大可以创建多少个HDFS文件。 一般默认值足够了,除非你的数据量非常大,需要创建的文件数大于,可根据实际情况加以调整。 1.5 查看分区目录 这时候我们直接查看表目录,可以看到表目录下存在两个子目录,分别是 和 ,这就是分区目录,分区目录下才是我们加载的数据文件。 这时候当你的查询语句的 包含 ,则就去对应的分区目录下进行查找,而不用扫描全表。



2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/69555.html