大数据开发: 常用字段类型、建表常用字段名与类型总结

大数据开发常用字段类型总结表涵盖了数值、字符串、日期时间、逻辑和复合等五大类数据类型。


数值类型推荐BIGINT存储ID和时间戳,金额必须用DECIMAL保证精度;字符串优先使用STRING;日期时间推荐TIMESTAMP支持计算;逻辑类型建议BOOLEAN或TINYINT(0/1)。


特别强调Oracle的NUMBER类型需根据场景映射为DECIMAL/BIGINT/DOUBLE。


建表时应遵循"金额DECIMAL、ID BIGINT/STRING、时间TIMESTAMP、分区STRING"的原则,避免浮点数存储金额导致精度损失。


典型应用场景包括订单系统、用户行为日志等,需结合各大数据引擎(Hive/SparkSQL等)的类型特性进行选型。


大数据开发常用字段类型总结表


一、数值类型

类型名称 大数据场景别名 取值范围 存储大小 典型应用场景 注意事项
TINYINT BYTE -128 到 127 1字节 状态码、枚举值(0/1/2)、小范围分类 MySQL无此类型,用SMALLINT替代
SMALLINT SHORT -32,768 到 32,767 2字节 年龄、小范围计数、评分(1-5分) 范围较小,不常用
INT INTEGER -2^31 到 2^31-1 4字节 普通ID、常规计数、年份 大数据场景被BIGINT替代
BIGINT LONG -2^63 到 2^63-1 8字节 主键ID、时间戳、UV计数、订单号 最常用整数类型
DECIMAL(p,s) DECIMAL / NUMERIC 最大38位精度 变长 金额、价格、利率、精确计算 p:总位数,s:小数位,避免DOUBLE
FLOAT FLOAT ±1.18E-38 到 ±3.40E+38 4字节 科学计算、坐标、传感器数据 精度低,不推荐金额
DOUBLE DOUBLE ±2.23E-308 到 ±1.80E+308 8字节 统计指标、比率、复杂计算 有精度损失

大数据开发中一般没有叫 NUMBER 的类型,它主要是 Oracle 数据库特有的


📊 核心区别一览
对比维度 NUMBER (Oracle专用) 大数据场景标准类型
所属系统 Oracle 数据库 Hive, Spark SQL, ClickHouse, MaxCompute 等
核心特性 可变长、高精度十进制(最大38位) 精确固定精度用 DECIMAL,近似值用 DOUBLE
常见用法 财务、金额等需高精度的场景 大规模数据分析、聚合计算
跨平台兼容性 仅限Oracle生态 开源生态,跨平台标准
🔄 数据类型映射关系

当把Oracle数据迁移到大数据平台时,NUMBER 类型会根据具体定义映射到对应的标准类型:

Oracle 定义 推荐映射类型 说明
NUMBER(p,0) (p ≤ 9) INT 普通整数
NUMBER(p,0) (10 ≤ p ≤ 18) BIGINT 长整数,如ID、大数量计数
NUMBER(p,s) (含小数位) DECIMAL(p,s) 核心映射:处理金额等需精确计算的场景
NUMBER (无参数) DECIMAL(38,0)DOUBLE 需根据实际数据判断,纯整数用DECIMAL,范围大用DOUBLE

补充说明 :Oracle中的NUMBER(p,s)p表示总位数,s表示小数位数。例如NUMBER(10,2)能存储的最大数是99,999,999.99

💡 实际开发建议

在处理从Oracle迁移或需要与Oracle交互的数据时,参考以下原则:

  1. 从Oracle同步数据 :遵循上表的映射规则,将NUMBER转换为大数据平台的对应类型。

  2. 在大数据平台新建表

    • 存储金额或需要精确计算 :像之前强调的一样,务必使用 DECIMAL(p,s)

    • 存储ID或数量 :优先使用 BIGINT

    • 存储科学计算或比率 :可使用 DOUBLE

  3. 慎用 DOUBLE 存金额DOUBLE是浮点数,进行累加等操作时会产生微小的精度误差,这在金融等场景是不允许的。

二、字符串类型

类型名称 大数据场景别名 最大长度 存储方式 典型应用场景 注意事项
STRING STRING 2GB (32,767字符) 变长 名称、地址、JSON、描述、ID 最推荐,无长度限制灵活
VARCHAR(n) VARCHAR 65,535字节 变长 固定长度业务字段、编码、邮箱 n需合理设置,超长会截断
CHAR(n) CHAR 255字符 定长 固定长度编码、MD5(32)、UUID(36) 浪费空间,不推荐
BINARY BYTES 2GB 变长 加密数据、图片Base64、序列化对象 二进制存储,不可直接查询
JSON STRUCT / MAP 变长 文本 半结构化数据、日志、配置 Hive用STRING存,ClickHouse原生支持

三、日期时间类型

类型名称 大数据场景别名 精度 存储大小 典型应用场景 推荐格式
DATE DATE 4字节 生日、入职日期、分区字段 yyyy-MM-dd
TIMESTAMP TIMESTAMP 纳秒(9位小数) 8-11字节 事件时间、日志时间、交易时间 yyyy-MM-dd HH:mm:ss.SSS
BIGINT LONG 毫秒/秒 8字节 时间戳存储、跨平台交换 Unix时间戳(13位毫秒)
STRING STRING 自定义 变长 分区字段、日期维度表 yyyyMMddyyyy-MM-dd

四、逻辑类型

类型名称 大数据场景别名 取值范围 存储大小 典型应用场景 替代方案
BOOLEAN BOOL TRUE / FALSE 1字节 是否删除、是否有效、逻辑判断 可用 TINYINT(0/1) 替代
TINYINT BYTE 0/1 1字节 Hive兼容场景、跨引擎统一 Hive无BOOLEAN时用此

五、复合类型(Hive/Spark专用)

类型名称 语法示例 存储结构 典型应用场景 查询示例
ARRAY<T> hobbies ARRAY<STRING> 有序列表 标签列表、商品图片集 hobbies[0]
MAP<K,V> scores MAP<STRING,INT> 键值对 属性扩展、成绩表 scores['math']
STRUCT<col:TYPE> address STRUCT<city:STRING,code:INT> 命名结构 固定格式对象、嵌套属性 address.city

六、各主流引擎类型映射表

业务用途 Hive Spark SQL ClickHouse MySQL 推荐选择
主键ID BIGINT LongType UInt64 BIGINT BIGINT
订单号 STRING StringType String VARCHAR(64) STRING
金额 DECIMAL(18,2) DecimalType Decimal(18,2) DECIMAL(18,2) DECIMAL(18,2)
时间 TIMESTAMP TimestampType DateTime64 DATETIME TIMESTAMP
日期分区 STRING StringType Date DATE STRING (格式 yyyy-MM-dd)
状态 TINYINT ByteType Int8 TINYINT TINYINT
JSON数据 STRING StringType String JSON STRING
布尔值 BOOLEAN BooleanType Bool BOOLEAN BOOLEAN

七、选型决策矩阵

数据类型 优先使用 谨慎使用 禁止使用 判断标准
整数 BIGINT INT SMALLINT 安全优先,宁可大
小数 DECIMAL(18,2) DOUBLE FLOAT 金额必须DECIMAL
字符串 STRING VARCHAR(n) CHAR(n) 灵活优先
时间 TIMESTAMP BIGINT(时间戳) STRING 需要计算优先TIMESTAMP
分区 STRING DATE BIGINT 统一 yyyy-MM-dd 格式
逻辑 BOOLEAN TINYINT STRING 语义清晰

八、常见错误与最佳实践

错误示例 问题 正确做法
SAL VARCHAR(40) 存金额 字符串无法计算 SAL DECIMAL(10,2)
AGE INT 存年龄 年龄会变,需重新计算 BIRTHDAY DATE 存出生日期
PRICE DOUBLE 累加 浮点精度丢失 PRICE DECIMAL(18,4)
STATUS STRING 存储冗余,比较慢 STATUS TINYINT + 字典表
CREATE_TIME STRING 无法时间函数计算 CREATE_TIME TIMESTAMP

九、快速选型口诀

text

复制代码
整数用 BIGINT,金额 DECIMAL 保精度
文本一律用 STRING,时间戳选 TIMESTAMP
状态布尔 TINYINT,分区日期 STRING 存
JSON 复杂也用 STRING,复合类型慎使用

十、建表类型检查清单

sql

复制代码
-- 建表前自检
✓ 金额字段 → DECIMAL(p,s) 而非 DOUBLE
✓ ID字段 → BIGINT 或 STRING
✓ 时间字段 → TIMESTAMP 支持计算和时区
✓ 分区字段 → STRING 统一格式便于维护
✓ 状态字段 → TINYINT 减少存储空间
✓ 枚举字段 → TINYINT + 字典表,避免中文存储

大数据开发建表常用字段名与类型对照表


一、通用基础字段

字段分类 常用字段名 推荐数据类型 长度/精度 说明
主键标识 id BIGINT / STRING - 唯一标识,大数据场景常用STRING
user_id BIGINT / STRING - 用户ID
order_id STRING 32-64 订单ID,通常为字符串哈希
uuid STRING 36 通用唯一标识符
时间字段 dt STRING 10 分区字段,格式 yyyy-MM-dd
created_at TIMESTAMP / BIGINT - 创建时间戳
updated_at TIMESTAMP / BIGINT - 更新时间戳
event_time TIMESTAMP - 事件发生时间
date DATE / STRING - 日期字段
状态字段 status TINYINT / STRING 1-20 状态码(0:失效,1:有效)
is_deleted TINYINT / BOOLEAN 1 逻辑删除标记
is_valid TINYINT 1 是否有效(0:否,1:是)

二、业务核心字段

业务类型 常用字段名 推荐数据类型 长度/精度 说明
金额相关 amount DECIMAL(18,2) / DOUBLE 18,2 金额(建议DECIMAL)
price DECIMAL(18,4) 18,4 单价,更高精度
fee DECIMAL(18,4) 18,4 手续费
total_amount DECIMAL(20,2) 20,2 总金额
数量相关 count BIGINT / INT - 计数/数量
num INT / BIGINT - 数量
quantity BIGINT - 数量
比例/率 rate DECIMAL(10,6) / DOUBLE 10,6 比率/利率
percentage DECIMAL(8,4) 8,4 百分比
标识信息 name STRING 50-200 名称
type STRING / TINYINT 20-50 类型编码
code STRING 20-50 编码
category STRING 30-100 分类

三、技术辅助字段

分类 常用字段名 推荐数据类型 长度/精度 说明
ETL字段 etl_date STRING 8-10 ETL处理日期 yyyyMMdd
load_time TIMESTAMP - 数据加载时间
source_system STRING 20-50 来源系统标识
batch_id BIGINT / STRING - 批次号
追踪字段 trace_id STRING 32-64 链路追踪ID
request_id STRING 32-64 请求ID
session_id STRING 32-64 会话ID
版本控制 version INT - 数据版本号
revision BIGINT - 修订版本

四、不同引擎的数据类型对照

业务场景 Hive Spark SQL ClickHouse HBase 说明
整数 BIGINT LongType Int64 字节数组 长整数,主推
INT IntegerType Int32 字节数组 普通整数
小数 DECIMAL(18,2) DecimalType Decimal(18,2) 字节数组 金额精确计算
DOUBLE DoubleType Float64 字节数组 科学计算
字符串 STRING StringType String 字节数组 主推文本
VARCHAR(n) StringType String 字节数组 有长度限制
时间 TIMESTAMP TimestampType DateTime64 字节数组 精确时间
DATE DateType Date 字节数组 仅日期
布尔 BOOLEAN BooleanType Bool 字节数组 逻辑判断
复杂类型 MAP<K,V> MapType Map(K,V) - 键值对
ARRAY<T> ArrayType Array(T) - 数组
STRUCT StructType Tuple - 结构体

五、典型建表示例

sql

复制代码
-- 大数据建表模板(Hive语法)
CREATE TABLE IF NOT EXISTS dwd_order_info (
    -- 主键标识
    order_id        STRING      COMMENT '订单ID',
    user_id         BIGINT      COMMENT '用户ID',
    
    -- 业务字段
    order_amount    DECIMAL(18,2) COMMENT '订单金额',
    order_status    TINYINT     COMMENT '订单状态:0待支付,1已支付,2已取消',
    
    -- 时间字段
    created_at      TIMESTAMP   COMMENT '创建时间',
    updated_at      TIMESTAMP   COMMENT '更新时间',
    
    -- ETL字段
    etl_date        STRING      COMMENT 'ETL处理日期',
    source_system   STRING      COMMENT '来源系统'
) 
COMMENT '订单明细表'
PARTITIONED BY (dt STRING COMMENT '分区字段 yyyy-MM-dd')
STORED AS PARQUET
TBLPROPERTIES ('parquet.compression'='SNAPPY');

六、选型建议

数据类型 推荐场景 避免场景
BIGINT ID、计数、时间戳(毫秒) 金额计算(精度不足)
DECIMAL 金额、利率、精确计算 科学计算、大数据量聚合(性能差)
STRING ID、名称、枚举、分区字段 数值计算、时间比较
TIMESTAMP 事件时间、日志时间 仅日期比较(分区用DATE/STRING)
TINYINT 状态码、枚举值(值域小) 大于255的数值

七、分区字段命名规范

分区粒度 字段名 格式示例 数据类型
年分区 year 2024 STRING / INT
月分区 month 2024-03 STRING
日分区 dt / day 2024-03-15 STRING
小时分区 hour 2024031514 STRING
多级分区 dt+hour 2024-03-15+14 STRING

核心原则 :分区字段统一用 STRING 类型,格式统一,便于维护和分区裁剪优化。

相关推荐
极客小俊2 年前
【你也能从零基础学会网站开发】SQL Server 2000中的数据类型之Number整数与浮点类型
学习笔记·数据类型·免费教程·sql server 2000·字段类型·number整数类型·float浮点类型
KXY冲冲冲3 年前
MySQL建表和增添改查
数据库·mysql·建表·增删改查