Apache flink 相当于;来自“u unixtime(bigint unixtime)”;在Flink SQL中

Apache flink 相当于;来自“u unixtime(bigint unixtime)”;在Flink SQL中,apache-flink,flink-sql,Apache Flink,Flink Sql,我正在搜索与函数等价的函数,该函数来自于\u unixtime(bigint unixtime),它存在于Spark SQL和Flink SQL中 我的目标是转换这种格式:143979904 转换成这种格式:2015-05-18 05:43:37我想您正在寻找DATE\u格式(时间戳,%Y-%m-%d%H:%I:%s) 有关更多信息,请参阅和的文档。只需使用自定义项 示例用法 test.csv creation_date|key 1535816823|1 1536392928|2 153627

我正在搜索与函数等价的函数,该函数来自于\u unixtime(bigint unixtime),它存在于Spark SQL和Flink SQL中

我的目标是转换这种格式:143979904


转换成这种格式:2015-05-18 05:43:37

我想您正在寻找
DATE\u格式(时间戳,%Y-%m-%d%H:%I:%s)

有关更多信息,请参阅和的文档。

只需使用自定义项

示例用法

test.csv

creation_date|key
1535816823|1
1536392928|2
1536272308|3
epochtimecoverter.scala

导入java.time.format.DateTimeFormatter
导入java.time.{Instant,LocalDateTime,ZoneId}
导入org.apache.flink.table.functions.ScalarFunction
类EpochTimeConverter扩展了ScalarFunction{
def eval(epochTime:Int):字符串={
//为了提高性能,您可以在现实生活中缓存“DateTimeFormatter”
val-timePattern=DateTimeFormatter.of模式(“yyyy-MM-dd-HH:MM:ss”)
timePattern.format(LocalDateTime.ofInstant(Instant.ofepochssecond(epochTime),ZoneId.systemDefault())
}
}
UdfExample.scala

import org.apache.flink.api.scala.{ExecutionEnvironment,}
导入org.apache.flink.table.api.scala_
导入org.apache.flink.table.api.{TableEnvironment,Types}
导入org.apache.flink.table.sources.CsvTableSource
导入org.apache.flink.types.Row
对象UdfExample{
def main(参数:数组[字符串]):单位={
val env=ExecutionEnvironment.getExecutionEnvironment
val tableEnv=TableEnvironment.getTableEnvironment(env)
val csvData=CsvTableSource
.builder()
.path(“test.csv”)
.ignoreFirstLine()
.fieldDelimiter(“|”)
.field(“创建日期”,Types.INT)
.field(“key”,Types.INT)
.build()
tableEnv.registerTableSource(“临时表”,csvData)
println(“无自定义项:”)
tableEnv.sqlQuery(“选择创建日期,从临时表中选择键”).toDataSet[Row].print()
tableEnv.registerFunction(“from_unixtime”,new epochtimecoverter())
println()
println(“带自定义项:”)
tableEnv.sqlQuery(“从unixtime(创建日期)中选择,从temp\u表中选择键”).toDataSet[Row].print()
}
}
如果运行
UdfExample.scala
,它将生成类似的输出,如下所示:

Without udf:
1535816823,1
1536272308,3
1536392928,2

With udf:
2018-09-01 18:47:03,1
2018-09-07 01:18:28,3
2018-09-08 10:48:48,2

感谢您的回复,但原始格式是bigint而不是timestamp。我不能将其转换为时间戳(cast(myfieldas timestamp))。它说“Cast函数不能将BIGINT类型的值转换为TIMESTAMP类型(3)”,我也在为这个问题寻找解决方案。有人克服了吗?谢谢。不过,UDF并不是我所希望的。我很惊讶没有一个更简单的内置解决方案加入到语言中。