当在hive中写下浮点数(例如:0.2)

hive会把浮点数(0.2)存储为double类型

但是系统中并不能精准表示0.2这个浮点数

正确的浮点数表示

float   0.2 —> 0.2000000

double 0.2 —> 0.200000000000

但是系统中表示为

float 0.2 —> 0.2000001

double 0.2 —> 0.200000000001

如果我们在hive中把 float(0.2)转化成为double(0.2)

实际上是 0.2000001 —> 0.200000100000

并不是 0.2000001 —> 0.200000000001

所以

float(0.2)转化的double(0.2) 是大于直接存储的double(0.2)

float类型和double类型相比较,hive中是自动把范围小的类型转化成为范围大的类型的,也就是float转化为doule

导致float转化成为的double类型的数字大于比较的double数字

所以我们在使用浮点数比较的时候,不要用hive的自动扩充精度来比较,尽量使用较小精度来比较.

也就是float和double比较的时候,把double cast( as float)才能显示正确结果.

示例:

TABLE table1

id (INT) ,taxes(float)

1              0.2

2             0.2

3             0.3

我们要找出大于0.2的id有哪些

select id,taxes from table1 where taxes > 0.2;

结果显示:

1  0.2

2  0.2

3  0.3

为什么会把0.2本身也显示呢?

因为hive把0.2存储为double类型,

0.2 —> 0.200000000001

而taxes为float类型

id (INT) ,taxes(float)

1              0.2          —> 0.2000001

2             0.2          —> 0.2000001

3             0.3         —>  0.3000001

当我们用float类型和double类型比较的时候

hive自动将taxes转化为double类型

id (INT) ,taxes(float)  —> taxes(float_to_double)

1              0.2        —> 0.200000100000

2             0.2        —> 0.200000100000

3             0.3        —> 0.300000100000

所以实际上,float(0.2) —> float_to_double(0.2) > double(0.2)

怎么才能正确显示呢?

不使用hive的自动扩充精度机制,直接把double减少精度

也就是double —> float,

select id,taxes from table1 where taxes > cast(0.2 as float);

结果:

3   0.3

【hive】关于浮点数比较的问题的更多相关文章

  1. Hive函数大全

    一.关系运算: 1. 等值比较: = 语法:A=B 操作类型:所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE:否则为FALSE 举例: hive> select 1 from l ...

  2. Spark入门实战系列--5.Hive(上)--Hive介绍及部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...

  3. Hive介绍、安装(转)

    1.Hive介绍 1.1 Hive介绍 Hive是一个基于Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据.它是Facebook 2008年8月开源的一个数据仓库框架,提供了类似于SQL语 ...

  4. hive函数参考手册

    hive函数参考手册 原文见:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 1.内置运算符1.1关系运算符 运 ...

  5. hive[3] 数据类型和文件格式

    Hive 支持关系型数据库中的大多数据基本数据类型,同时也支持3种集合类型:   3.1 Hive 的基本数据类型 支持多种不同他度的整形和浮点型数据类型,具体如下(全都是保留字): tinyint ...

  6. 【转】hive简介安装 配置常见问题和例子

    原文来自:  http://blog.csdn.net/zhumin726/article/details/8027802 1 HIVE概述 Hive是基于Hadoop的一个数据仓库工具,可以将结构化 ...

  7. 【转】 hive简介,安装 配置常见问题和例子

    原文来自:  http://blog.csdn.net/zhumin726/article/details/8027802 1 HIVE概述 Hive是基于Hadoop的一个数据仓库工具,可以将结构化 ...

  8. 大数据时代的技术hive:hive的数据类型和数据模型

    在上篇文章里,我列举了一个简单的hive操作实例,创建了一张表test,并且向这张表加载了数据,这些操作和关系数据库操作类似,我们常把hive和关系数据库进行比较,也正是因为hive很多知识点和关系数 ...

  9. HIVE编程指南之HiveQL的学习笔记1

    // HiveQLa) 数据定义语言1 数据库表的一个目录或命名空间,如果用户没有指定数据库的话,那么将会使用默认的数据库default-----创建数据库CREATE DATABASE guoyon ...

随机推荐

  1. PKU 2559 Largest Rectangle in a Histogram(单调栈)

    题目大意:原题链接 一排紧密相连的矩形,求能构成的最大矩形面积. 为了防止栈为空,所以提前加入元素(-1,0) #include<cstdio> #include<stack> ...

  2. git 常用命令行操作

    git常用命令行操作: 点击 git bash 进入到命令行: git clone https://github.com/wlz1244/qingoo.git   //下载一个master分支代码 g ...

  3. 论文笔记:IRGAN——A Minimax Game for Unifying Generative and Discriminative Information

    2017 SIGIR 简单介绍 IRGAN将GAN用在信息检索(Information Retrieval)领域,通过GAN的思想将生成检索模型和判别检索模型统一起来,对于生成器采用了基于策略梯度的强 ...

  4. 前端隐藏Ios及安卓滚动条

    1.方法不通用 // .scroll_list::-webkit-scrollbar { display:none } .scroll_list::-webkit-scrollbar-track { ...

  5. 怎么解决teamviewer检测商业用途无法使用的问题

    https://jingyan.baidu.com/article/d5c4b52be51162da560dc517.html

  6. hadoop HA+kerberos HA集群搭建

    IP.主机名规划 hadoop集群规划: hostname IP hadoop 备注 hadoop1 110.185.225.158 NameNode,ResourceManager,DFSZKFai ...

  7. 20145324 Java实验五

    1.运行教材上TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代码,一人加密后通过TCP发送: 注:加密使用AES或者DES/AES或 ...

  8. 20145324 《Java程序设计》第8周学习总结

    20145324 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 1.NIO使用频道来衔接数据节点,可以设定缓冲区容量,在缓冲区中对感兴趣的数据区块进行标记,提供clear ...

  9. 【读书笔记】《深入浅出nodejs》第五章 内存控制

    海量请求+长时间运行 -> 内存控制 -> 一切资源高效循环利用 1. V8的垃圾回收机制与内存限制 在Node中通过JavaScript使用内存时,只能使用部分内存(64位系统下约1.4 ...

  10. Python多版本共存管理工具之pyenv

    目录 Table of Contents 1. 安装pyenv 2. 安装Python 3.0 使用python 参考 Table of Contents 经常遇到这样的情况: 系统自带的Python ...