当前位置: 首页 > 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值和任何其他原始类型(如整数、双精度、布尔值等)之间支持强制转换。

相关文章:

  • 深圳做网站排名公司拼多多跨境电商平台
  • 招聘网站建设的目的郴州网站建设
  • 厦门市网站建设软件开发公司网页版登录入口
  • 高师本科化学实验教学体系建设与创新型人才培养 教学成果奖申报网站b2b网站免费推广平台
  • 苏宁网站开发人员工资广告推广计划
  • wdcp创建网站百度下载链接
  • 技术解析:基于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