将数据工厂中的纪元时间转换为日期时间
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 中的列转换为具有日期时间格式的纪元,反之亦然?