Blink中时间函数(FROM_UNIXTIME/UNIX_TIMESTAMP/TO_TIMESTAMP等)

1.背景

blink处理后一般输出到DWD层DataHub,再同步到ODPS中。某个项目的cjsj提取出来是14为的varchar类型,如20190531115119,需要转换层timestamp和bigint类型。但是前人转出的是错误的,timestamp变成了20位。

2.函数说明

1.FROM_UNIXTIME(变成varchar)

VARCHAR FROM_UNIXTIME(BIGINT unixtime[, VARCHAR format])

返回VARCHAR类型的日期值,输入参数是Bigint类型,输出可以按格式输出,默认是yyyy-MM-dd HH:mm:ss

2.UNIX_TIMESTAMP(变成bigint)

BIGINT UNIX_TIMESTAMP()  #TIMESTAMP,相当于NOW
BIGINT UNIX_TIMESTAMP(VARCHAR date)  #VARCHAR,默认日期格式为 yyyy-MM-dd HH:mm:ss
BIGINT UNIX_TIMESTAMP(TIMESTAMP timestamp)  #TIMESTAMP
BIGINT UNIX_TIMESTAMP(VARCHAR date, VARCHAR format)  #VARCHAR,默认日期格式为 yyyy-MM-dd HH:mm:ss

返回第一个参数date转换成的长整型的时间戳,单位为秒。无参数时返回当前时间的时间戳,单位为秒,与now语义相同。若有参数为null或解析错误,返回null。

3.TO_TIMESTAMP(变成timestamp)

TIMESTAMP TO_TIMESTAMP(BIGINT time)  #BIGINT,单位为毫秒
TIMESTAMP TO_TIMESTAMP(VARCHAR date)  #VARCHAR, 默认格式为yyyy-MM-dd HH:mm:ss[.SSS]
TIMESTAMP TO_TIMESTAMP(VARCHAR date, VARCHAR format)  #VARCHAR

将BIGINT类型的日期或者VARCHAR类型的日期转换成TIMESTAMP类型。

3.Blink、DataHub、ODPS转换

  1. imestamp在DataHub中显示是时间戳,一串数字。同步到ODPS等数据库或数据仓库隐式转换成datetime格式。
  2. 其中ODS层DataHub的timestamp是16位的,而blink是13位,ODS层流入需要整除1000。

数据源是20190531115119或20190531,输出
1.timestamp类型:

 TO_TIMESTAMP(unix_timestamp(to_timestamp(cjsj,'yyyyMMdd')))
 TO_TIMESTAMP(unix_timestamp(to_timestamp(cjsj,'yyyyMMddHHmmss')))

2.bigint类型:

 unix_timestamp(to_timestamp(cjsj,'yyyyMMdd'))
 unix_timestamp(to_timestamp(cjsj,'yyyyMMddHHmmss'))

你可能感兴趣的:(大数据)