Azure Stream Analytics输入会破坏包含时区信息的字符串

时间:2016-09-13 13:27:48

标签: azure stream analytics timestamp-with-timezone asa

我使用Azure Event Hub收集基于时间的事件。将Azure流分析(ASA)连接到它。

这会导致失去ASA级别的时区信息。

我确定的内容如下: 我已经发送了JSON格式的数据,其中包含一个时间戳与ISO 8601兼容的字符串。例如: " event_timestamp":" 2016-09-02T19:51:38.657 + 02:00"

我通过ServiceBus Explorer检查(感谢编写此工具的人),这个字符串完全按照事件中心的方式到达。

在Stream Analytics中,我添加了事件中心作为输入。当我在Azure门户中使用选项SAMPLE DATA时,会产生包含以下内容的数据:" event_timestamp":" 2016-09-02T17:51:38.6570000"

为什么Stream Analytics会删除时区信息???

根据ISO 8601,未在时间戳中指定时区意味着将时间戳转换为本地时间。这是否意味着Azure资源正在运行的时区?在这种情况下如何使用地理复制?

这意味着在使用数据并在仪表板中显示后,所有时间都与流分析运行的服务器的时间相关?

我是否需要在JSON有效负载中单独添加时区信息并在之后重建它?

我的结论是,ASA实际上从我的数据流中删除/破坏了信息。 想象一下这个ASA查询:SELECT * INTO [myoutput] FROM [myinput]

这会改变我数据的内容(*)。所有显示为带有时区信息的日期时间的字符串都将被转换。

在我看来,这是非常不受欢迎的行为。

我对这个论坛中其他人的意见非常感兴趣。

1 个答案:

答案 0 :(得分:0)

Azure中的所有内容都以UTC时区运行,除非另有支持和明确配置(没有多少服务支持设置时区)。

如果您仔细查看引用的样本,您会注意到时间戳在ASA中转换为UTC,这就是为什么TimeZone信息丢失的原因:

发送到活动中心:"event_timestamp": "2016-09-02T19:51:38.657+02:00"

在ASA收到:"event_timestamp":"2016-09-02T21:51:38.6570000"

请注意,您的活动是在 19:51:38.657 +2:00 中发送的,ASA读取 21:51:38.6570000 ,这绝对是相同的。

<强>更新

我不是ISO标准的专家,但这里有ASA Docu的一些摘录: Azure Stream Analytics data types

  

datetime定义与一天中的时间相结合的日期   小数秒,基于24小时制和相对于   UTC(时区偏移0)。

     

convertions:

     

按照ISO 8601标准

转换为日期时间的日期时间字符串

据记载,日期时间是UTC。因此无需明确指定它。这是否适合ISO我无法分辨,首先是因为WikiPedia不是ISO Document,第二是因为我不是ISO专家。