精华内容
下载资源
问答
  • 踩过数据仓库hive的坑:hive设置严格模式 hive提供了一个严格模式,可以防止用户执行那些可能产生意想不到的不好的效果的查询,也可以很好的防止数据倾斜。即某些查询在严格 模式下无法执行。通过设置hive.mapred....

    踩过数据仓库hive的坑:hive设置严格模式

    一个报错引发的雷!!!
    在这里插入图片描述
    hive提供了一个严格模式,可以防止用户执行那些可能产生意想不到的不好的效果的查询,也可以很好的防止数据倾斜。即某些查询在严格模式下无法执行。通过设置hive.mapred.mode的值为strict,可禁止以下3种类型的查询。

    1)带有分区的表的查询
    如果在一个分区表执行hive,除非where语句中包含分区字段过滤条件来显示数据范围,否则不允许执行。换句话说,
    就是用户不允许扫描所有的分区。进行这个限制的原因是,通常分区表都拥有非常大的数据集,而且数据增加迅速。

    如果没有进行分区限制的查询可能会消耗令人不可接受的巨大资源来处理这个表:

    hive> SELECT DISTINCT(planner_id) FROM fans WHERE planner_id=10;
    FAILED: Error in semantic analysis: No Partition Predicate Found for Alias "fans" Table "fracture_ins
    

    如下这个语句在where语句中增加了一个分区过滤条件(也就是限制了表分区):

    hive> SELECT DISTINCT(planner_id) FROM fans WHERE planner_id=5 AND hit_date=20200606;
    
    

    2)带有orderby的查询
    对于使用了orderby的查询,要求必须有limit语句。因为orderby为了执行排序过程会讲所有的结果分发到同一个reducer中

    进行处理,强烈要求用户增加这个limit语句可以防止reducer额外执行很长一段时间:

    hive> SELECT * FROM fans WHERE hit_date>2020 ORDER BY planner_id;
    FAILED: Error in semantic analysis: line 1:56 In strict mode,
    limit must be specified if ORDER BY is present planner_id
    

    只需要增加limit语句就可以解决这个问题:

    hive> SELECT * FROM fans WHERE hit_date>2020 ORDER BY planner_id LIMIT 100000;
    

    3)限制笛卡尔积的查询
    对关系型数据库非常了解的用户可能期望在执行join查询的时候不使用on语句而是使用where语句,这样关系数据库的执行

    优化器就可以高效的将where语句转换成那个on语句。不幸的是,hive不会执行这种优化,因此,如果表足够大,那么这个查询就会出现不可控的情况:

    hive> SELECT * FROM fans_act JOIN fans_ads WHERE fans_act.planner_id = fans_ads.planner_id;
    FAILED: Error in semantic analysis: In strict mode, cartesian product
    is not allowed. If you really want to perform the operation,
    +set hive.mapred.mode=nonstrict+
    

    下面这个才是正确的使用join和on语句的查询:

    hive> SELECT * FROM fans_act JOIN fans_ads ON (fans_act.planner_id = fans_ads.planner_id);
    

    开启后影响总结:
    1、对分区表查询必须带分区条件,否则会查询失败
    2、带orderby的查询,必须使用limit限制查询数据条数,否则会查询失败,因为执行order by的时候,已经将所有的数据放到了一个reduce中了。
    3、不能进行笛卡尔积的查询,在关系型数据库中,可以使用where充当on,但是在hive数据仓库中,必须使用on。
    4、查询条件里面字段类型赋值时必须一致,比如日期分区dt字段类型为字符串,那么分区条件必须指定为dt=‘20200606’,而不能用dt=20200606。
    5、在生成动态分区时,会失败,需要单独设置为非严格模式,hive.mapred.mode=nostrict;
    6.设置为非严格模式的情况慎重使用,甚至不建议使用。

    展开全文
  • 通过设置参数hive.mapred.mode来设置是否开启严格模式。目前参数值有两个:strict(严格模式)和nostrict(非严格模式,默认)。 通过开启严格模式,主要是为了禁止某些查询(这些查询可能造成意想不到的坏的结果)...

    7. Hive的严格模式和非严格模式

    通过设置参数hive.mapred.mode来设置是否开启严格模式。目前参数值有两个:strict(严格模式)和nostrict(非严格模式,默认)。

    通过开启严格模式,主要是为了禁止某些查询(这些查询可能造成意想不到的坏的结果),目前主要禁止3种类型的查询:

    1)分区表查询

    在查询一个分区表时,必须在where语句后指定分区字段,否则不允许执行。

    因为在查询分区表时,如果不指定分区查询,会进行全表扫描。而分区表通常有非常大的数据量,全表扫描非常消耗资源。

    2)order by 查询

    order by语句必须带有limit 语句,否则不允许执行。

    因为order by会进行全局排序,这个过程会将处理的结果分配到一个reduce中进行处理,处理时间长且影响性能。

    3)笛卡尔积查询

    数据量非常大时,笛卡尔积查询会出现不可控的情况,因此严格模式下也不允许执行。

    在开启严格模式下,进行上述三种不符合要求的查询,通常会报类似FAILED: Error in semantic analysis: In strict mode, XXX is not allowed. If you really want to perform the operation,+set hive.mapred.mode=nonstrict+

    展开全文
  • 关于hive严格模式

    2020-03-20 22:45:35
    关于hive严格模式 文章目录关于hive严格模式带有分区的表查询带有order by的查询限制笛卡儿积的查询 定义:防止用户执行那些可能产生意想不到的不好的效果的查询。即某些查询在严格模式下无法执行。 通过设置...

    关于hive的严格模式

    定义:防止用户执行那些可能产生意想不到的不好的效果的查询。即某些查询在严格模式下无法执行。

    通过设置hive.mapred.mode = strict ,可以禁止三种类型的查询:

    set hive.mapred.mode=strict;	
    
    • 带有分区的表查询
    • 带有order by的表查询
    • 限制笛卡尔积的查询

    带有分区的表查询

    在执行分区表的时候,如果where语句中不包含分区字段过滤条件来限制数据范围,就不允许查询。换句话就是,不允许用户扫描所有的分区。进行这个限制的原因是:通常分区表都拥有非常大的数据集,而且数据增加迅速,如果没有进行分区限制的查询,可能会消耗大量资源来处理这个表。
    在这里插入图片描述

    带有order by的查询

    使用order by,必要要有limit语句,因为全排序会将结果分发到一个reduce处理,可能会很耗费时间
    在这里插入图片描述

    限制笛卡儿积的查询

    进行表连接的的时候不写关联条件或关联条件失效会导致笛卡尔积
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • Hive严格模式

    2019-09-28 15:45:37
    用户可以通过 sethive.mapred.mode=strict 来设置严格模式,改成unstrict则为飞严格模式。 在严格模式下,用户在运行如下query的时候会报错。 1. 分区表的查询没有使用分区字段来限制。 select * from mart_...

    在hive里面可以通过严格模式防止用户执行那些可能产生意想不到的不好的效果的查询,从而保护hive的集群。

    用户可以通过 set hive.mapred.mode=strict 来设置严格模式,改成unstrict则为飞严格模式。  在严格模式下,用户在运行如下query的时候会报错。

    1. 分区表的查询没有使用分区字段来限制。

    select * from mart_catering.dim_shopca_reduction_ss limit 1000;

    得到的错误是

    CliDriver update main thread name to 4105daa5-e5a7-49d6-8e02-52c9184732f9
    16/08/29 11:20:54 INFO CliDriver: CliDriver update main thread name to 4105daa5-e5a7-49d6-8e02-52c9184732f9
    
    Logging initialized using configuration in jar:file:/opt/meituan/versions/mthive-0.13-package/lib/hive-common-0.13.1.jar!/hive-log4j.properties
    FAILED: SemanticException [Error 10041]: No partition predicate found for Alias 'dim_shopca_reduction_ss' Table 'dim_shopca_reduction_ss'
    query fails

     

    2. 使用了笛卡尔积

    当用户写代码将表的别名写错的时候会引起笛卡尔积,例如

    SELECT *
    FROM origindb.promotion__campaign c
    JOIN origindb.promotion__campaignex ce
    ON c.id = c.id
    limit 1000

    得到的错误信息

    CliDriver update main thread name to 9a962abc-afea-470f-9738-dceda72ff1fd
    16/08/29 11:38:23 INFO CliDriver: CliDriver update main thread name to 9a962abc-afea-470f-9738-dceda72ff1fd
    
    Logging initialized using configuration in jar:file:/opt/meituan/versions/mthive-0.13-package/lib/hive-common-0.13.1.jar!/hive-log4j.properties
    FAILED: SemanticException [Error 10052]: In strict mode, cartesian product is not allowed. If you really want to perform the operation, set hive.mapred.mode=nonstrict
    query fails

    3. order by 的时候没有使用limit

    SELECT *
    FROM origindb.promotion__campaign 
    order by id

    得到的错误信息

    CliDriver update main thread name to 5efafee6-1ce8-4985-9b98-c8f5ff88bccd
    16/08/29 11:40:45 INFO CliDriver: CliDriver update main thread name to 5efafee6-1ce8-4985-9b98-c8f5ff88bccd
    
    Logging initialized using configuration in jar:file:/opt/meituan/versions/mthive-0.13-package/lib/hive-common-0.13.1.jar!/hive-log4j.properties
    FAILED: SemanticException 3:9 In strict mode, if ORDER BY is specified, LIMIT must also be specified. Error encountered near token 'id'
    query fails

    当使用的limit的时候错误消除。

     

    转载于:https://www.cnblogs.com/benchen/p/5817420.html

    展开全文
  • Hive 严格模式与非严格模式 hive提供了一个严格模式,可以防止用户执行那些可能产生意想不到的不好的效果的查询。即某些查询在严格模式下无法执行。通过设置hive.mapred.mode的值为strict,可以禁止3中类型的查询。 ...
  • hive严格模式

    2018-11-25 20:52:45
    用户可以通过 set hive.mapred.mode=strict 来设置严格模式,改成unstrict则为飞严格模式。 在严格模式下,用户在运行如下query的时候会报错。 1. 分区表的查询没有使用分区字段来限制。 select * from mart_...
  • hive严格模式和非严格模式的区别

    千次阅读 2018-09-07 23:56:56
    hive严格模式   hive提供了一个严格模式,可以防止用户执行那些可能产生意想不到的不好的效果的查询。即某些查询在严格 模式下无法执行。通过设置hive.mapred.mode的值为strict,可以禁止3中类型的查询。 1)带有...
  • hive开启严格模式

    千次阅读 2016-05-10 12:52:28
    hive提供了一个严格模式,可以防止用户执行那些可能产生意想不到的不好的效果的查询。即某些查询在严格 模式下无法执行。通过设置hive.mapred.mode的值为strict,可禁止3中类型的查询。 1)带有分区的表的查询 ...
  • hive 严格模式

    2019-07-18 17:44:28
    hive 严格模式的情况下,left join或join的on条件必须包含分区字段,记录一下 下面附上hive严格模式说明 【转】 1. hive严格模式 hive提供了一个严格模式,可以防止用户执行那些可能产生意想不到的不好的效果的...
  • 【转】Hive严格模式

    2018-08-16 23:08:29
    用户可以通过 set hive.mapred.mode=strict 来设置严格模式,改成unstrict则为飞严格模式。 在严格模式下,用户在运行如下query的时候会报错。 1. 分区表的查询没有使用分区字段来限制。 select * from strategy...
  • Hive严格模式

    2017-10-08 22:43:03
    Hive严格模式 Hive提供了一个严格模式,可以防止用户执行...通过如下语句设置严格模式: [java] view plain copy hive> set hive.mapred.mode=strict;  设置为严格模式后,可以禁止3种类型的查询:
  • hive严格模式

    2019-06-16 12:46:00
    说真的,这个模式在我做sql开发的岁月里,从未用到过。用的都是动态分区非严格模式。 我的好友东岳同学在车上问我。确实问到了我 。体现出了我基本功不扎实的...通过如下语句设置严格模式hive> set hiv...
  • Hive 严格模式

    2019-11-28 21:43:15
    通过设置属性hive.mapred.mode值为默认是非严格模式nonstrict 。 开启严格模式需要修改hive.mapred.mode值为strict,开启严格模式可以禁止3种类型的查询。 <property> <name>hive.mapred.mode</name...
  • HIVE严格模式

    2017-06-09 15:33:43
    一、启动nohup hive --service hiveserver2 --hiveconf hive.mapred.mode=strict & 二、作用严格模式,可以防止用户执行那些可能产生意想不到的不好的效果的查询。即某些查询在严格 模式下无法执行。通过设置hive....
  • hive严格模式strict

    2019-03-04 16:36:23
    hive严格模式 hive提供了一个严格模式,可以防止用户执行那些可能产生意想不到的不好的效果的查询。即某些查询在严格 模式下无法执行。通过设置hive.mapred.mode的值为strict,可以禁止3中类型的查询。 1)带有...
  • 1.Hive严格模式 Hive提供了一个严格模式,可以防止用户执行那些产生意想不到的不好的影响的查询。 想想看在那么大的数据量的前提下,如果我们在分区上表上使用查找所有,或是使用了笛卡尔积查询数据等等不良情况...
  • hive严格模式 :In strict mode hive提供了一个严格模式,可以防止用户执行那些可能产生意想不到的不好的效果的查询。即某些查询在严格 模式下无法执行。通过设置hive.mapred.mode的值为strict,可以禁止以下3种...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 133
精华内容 53
关键字:

hive设置严格模式