date created: 2025-12-23 09:47
tags:
- 时间
- Timestmap
- Flink
- 时区
category: Bigdata
date updated: 2026-08-17 20:24
title: 各引擎timestamp格式名称对齐
1 各引擎timestamp格式名称对齐
1.1.1 Timestmap
| Flink | Iceberg | Spark | MySQL |
|---|---|---|---|
| timestmap 默认就是毫秒精度 | timestamp | timestampntz | DATETIME(3) |
| timestampltz | timestamptz | timestamp |
从DLA拉取元数据时,默认精度为MILLIS
1.1.2 时间精度
| 类型 | 精度 | 单位 |
|---|---|---|
TIMESTAMP(0) |
0 位小数 | 秒 |
TIMESTAMP(1) |
1 位小数 | 0.1 秒(100ms) |
TIMESTAMP(2) |
2 位小数 | 10ms |
TIMESTAMP(3) |
3 位小数 | 毫秒(ms) |
TIMESTAMP(6) |
6 位小数 | 微秒(μs) |
TIMESTAMP(9) |
9 位小数 | 纳秒(ns) |
1.1.3 避免隐式转换
1 | CREATE TEMPORARY VIEW SalesDataSource AS |
MySQL中day_time的字段类型是DATE或DATETIME,输入的结果总是1970
testt是BIGINT(毫秒时间戳)FROM_UNIXTIME(testt/1000)返回的是TIMESTAMPCAST(... AS DATE)会变成 Flink 的DATE类型- 如果 MySQL 字段是
DATETIME或TIMESTAMP,写入时 Flink JDBC connector 会把DATE转换为 0,显示成1970-01-01
解决方案: 避免隐式转换
1 | -- Flink的Timestamp 对应的类型就是 DateTime(3), 无需强制转换 |
1.1.4 Flink JDBC Connector 类型映射
| Flink SQL | Connector/Java | MySQL | 类型 |
|---|---|---|---|
| DATE | java.sql.Date | DATE | 只有年月日,精度到天 |
| TIMESTAMP | java.sql.Timestamp | DATETIME或TIMESTAMP | 精度到毫秒 |
Flink SQL中使用CAST(... AS DATE)写入MySQL DATETIME, JDBC Sink会把毫秒部分丢掉,甚至映射失败,默认值会变成0->1970-01-01