我使用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]
这会改变我数据的内容(*)。所有显示为带有时区信息的日期时间的字符串都将被转换。
在我看来,这是非常不受欢迎的行为。
我对这个论坛中其他人的意见非常感兴趣。
答案 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专家。