当前位置: 首页 > news >正文

Hive decimal类型详解

Hive 中的 DECIMAL 类型基于 Java 的 BigDecimal,它用于在 Java 中表示不可变的任意精度十进制数。 所有常规数字运算(例如 +、-、*、/)和相关的 UDF(例如 Floor、Ceil、Round 等)都处理 decimal 类型。 可以像处理其他数字类型一样进行 decimal 类型的转换。 decimal 类型的持久化格式同时支持科学和非科学记数法。 因此,无论是4.004E+3(科学记数法)或 4004(非科学记数法)或两者的组合,都可以使用 DECIMAL。

  • Hive 0.11 和 0.12,DECIMAL 类型具有固定的精度(precision),限制为 38 位。
  • 从 Hive 0.13 开始,用户可以使用 DECIMAL(precision, scale) 语法创建指定比例和精度的 DECIMAL 数据类型。 如果未指定scale,则默认为 0(无小数位)。 如果未指定precision,则默认为 10。
CREATE TABLE foo (a DECIMAL, -- Defaults to decimal(10,0)b DECIMAL(9, 7)
)

1. 使用误区(补充)

decimal(10,2) 表示精度为10,比例为2的十进制数。其中2控制小数位数(小数不足末位用0补齐),即整型部分最多可以有8位,小数点并不占用位数。
简单说就是整数位+小数位<=10的十进制数。

-- 如下示例,整数部分超过了8位,结果为NULL
-- 因为保留两位小数后,整体位数为11位,超过了精度10,因此如下结果null
> select CAST(333333333.3 AS DECIMAL(10,2)) as r;
+-------+
|   r   |
+-------+
| NULL  |
+-------+-- 如下示例,整数部分为8位,小数部分很多位,但是仍然可以转换为decimal(10,2)类型,
-- 因为即使小数后很多位,但是只保留2位小数,转换后的结果为8位整数+2位小数部分,符合精度为10
> select CAST(33333333.3333333333333 AS DECIMAL(10,2)) as r;
+--------------+
|      r       |
+--------------+
| 33333333.33  |
+--------------+-- 正常转化为decimal类型
> select CAST(3333.3333333333333 AS DECIMAL(10,2)) as r;
+----------+
|    r     |
+----------+
| 3333.33  |
+----------+

注意:将一个数字类型的字面量转换成decimal类型,要保证整数部分的位数必须<=(精度-比例),否则结果为NULL。

2. Decimal Literals

大于 BIGINT 的整型字面量必须使用 Decimal(38,0) 处理。 且必须以BD结尾。 例子:

select CAST(18446744073709001000BD AS DECIMAL(38,0)) from my_table limit 1;

3. Hive 0.12.0 和 0.13.0 之间的Decimal类型不兼容

随着 Hive 0.13.0 中 Decimal 数据类型的更改,Hive 0.13.0 之前的decimal类型的列将被视为decimal(10,0)类型。 这意味着从这些表中读取的现有数据将被视为 10 位整数值,写入这些表的数据将在写入之前转换为 10 位整数值。 为避免这些问题,在升级到 Hive 0.13.0 或更高版本后,使用包含 Decimal 列的表的 0.12 或更早版本的 Hive 用户将需要迁移他们的表。

4. Floating Point Types

浮点文字被假定为 DOUBLE。 尚不支持科学记数法。

Decimal类型字面量为浮点数提供了比 DOUBLE 类型更精确的值和更大的范围。 decimal 数据类型存储数值的精确表示,而 DOUBLE 数据类型存储数值的非常接近的近似值。

5. Casting Decimal Values

decimal值和任何其他原始类型(如整数、双精度、布尔值等)之间支持强制转换。

http://www.dtcms.com/a/258329.html

相关文章:

  • 技术解析:基于x264与FFmpeg的视频高效压缩策略——以小丸工具箱类GUI工具为例
  • vue.js 3: markmap using typescript
  • maven:迁移到 Maven Central 后 pom.xml的配置步骤
  • 【云计算】云测试
  • OSS跨区域复制灾备方案:华东1到华南1的数据同步与故障切换演练
  • Java模块打包格式与多版本JAR详解
  • 深度解析:2D写实数字人交互场景的创新与应用
  • IDC报告AR/VR市场反弹Meta份额超半,谷歌/微美全息精准卡位AR/AI眼镜市场机遇
  • Unity3D下的RTSP/RTMP超低延迟直播播放器实践:跨平台、高性能与VR全景支持的完整解析
  • 如何为虚拟机上的 Manjaro Linux启用 VMware 拖放功能
  • RAG实战 第三章:知识库构建与管理
  • Python与大数据:Spark和PySpark实战教程
  • STM32Cube 包结构解析
  • 创建型设计模式——单例模式
  • C++的单例模式
  • dify动手实践课6
  • 关于 Babel 编译后的 Generator 状态机结构解析
  • 数据赋能(319)——安全与合规——数据安全可控
  • 美团小程序闪购 mtgsig1.2
  • 第三节 布局与盒模型-盒模型与box-sizing
  • 【二】19.关于LCD和LTDC
  • 从零搭建共享棋牌室物联网系统:硬件选型与避坑指南!
  • 发布 npm 包完整指南(含账号注册、发布撤销与注意事项)
  • 文件锁的艺术:深入解析 `fcntl(F_SETLK/F_GETLK)`
  • C# WinForms 日志实现与封装
  • Flink状态和容错-基础篇
  • Golang Kratos 系列:领域层model定义是自洽还是直接依赖第三方(三)
  • 帮助装修公司拓展客户资源的微信装修小程序怎么做?
  • 重点解析(软件工程)
  • MonkeyOCR在Win习题部署指南和报错提醒