Hive 强制指定分区键

简介:
最近在做Hive的查询平台,需要考虑的比较多,其中一点就是对于分区表要限制用户的查询量,主要是要用户必须指定分区键.一开始的想法步子比较大就是做HQL解析,不过由于项目周期压力暂缓,这时发现了一个参数:hive.partition.pruninghttps://issues.apache.org/jira/browse/HADOOP-4345)不过不能高兴的太早,CDH4.2.0Hive并没有merge进来,不过还好有另外一个参数:hive.mapred.mode
mode=strict时做什么项目官方文档别没看到详细的说明,看代码吧后结论如下:
最后使用这个参数,并对异常捕获进行用户提示.
1.不准对分区表不加分区键查询

if (tab.isPartitioned()) {

if ("strict".equalsIgnoreCase(HiveConf.getVar(conf,

HiveConf.ConfVars.HIVEMAPREDMODE))){

if (!hasColumnExpr(prunerExpr)){

thrownewSemanticException(ErrorMsg.NO_PARTITION_PREDICATE

.getMsg("for Alias \"" + alias + "\" Table \""

+ tab.getTableName() + "\""));

}

    }
2.不准笛卡尔积

if (reduceKeys.size() ==0) {

numReds = 1;

if (conf.getVar(HiveConf.ConfVars.HIVEMAPREDMODE).equalsIgnoreCase(

"strict")){

thrownewSemanticException(ErrorMsg.NO_CARTESIAN_PRODUCT.getMsg());

}

  }
3.不准order by 不加limit

if (sortExprs == null) {

sortExprs =qb.getParseInfo().getOrderByForClause(dest);

if (sortExprs != null) {

assert numReducers == 1;

Integerlimit = qb.getParseInfo().getDestLimit(dest);

if (conf.getVar(HiveConf.ConfVars.HIVEMAPREDMODE).equalsIgnoreCase(

"strict")

&& limit == null) {

thrownew SemanticException(generateErrorMessage(sortExprs,

ErrorMsg.NO_LIMIT_WITH_ORDERBY.getMsg()));

}

}

  }

本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1302067,如需转载请自行联系原作者


相关文章
|
SQL HIVE
Hive分区+根据分区查询
Hive分区+根据分区查询
|
SQL 存储 HIVE
hive分区与分桶
hive分区与分桶
451 1
|
SQL DataWorks 监控
DataWorks产品使用合集之同步数据到Hive时,如何使用业务字段作为分区键
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之在进行Hive分区truncate操作时遇到权限不足,怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
265 0
|
SQL 存储 HIVE
Hive中的动态分区是什么?请解释其作用和使用场景。
Hive中的动态分区是什么?请解释其作用和使用场景。
327 0
|
SQL 分布式计算 大数据
Hive动态分区
Hive动态分区
422 0
|
SQL 关系型数据库 MySQL
HIVE HDFS 同步到MYSQL里,在HIVE里存为目录的分区键的如何同步呢?
请教下 ,HIVE HDFS 同步到MYSQL的时候,如果在源端HIVE里是分区表,分区字段要这么同步到目标端MYSQL呢
243 1
HIVE HDFS 同步到MYSQL里,在HIVE里存为目录的分区键的如何同步呢?
|
SQL 存储 分布式计算
大数据技术基础实验十一:Hive实验——Hive分区
大数据基础实验十一,学习有关Hive分区的相关知识。
501 0
大数据技术基础实验十一:Hive实验——Hive分区
|
SQL 存储 大数据
大数据开发笔记(四):Hive分区详解
在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。
435 0
大数据开发笔记(四):Hive分区详解
|
SQL 存储 数据库
hive 删除某个分区中部分数据
hive 删除某个分区中部分数据