1 数据准备

  1. create table stocks(id int, date string,price string, company string);
  2.  
  3. insert into table stocks values
  4. (1,'2010-01-04','214.01','aapl'),
  5. (2,'2010-01-05','214.38','aapl'),
  6. (3,'2010-01-06','210.97','aapl'),
  7. (4,'2010-01-07','210.58','aapl'),
  8. (5,'2010-01-08','211.58','aapl'),
  9. (6,'2010-01-11','210.11','aapl'),
  10. (7,'2010-01-04','132.45','ibm'),
  11. (8,'2010-01-05','138.85','ibm'),
  12. (9,'2010-01-06','129.55','ibm'),
  13. (10,'2010-01-07','130.0','ibm'),
  14. (11,'2010-01-08','130.85','ibm'),
  15. (12,'2006-01-11','121.48','ibm'),
  16. (13,'2007-01-11','120.48','ibm'),
  17. (14,'2008-01-11','123.48','ibm');

2 测试等值连接,通过表的自连接

  1. select a.ymd, a.price, b.price
  2. from
  3. stocks a
  4. inner join
  5. stocks b
  6. on a.ymd = b.ymd
  7. where
  8. a.company = 'aapl' and b.company = 'ibm';

  结果为:

  1. 2010-01-04 214.01 132.45
  2. 2010-01-05 214.38 138.85
  3. 2010-01-06 210.97 129.55
  4. 2010-01-07 210.58 130.0
  5. 2010-01-08 211.58 130.85

3 测试非等值连接,通过表的自连接

  1. select a.ymd,b.ymd, a.price, b.price
  2. from
  3. stocks a
  4. inner join
  5. stocks b
  6. on a.ymd <= b.ymd
  7. where a.company = 'aapl' and b.company = 'ibm'
  8. order by a.ymd asc;

报错如下:

  1. FAILED: SemanticException Cartesian products are disabled for safety reasons.
  2. If you know what you are doing, please sethive.strict.checks.cartesian.product to false and that hive.mapred.mode is not set to 'strict' to proceed.
  3. Note that if you may get errors or incorrect results if you make a mistake while using some of the unsafe features.
  4. 当前hive运行在strict模式,该模式下:
  5. - 不能进行表的笛卡尔积连接
  6. - order by语句必须带有limitorder by在一个reducer中执行,容易成为性能瓶颈
  7. - 带分区表的查询必须使用分区字段,在where条件中  

解决方式:

  1. set hive.mapred.mode=nonstrict;

之后,再次执行非等值连接即可得到结果:

  1. aapl时间 ibm时间 aapl价格 ibm价格

    2010-01-04 2010-01-04 214.01 132.45
  2. 2010-01-04 2010-01-05 214.01 138.85
  3. 2010-01-05 2010-01-05 214.38 138.85
  4. 2010-01-04 2010-01-06 214.01 129.55
  5. 2010-01-05 2010-01-06 214.38 129.55
  6. 2010-01-06 2010-01-06 210.97 129.55
  7. 2010-01-04 2010-01-07 214.01 130.0
  8. 2010-01-05 2010-01-07 214.38 130.0
  9. 2010-01-06 2010-01-07 210.97 130.0
  10. 2010-01-07 2010-01-07 210.58 130.0
  11. 2010-01-04 2010-01-08 214.01 130.85
  12. 2010-01-05 2010-01-08 214.38 130.85
  13. 2010-01-06 2010-01-08 210.97 130.85
  14. 2010-01-07 2010-01-08 210.58 130.85
  15. 2010-01-08 2010-01-08 211.58 130.85

hive 非等值连接, 设置hive为nonstrict模式的更多相关文章

  1. hive 动态分区数设置

    当对hive分区未做设置时,报错如下: Caused by: org.apache.hadoop.hive.ql.metadata.HiveFatalException: [Error 20004]: ...

  2. 【配置】检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。

      ×   检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为[经典]模式). 我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 5 ...

  3. hive sql常用整理-hive引擎设置

    遇到个情况,跑hive级联insert数据报错,可以尝试换个hive计算引擎 hive遇到FAILED: Execution Error, return code 2 from org.apache. ...

  4. Hive教程之metastore的三种模式

    Hive中metastore(元数据存储)的三种方式: 内嵌Derby方式 Local方式 Remote方式 [一].内嵌Derby方式 这个是Hive默认的启动模式,一般用于单元测试,这种存储方式有 ...

  5. 【转】检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。

    检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为[经典]模式). 我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 ...

  6. linux安装卸载MySQL以及密码设置+Hive测试

    linux系统卸载MYSQL 1,先通过yum方式卸载mysql及相关组件 命令:yum remove mysql* 2.通过命令:rpm -qa|grep -i mysql 查找系统的有关于mysq ...

  7. 【Hive学习之八】Hive 调优【重要】

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 ...

  8. Hive(十)Hive性能调优总结

    一.Fetch抓取 1.理论分析 Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算.例如:SELECT * FROM employees;在这种情况下,Hive可以简单 ...

  9. Hive QL——深入浅出学Hive

    第一部分:DDL DDL •建表 •删除表 •修改表结构 •创建/删除视图 •创建数据库 •显示命令 建表 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_ ...

随机推荐

  1. ,vue-router使用心得

      今天周末,趁着没事,自学了一下vue-router,对于vue的路由跳转,目前我遇到了router-link和this.$router.push(或者this.$router.replace)这种 ...

  2. js的关于for的语句

    JavaScript for...in 语句 for...in 语句用于对数组或者对象的属性进行循环操作. for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作. ...

  3. Oralce数据库的优化

    Oralce数据库的优化(面试必问) (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 ...

  4. Floyd判断环算法总结

    Floyd判断环算法 全名Floyd’s cycle detection Algorithm, 又叫龟兔赛跑算法(Floyd's Tortoise and Hare),常用于链表.数组转化成链表的题目 ...

  5. 凯撒密码移位python

    #!/usr/bin/python'''凯撒密码'''a="gmbhqwertghjkcvbzn"s=[""]*len(a)for j in range(26) ...

  6. spring cloud 服务A调用服务B自定义token消失,记录

    后端:spring cloud 前端:vue 场景:前端ajax请求,包装自定义请求头token到后台做验证,首先调用A服务,A服务通过Feign调用B服务发现自定义token没有传到B服务去; 原因 ...

  7. 1.2 SQL运算与控制程序执行流程

    列出需要注意和学习的运算 1.取余 2.begin....end:中间包含两条或两条以上的SQL语句 3.case:进行多重选择,免于写if   then的嵌套循环.  通配符:(实现模糊查询) %: ...

  8. 文件6. 查找替换.txt文本文件中的内容

    servlet实现对文本文件的查找替换 .jsp界面 <form> <table> <tr> <td>选择文本文件:</td> <td ...

  9. 18.Canny边缘检测

    Canny边缘检测算法以Canny的名字命名,其中Canny的目标是找到一个最优的边缘检测算法,其有三种衡量标准: 低错误率:标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报 高定位性:标识出 ...

  10. web.1

    <!DOCTYPE html><html><head><meta charset="utf-8"> <title>毛哥调 ...