Parquet文件中INT64与DECIMAL(18,6)含义及工具输出疑问
Parquet类型相关问题解答
1. INT64和DECIMAL(18,6)的含义
- INT64:这是Parquet里的基础物理数值类型,代表64位有符号整数,能存储的范围是
-9223372036854775808到9223372036854775807,对应很多编程语言里的长整型(比如Java的long、Python的int),是直接定义数据在磁盘上存储格式的类型。 - DECIMAL(18,6):这是Parquet的逻辑类型(语义类型),用于表示精确的定点小数,完全避免浮点数的精度丢失问题,特别适合金融、财务场景。括号里的参数含义:
18是精度:指整个数字的总位数(整数部分+小数部分);6是标度:指小数部分的位数。
举个例子,这个类型可以精准存储123456789012.345678这样的数值,不会出现近似值。
2. 为什么parquet-tools会同时显示两者?字段实际类型是什么?
这得从Parquet的类型设计逻辑说起:它把数据的存储格式和语义含义分开了,前者叫物理类型,后者叫逻辑类型。
你看到的输出optional int64 my_column (DECIMAL(18,6))里:
int64是物理存储类型:意思是这个DECIMAL类型的数据,在磁盘上是用64位整数来存储的(具体是把原始小数乘以10^6转成整数保存,读取时再除以10^6还原);DECIMAL(18,6)是逻辑类型:这才是字段的实际语义——它本质是一个精度18、标度6的定点小数。
所以这个字段的实际类型是DECIMAL(18,6),INT64只是它在底层的存储载体。parquet-tools同时展示两者,是为了让你既明白数据代表什么含义,又清楚它是怎么存在磁盘上的,这对排查数据问题、优化存储性能都很有帮助。
内容的提问来源于stack exchange,提问作者Cherry
相关产品推荐
相关产品推荐

