strict模式在下面三种情况下有限制:
(1) partition表需要加上分区裁剪
(2) order by 只有一个reduce,需要加上limit
(3) join时,如果只有一个reduce,笛卡尔积不支持。
补上几刀:
经试验hive 1.6严格模式开启之后,不支持一下两种查询
(1)in/not in子查询,使用left join 替换
(2)两个分区表关联,where 条件之后只能放主表的分区条件,不能将两个表的分区条件都放where之后
失败的:FROM table1 a LEFT JOIN table2 b on a.id=b.id WHERE b.dt = 20161026 and a.dt=20161026; 成功的:FROM table1 a LEFT JOIN table2 b on a.id=b.id and b.dt = 20161026 where a.dt=20161026;
-------------------------------------------------------------------------------------------------------------------------
hive提供了一个严格模式,可以防止用户执行那些可能产生意想不到的不好的效果的查询。即某些查询在严格
模式下无法执行。
1)带有分区的表的查询
如果在一个分区表执行hive,除非where语句中包含分区字段过滤条件来显示数据范围,否则不允许执行。换句话说,
就是用户不允许扫描所有的分区。进行这个限制的原因是,通常分区表都拥有非常大的数据集,而且数据增加迅速。
如果没有进行分区限制的查询可能会小号令人不可接受的巨大资源来处理这个表:
hive> SELECT DISTINCT(planner_id) FROM fracture_ins WHERE planner_id=5;
FAILED: Error in semantic analysis: No Partition Predicate Found for Alias "fracture_ins" Table "fracture_ins
如下这个语句在where语句中增加了一个分区过滤条件(也就是限制了表分区):
hive> SELECT DISTINCT(planner_id) FROM fracture_ins
> WHERE planner_id=5 AND hit_date=20120101;
... normal results ...
2)带有orderby的查询
对于使用了orderby的查询,要求必须有limit语句。因为orderby为了执行排序过程会讲所有的结果分发到同一个reducer中
进行处理,墙纸要求用户增加这个limit语句可以防止reducer额外执行很长一段时间:
hive> SELECT * FROM fracture_ins WHERE hit_date>2012 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 fracture_ins WHERE hit_date>2012 ORDER BY planner_id
> LIMIT 100000;
... normal results ...
3)限制笛卡尔积的查询
对关系型数据库非常了解的用户可能期望在执行join查询的时候不使用on语句而是使用where语句,这样关系数据库的执行
优化器就可以高效的将where语句转换成那个on语句。不行的是,hive不会执行这种优化,因此,如果表足够大,那么这个查询就会
出现不可控的情况:
hive> SELECT * FROM fracture_act JOIN fracture_ads
> WHERE fracture_act.planner_id = fracture_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 fracture_act JOIN fracture_ads
> ON (fracture_act.planner_id = fracture_ads.planner_id);
... normal results ...
相关推荐
2. **笛卡尔积**:在严格模式下,Hive 不允许笛卡尔积,可以通过添加 Join Key 或使用 MapJoin 避免。 3. **控制 Map 数**:合理设置 Map 数量,避免过多小文件导致的任务开销。 4. **JOIN**:优化 JOIN 操作,...
6. **启用MapReduce严格模式**:`hive.exec.mapreduce.strict.mode`开启后,Hive会拒绝一些可能导致性能下降或资源浪费的查询,如未指定分区的查询和无`LIMIT`的`ORDER BY`。 7. **单个Reducer处理多组聚合**:`...
24.Hive元数据、fetch task和严格模式的介绍 第3章:Sqoop Sqoop及用户行为分析案例 25.CDH版本框架的介绍 26. CDH版本框架的环境部署 27.Sqoop的介绍及其实现原理 28.Sqoop的安装部署及连接测试 29.Sqoop将MySQL...
` 设置动态分区模式为非严格模式,允许所有分区字段都使用动态分区。此设置提高了灵活性,但可能增加数据倾斜的风险。 - `set hive.exec.max.dynamic.partitions=100000;` 限制动态分区的最大数量,防止过多的动态...
Hive 有两种模式:非严格模式(nonstrict)和严格模式(strict)。在非严格模式下,允许跨分区表的完整扫描。而在严格模式下,如果查询涉及完整的分区表,查询会失败。这有助于避免不必要的全表扫描,确保资源的...
- 设置为非严格模式:`set hive.exec.dynamic.partition.mode=nonstrict;` - 启动动态分区:`set hive.exec.dynamic.partitioner=mode;` **注意**:动态分区通常用于插入数据时自动生成新的分区,这种方式更适用于...
2. **笛卡尔积**:在严格模式下,避免笛卡尔积,可利用MapJoin在Map阶段完成Join,或通过添加Join key规避。 3. **Map任务数量**:不是Map任务越多越好,过多的小文件会导致资源浪费,应调整文件大小和集群配置以...
Hive提供了不同的模式配置,包括严格模式和非严格模式,这些模式对于数据的完整性以及查询的准确性有不同影响。此外,Hive还支持JOIN操作,用于合并多个表中的记录,这在数据仓库操作中非常常见。 总体而言,Apache...
严格模式能确保更安全、更一致的查询执行,通过设置`hive.mapred.supports.subdirectories`和`hive.exec.scratchdir.cleanup`等相关属性,可以确保作业的正确性和数据清理。 **9.7 JVM重用** JVM重用能减少启动JVM...
10. **`.config("hive.exec.dynamic.partition.mode", "nonstrict")`**:设置动态分区模式为非严格模式,这意味着可以创建所有分区都为动态的新分区。 完成上述配置后,调用`getOrCreate()`方法获取或创建`...
与传统的关系型数据库不同,HBase没有严格的模式约束,支持动态添加列。 #### 1.2 Hive与HBase的主要区别 - **数据模型**:Hive采用类似SQL的数据模型,支持表和视图的概念;而HBase则采用了列族数据模型,更适合...
3. **大数据技术栈**:Hadoop、Spark、NoSQL数据库、数据仓库(如Hive和HBase)、流处理(如Kafka)以及数据挖掘工具(如Apache Mahout和TensorFlow)等是大数据处理的核心技术,它们共同构建了一个从数据采集、清洗...
文档还介绍了Hive CLI的基本用法,包括登录查询、查询文件方式和命令行模式。 HiveQL基本语法部分讲解了如何创建表、加载数据、进行分析查询以及删除表。这部分内容对使用Hive进行数据分析具有指导意义。最后,文档...
大数据应用测试经验总结 大数据应用测试与传统的Web系统测试有很大的差异,主要因为它涵盖了从数据采集、处理到应用展示的...在实际测试过程中,需要对每个环节进行严格的测试和验证,以保证大数据系统的稳定运行。
对于增量导出,Sqoop提供了`--update-mode allowinsert`模式,它可以将Hive中新增的或已更改的记录插入到目标表中,同时也会同步不一致的记录。这种方法适合在Hive表持续更新的情况下,保持目标表与Hive表的同步。在...
Linux系统采用严格的权限管理机制,确保数据安全。用户可以使用`chmod`命令来修改文件或目录的权限。 #### Linux常用命令 - `find /path -mtime -1`:查找最近一天新增的文件。 - `ls -l`:列出文件和目录的详细...
私有云保证了数据的安全性和隐私性,适合对数据保护有严格要求的企业或机构;社区云允许特定群体共享资源,提高效率;公有云则提供了广泛的资源共享,成本效益高,适合中小型企业;混合云结合了多种部署模式的优点,...
结构化数据是指严格遵循数据格式与长度规范的数据,半结构化数据是指非关系模型的、有基本固定结构模式的数据,非结构化数据是指没有固定模式的数据。 三、HDFS分布式文件系统 HDFS是Hadoop的分布式文件系统,基于...
HBase的分布式架构使其能够支持更大的数据总量,但同时也意味着其模式设计和参照完整性不如RDBMS严格。 **HBase架构设计** HBase的架构包括Master节点、RegionServer节点和Zookeeper。Master负责元数据管理、...
在SparkSQL中,DataFrame是一个分布式的、带标签的列集合,可以看作是关系型数据库中的表格,但没有严格的模式定义。DataFrame支持多种操作,包括选择、过滤、聚合、连接等,且这些操作在执行时会被优化为高效的执行...