实际应用中,hive里面的分区表和分桶表一般用于什么场景呢? 01 分区表的概念 当Hive表对应的数据量大、文件多时,为了避免查询时全表扫描数据,Hive支持根据用户指定的字段进行分区,分区的字段可以是日期、地域、种类等具有标识意义的字段。比如把一整年的数据根据月份划分12个月(12个分区),后续就可以查询指定月份分区的数据,尽可能避免了全表扫描查询。
分区表建表语法: 需要注意:分区字段不能是表中已经存在的字段,因为分区字段最终也会以虚拟字段的形式显示在表结构上。 分区表的本质: 外表上看起来分区表好像没多大变化,只不过多了一个分区字段。实际上在底层管理数据的方式发生了改变。这里直接去HDFS查看区别。 非分区表:t_all_hero
分区表:t_all_hero_part
分区的概念提供了一种将Hive表数据分离为多个文件/目录的方法。不同分区对应着不同的文件夹,同一分区的数据存储在同一个文件夹下。只需要根据分区值找到对应的文件夹,扫描本分区下的文件即可,避免全表数据扫描。 02 分桶表的概念 分桶表也叫做桶表,源自建表语法中bucket单词。是一种用于优化查询而设计的表类型。该功能可以让数据分解为若干个部分易于管理。 在分桶时,我们要指定根据哪个字段将数据分为几桶(几个部分)。默认规则是:Bucket number = hash_function(bucketing_column) mod num_buckets。 可以发现桶编号相同的数据会被分到同一个桶当中。hash_function取决于分桶字段bucketing_column的类型: 如果是int类型,hash_function(int) == int; 如果是其他类型,比如bigint,string或者复杂数据类型,hash_function比较棘手,将是从该类型派生的某个数字,比如hashcode值。 分桶表的语法 其中CLUSTERED BY (col_name)表示根据哪个字段进行分; INTO N BUCKETS表示分为几桶(也就是几个部分)。 需要注意的是,分桶的字段必须是表中已经存在的字段。 ——> hive分区表和分桶表 03 分区表的使用 分区表的使用重点在于: 一、建表时根据业务场景设置合适的分区字段。比如日期、地域、类别等; 二、查询的时候尽量先使用where进行分区过滤,查询指定分区的数据,避免全表扫描。 比如:查询英雄主要定位是射手并且最大生命大于6000的个数。使用分区表查询和使用非分区表进行查询,SQL如下: 分区表的注意事项 一、分区表不是建表的必要语法规则,是一种优化手段表,可选; 二、分区字段不能是表中已有的字段,不能重复; 三、分区字段是虚拟字段,其数据并不存储在底层的文件中; 四、分区字段值的确定来自于用户价值数据手动指定(静态分区)或者根据查询结果位置自动推断(动态分区) 五、Hive支持多重分区,也就是说在分区的基础上继续分区,划分更加细粒度 04 分桶表的使用好处 和非分桶表相比,分桶表的使用好处有以下几点: 1、基于分桶字段查询时,减少全表扫描 2、JOIN时可以提高MR程序效率,减少笛卡尔积数量 对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了分桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。 3、分桶表数据进行抽样 当数据量特别大时,对全体数据进行处理存在困难时,抽样就显得尤其重要了。抽样可以从被抽取的数据中估计和推断出整体的特性,是科学实验、质量检验、社会调查普遍采用的一种经济有效的工作和研究方法。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/37062.html