首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于Flink-SQL中的"from_unixtime(bigint unixtime)“

相当于Flink-SQL中的"from_unixtime(bigint unixtime)“
EN

Stack Overflow用户
提问于 2018-09-06 15:43:55
回答 2查看 2.2K关注 0票数 2

我正在搜索函数from_unixtime(bigint unixtime)的等效值,该函数存在于Spark和Flink-SQL中。

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

改为: 2015-05-18 05:43:37

EN

回答 2

Stack Overflow用户

发布于 2019-01-29 22:10:10

就用UDF吧!

https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/udfs.html

示例使用

test.csv

代码语言:javascript
复制
creation_date|key
1535816823|1
1536392928|2
1536272308|3

EpochTimeConverter.scala

代码语言:javascript
复制
import java.time.format.DateTimeFormatter
import java.time.{Instant, LocalDateTime, ZoneId}

import org.apache.flink.table.functions.ScalarFunction

class EpochTimeConverter extends ScalarFunction {
  def eval(epochTime: Int): String = {
    // For performance, you may cache `DateTimeFormatter` in real life
    val timePattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
    timePattern.format(LocalDateTime.ofInstant(Instant.ofEpochSecond(epochTime), ZoneId.systemDefault()))
  }
}

UdfExample.scala

代码语言:javascript
复制
import org.apache.flink.api.scala.{ExecutionEnvironment, _}
import org.apache.flink.table.api.scala._
import org.apache.flink.table.api.{TableEnvironment, Types}
import org.apache.flink.table.sources.CsvTableSource
import org.apache.flink.types.Row

object UdfExample {
  def main(args: Array[String]): Unit = {
    val env = ExecutionEnvironment.getExecutionEnvironment
    val tableEnv = TableEnvironment.getTableEnvironment(env)
    val csvData = CsvTableSource
      .builder()
      .path("test.csv")
      .ignoreFirstLine()
      .fieldDelimiter("|")
      .field("creation_date", Types.INT)
      .field("key", Types.INT)
      .build()

    tableEnv.registerTableSource("temp_table", csvData)

    println("Without udf:")
    tableEnv.sqlQuery("SELECT creation_date, key FROM temp_table").toDataSet[Row].print()

    tableEnv.registerFunction("from_unixtime", new EpochTimeConverter())

    println()
    println("With udf:")
    tableEnv.sqlQuery("select from_unixtime(creation_date),key from temp_table").toDataSet[Row].print()
  }
}

如果运行UdfExample.scala,它将产生类似的输出,如下所示:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2018-09-07 05:28:47

我想你是在找DATE_FORMAT(timestamp, '%Y-%m-%d %H:%i:%s')

有关更多信息,请参见关于内建函数日期格式说明符的文档。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52207823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档