2

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

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

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

我通过 ServiceBus Explorer(感谢编写此工具的人)检查了该字符串是否完全按原样到达事件中心。

在流分析中,我添加了事件中心作为输入。当我在 Azure 门户中使用选项 SAMPLE DATA 时,这会导致数据包含:“event_timestamp”:“2016-09-02T17:51:38.6570000”

为什么流分析要删除时区信息???

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

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

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

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

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

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

我对这个论坛上其他人的意见很感兴趣。

4

1 回答 1

1

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 流分析数据类型

datetime 定义一个日期,该日期与基于 24 小时制且相对于 UTC(时区偏移量 0)的带小数秒的时间结合在一起。

转换:

日期时间字符串按照 ISO 8601 标准转换为日期时间

据记载,日期时间为 UTC。因此无需明确指定它。我无法判断这是否对 ISO 感到满意,首先是因为 WikiPedia 不是 ISO 文档,其次是因为我不是 ISO 专家。

于 2016-09-13T17:48:22.293 回答