我正在查看一个从世界各地的系统收集数据的数据仓库。数据仓库使用 UTC 时间,但只存储 UTC 偏移量而不存储时区。我注意到来自例如美国的日期时间数据已被插入,偏移量为 +0000,这表明它已存储为 UTC 而不是本地时间。据我在加载数据的代码中看到的,没有将日期时间从本地时间转换为 UTC 的转换。
我是 DWH 数据建模的新手,但根据我的阅读,我认为我们应该使用转换后的 UTC 偏移量存储数据,存储包含时区的日期时间或存储 UTC 和本地日期时间,因为这可能会产生影响在报告上。目前没有任何报告团队对此提出问题,所以当数据来自世界不同国家/地区时,是否应该担心或将所有内容保存为 UTC 是否可以接受?
谢谢
作为一般规则,最好将 DATETIME 存储在 UTC 中,然后将它们转换为显示层中的适当时区(例如应用程序、报告等)。这可以解决您处理多个时区的问题,并减少围绕夏令时的问题。
用 UTC 后缀命名 DATETIME 列也是一个好主意,这样可以让可能使用它们的每个人都清楚这是一个 UTC DATETIME(OrderDateTimeUTC、LastEditDateTimeUTC)。
如果您有一个不包含时区信息的 DATETIME,则实际上无法确定它实际上是 UTC 还是任何其他时区。它只是不是数据的一部分。
在我使用 AT TIME ZONE 的地方,包括了适当的偏移量,在我没有使用的地方,它不是。没有办法告诉 CurrentSystemTimeWithoutTimeZone 不是 UTC。
当然,您可以返回负责数据的代码并确定 DATETIME 代表什么,但仅查看数据库不会有帮助。