首页 > 数据库 >FlinkSQL 时间类型转化使用小结

FlinkSQL 时间类型转化使用小结

时间:2023-01-17 10:15:43浏览次数:67  
标签:string -- TIMESTAMP FlinkSQL 转化 field BIGINT LTZ 小结

https://blog.noname.cc/2023/01/16/20230116/

在 Flink SQL 中,存在两种时间类型, 分别是 TIMESTAMP 和 TIMESTAMP_LTZ.

以下示例所用的字段: TIMESTAMP_FIELD, TIMESTAMP_LTZ_FIELD, BIGINT_FIELD, STRING_FIELD 分别代表对应类型的字段.

TIMESTAMP

TIMESTAMP <-> BIGINT

-- 在 Flink 1.14 之前

-- TIMESTAMP TO BIGINT
-- 在 Flink 1.14 之前 直接使用 cast 将 TIMESTAMP 转换为 BIGINT
CAST(timestamp_field as BIGINT) as bigint_field

-- BIGINT TO TIMESTAMP

CAST(bigint_field as TIMESTAMP) as timestamp_field

------------------------------------


-- 在 Flink 1.14 之后
DATE_FORMAT(TIMESTAMP, 'yyyy-MM-dd hh:mm:ss') as string_field

-- UNIX_TIMESTAMP 默认会使用 local time-zone, 而 DATE_FORMAT 默认会使用 UTC-0 时区的时间, 使用 UNIX_TIMESTAMP 前应该使用 CONVERT_TIMEZONE 将 UTC-0 转换为 local time-timezone
CONVERT_TZ(string_field, 'UTC', 'Asia/Shanghai') as string_field

UNIX_TIMESTAMP(string_field, 'yyyy-MM-dd hh:mm:ss') as bigint_field

-- BIGINT TO TIMESTAMP
FROM_UNIXTIME(bigint_field, 'yyyy-MM-dd hh:mm:ss') as string_field

-- FROM_UNIXTIME 默认会使用 local time-zone, 而 TO_TIMESTAMP 默认会使用 UTC-0 时区的时间, 使用 TO_TIMESTAMP 前应该使用 CONVERT_TIMEZONE 转换为 UTC-0 时区
CONVERT_TZ(string_field, 'Asia/Shanghai', 'UTC') as string_field

TO_TIMESTAMP(string_field, 'yyyy-MM-dd hh:mm:ss') as timestamp_field


TIMESTAMP <-> STRING

TIMESTAMP 和 STRING 进行互转时, 使用的都是 UTC-0 时区

-- 将 TIMESTAMP 类型按照指定的格式转换为 STRING

DATE_FORMAT(timestamp_field, 'yyyy-MM-dd hh:mm:ss')

-- 将 STRING 类型字段转换为 TIMESTAMP 类型 

TO_TIMESTAMP(string_field, 'yyyy-MM-dd hh:mm:ss')

TIMESTAMP_LTZ

TIMESTAMP_LTZ <-> BIGINT

-- 将 TIMESTAMP_LTZ 类型转换为 BIGINT
-- 1. 将 TIMESTAMP_LTZ 按照指定格式转换为 STRING
-- 2. 将 STRING 转换为 时间戳 BIGINT
DATE_FORMAT(timestamp_ltz_field, 'yyyy-MM-dd hh:mm:ss') as string_field;

UNIX_TIMESTAMP(string_field, 'yyyy-MM-dd hh:mm:ss')

-- 将 BIGINT 转换为 TIMESTAMP_LTZ
-- 直接使用 TO_TIMESTAMP_LTZ 函数
TO_TIMESTAMP_LTZ(bigint_field, 3);

TIMESTAMP_LTZ -> STRING


-- 将 TIMESTAMP_LTZ 按照指定格式转换为 STRING

DATE_FORMAT(timestamp_ltz_field, 'yyyy-MM-dd hh:mm:ss')


-- 将 STRING 转换为 TIMESTAMP_LTZ
-- 1. 将 STRING 转换为 BIGINT 时间戳
-- 2. 将 BIGINT 转换为 TIMESTAMP_LTZ
UNIX_TIMESTAMP(string_field, 'yyyy-MM-dd hh:mm:ss') as bigint_field;

TO_TIMESTAMP_LTZ(bigint_field, 3);


OTHER

BIGINT <-> STRING

-- 将时间戳 BIGINT 直接格式化为 STRING
FROM_UNIXTIME(bigint_field, 'yyyy-MM-dd hh:mm:ss') as string_field

-- 将 STRING 转换为 BIGINT 类型
UNIX_TIMESTAMP(string_field, 'yyyy-MM-dd hh:mm:ss') as bigint_field

TIMESTAMP <-> TIMESTAMP_LTZ

-- 可以直接 cast ,但是要注意时区的转换

CAST(timestamp_field as TIMESTAMP_LTZ)

CAST(timestamp_ltz_field as TIMESTAMP)

标签:string,--,TIMESTAMP,FlinkSQL,转化,field,BIGINT,LTZ,小结
From: https://www.cnblogs.com/0x12345678/p/17057062.html

相关文章

  • HTML之图像,表格,列表,区块(笔记小结)
    ((8)-HTML之图像,表格,列表,区块)1图像1.1图像标签图像由<img>标签定义;<img>是空标签,只包含属性,并且没有闭合标签;需要使用源属性(src),页面上才能显示图像,其值是图像的UR......
  • HTML之元素、属性、标题、段落【笔记小结】
    (HTML之元素、属性、标题、段落【笔记小结】)1元素1.1语法示例:开始标签元素内容结束标签<p>段落</p><a>链接</a><br>换行语法:#以开......
  • 在使用KNN_cuda库中出现的问题小结
    什么是KNN_cuda​KNN_CUDA是一个用CUDA实现的计算k近邻搜索的项目。​KNN搜索是指通过计算query的向量和reference集合内的向量的相似度,并找出最相似的k个。......
  • java基础10 三元运算符和小结
    三元运算符和小结字符串连接符+三元运算符三元运算符:x?y:z;如果x为true,返回y;x为false,、返回z扩展赋值运算符:+=、-=、*=、/=代码packagecom.zhan.operator......
  • 7月份小结|摆烂、焦急的一个月
    七月份,总体来说是一个摆烂的一个月。七月份要说最大的一次活动得属于七月九号的海钓了。杰哥帮我买了防晒的帽子,还带了零食和水。九号那天坐顺风车去的盐田港还要下去很远......
  • 6月份小结|活动很满躺平状态
    六月份的主题我总结为躺平,五月份的时候规划六月份要开始找工作,六月份的时候规划七月份一定要找到工作。事实上规划仅仅只是规划而已,并没有完全付诸行动。六月份的好友相聚......
  • 5月份小结|运动放松的一个月
    20220501三人深圳聚会^a0650c五一是劳动节,阿彬和浩沛都有放假,我们去备火锅烧烤的食材,去唱歌,然后烧烤火锅#“五一”靓仔活动项目——烧烤K歌沐足~20220504青年节三人......
  • 4月份小结|一切尽在不言
    20220428榕江西湖公园考完试的那天下午……20220430前往深圳夜晚到达立彬住处小结四月份依旧是焦虑不安的,直到最后一刻真的感觉白费了近7个月的时间,永远记得一句话不......
  • 3月份小结|更多的焦虑不安
    备考中……琐事多,不够坚定,时常不入状态,很焦虑2022.03.02|两厘米长的鱼刺扎在我喉咙2022.03.02这是一天中午中午的红鱼,还说好吃呢,中午的时候说完吃完,发现有鱼刺扎喉咙了......
  • 2月份小结|疲惫的生活需要一些温柔的梦
    20220204虎年首聚自从高中毕业后,年初我们基本会有一次聚会,今年我们三也没落下......