将数据工厂中的纪元时间转换为日期时间

Posted

技术标签:

【中文标题】将数据工厂中的纪元时间转换为日期时间【英文标题】:Convert epoch time in Data Factory to datetime 【发布时间】:2019-03-09 21:52:31 【问题描述】:

我有以下问题。此查询将数据从Cosmos DB 复制到Azure Data Lake

select c.Tag
from c
where 
c.data.timestamp >= '@formatDateTime(addminutes(pipeline().TriggerTime, -15), 'yyyy-MM-ddTHH:mm:ssZ' )' 

但是,我必须使用_ts,这是在cosmos DB 集合上创建文档的纪元时间,而不是c.data.timestamp。如何将纪元时间转换为日期时间并与'@formatDateTime(addminutes(pipeline().TriggerTime, -15), 'yyyy-MM-ddTHH:mm:ssZ' )' 进行比较

我也尝试过使用 dateadd( SECOND, c._ts, '1970-1-1' ) 显然不受支持。

【问题讨论】:

Cosmos 好像没有实现 DateAdd 函数。也许您可以使用 Data Lake 中的 Ticks 函数并将该值操作为 Unix 时间戳,您可以将其与 _ts 值进行比较。 您是否考虑过使用用户定义的函数? javascript 的 Date 类可以做你想做的事情。 @ChrisAnderson-MSFT 我可以在流分析中添加 UDF,但我应该在数据工厂管道的什么位置添加它们? 【参考方案1】:

正如@Chris 所说,您可以在 cosmos db 查询中使用 UDF。

udf:

function convertTime(unix_timestamp)
      var date = new Date(unix_timestamp * 1000);
      return date;

sql:

您可以将其合并到您的传输 sql 中:

select c.Tag
from c
where 
udf.convertTime(c._ts) >= '@formatDateTime(addminutes(pipeline().TriggerTime, -15), 'yyyy-MM-ddTHH:mm:ssZ' )'

【讨论】:

感谢 Jay 的深入回答,它运行良好。

以上是关于将数据工厂中的纪元时间转换为日期时间的主要内容,如果未能解决你的问题,请参考以下文章

将纪元时间转换为小时前,从 iPhone 中的当前日期开始分钟前

如何将 df 中的列转换为具有日期时间格式的纪元,反之亦然?

从日期转换为纪元-Oracle

如何将 13 位 unix 纪元时间格式转换为日期时间?

在不转换为 Javascript 中的纪元的情况下增加日期对象

将纪元时间戳列转换为带有时区的日期时间