如何通过开启inceptor server的DEBUG日志查看range分区是否成功生效

  原理
内容纲要

概要描述


本文主要介绍,如何通过开启inceptor server的DEBUG日志查看range分区是否成功生效。一般来说集群不建议开启DEBUG日志级别,会造成hive-server2.log日志过大,仅供学习参考。

众所周知,分区表设计 Hive 分区是提高较大表的查询性能的最有效方法之一。具有分区过滤的查询将仅加载来自指定分区(子目录)的数据,因此它的执行速度比通过非分区字段过滤的普通查询快得多。
另外,分区应该是一个低基数属性,以避免非常多的分区子目录的开销。

以下是一些常用作分区键的属性:

  • 按日期和时间分区:使用日期和时间(如年,月和日(甚至小时))作为数据与日期/时间列关联时的分区键,例如as load_date,business_date,run_date等
  • 按位置分区:当数据与位置相关时,使用国家,地区,州和城市作为分区键
  • 按业务逻辑划分分区:使用部门,销售区域,应用程序,客户等作为分区键

详细说明


  • 环境准备:TDH6.0.2

1. 创建范围分区表

>DROP TABLE IF EXISTS people_torc_partition_5_buckets;
--指定borndate为分区键,id为分桶键,6个分区,每个分区3个分桶
>CREATE  TABLE people_torc_partition_5_buckets(
  name string DEFAULT NULL, 
  sex string DEFAULT NULL, 
  nation string DEFAULT NULL, 
  id string DEFAULT NULL, 
  --borndate string DEFAULT NULL, 
  phonenumber string DEFAULT NULL, 
  email string DEFAULT NULL, 
  homeaddress string DEFAULT NULL
)
PARTITIONED BY RANGE (borndate DATE) (
PARTITION before1990 VALUES LESS THAN ('1990-12-31'),
PARTITION before1995 VALUES LESS THAN ('1995-12-31'),
PARTITION before2000 VALUES LESS THAN ('2000-12-31'),
PARTITION before2005 VALUES LESS THAN ('2005-12-31'),
PARTITION before2010 VALUES LESS THAN ('2010-12-31'),
PARTITION beforemax VALUES LESS THAN (MAXVALUE)
)
clustered by (id) into 3 BUCKETS STORED AS ORC_TRANSACTION;

2. 向范围分区插入数据

--其实测试范围分区是否生效不插入数据也是一样的效果
--注意分区键要放在最后
> INSERT INTO people_torc_partition_5_buckets SELECT name,sex,nation,id,phonenumber,email,homeaddress,borndate FROM people_torc_1000w_5_buckets;

3. 将hive.log4j的print level设置为DEBUG模式

  • 参考KB链接:如何调整hive日志级别为DEBUG模式

4. 打开参数开关

  • SET hive.rpp.show.results = TRUE;

5. 使用过滤操作查找仅属于部分分区的记录

SELECT * FROM people_torc_partition_5_buckets WHERE borndate <'2009-12-31'

6. 在hive-server2.log日志中查找after range partition pruner的记录

可以看到根据borndate字段过滤时间小于2009-12-31的,对应该表的6个分区,只需要查询除beforemax分区以外的5个分区,所以日志里面显示after range partition pruner 5,5小于6,代表分区成功

file

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。