查询过去存在的数据
适用于:✅Microsoft Fabric 中的仓库
Microsoft Fabric 仓库提供了查询过去存在的历史数据的功能。 从特定时间戳查询数据的能力在数据仓库行业被称为时间旅行。
- 时间旅行通过随时间的推移保持数据的一致性和准确性来提高报告的稳定性。
- 时间旅行可通过查询不同的过去时间点来进行历史趋势分析,并帮助预测未来趋势。
- 时间旅行简化了先前版本数据之间的低成本比较。
- 时间旅行有助于分析一段时间内的表现。
- 时间旅行允许组织审核数据随时间的变化,这通常是合规性的要求。
- 时间旅行有助于重现机器学习模型的结果。
- 时间旅行可以在同一工作区的多个仓库中查询特定时间点存在的表。
什么是时间旅行?
数据仓库中的时间旅行是一种低成本且高效的功能,可以快速查询先前版本的数据。
Microsoft Fabric 目前允许通过以下方式检索过去的数据状态:
使用 FOR TIMESTAMP AS OF T-SQL 命令进行时间旅行
在仓库项中,可以使用 OPTION FOR TIMESTAMP AS OF T-SQL 语法查询表,检索过去时间点的数据。 FOR TIMESTAMP AS OF
子句会影响整个语句,包括所有联接的仓库表。
从时间旅行查询中获取的结果本质上是只读的。 在使用 FOR TIMESTAMP AS OF 查询提示时,不能执行 INSERT、UPDATE 和 DELETE 等写操作。
使用 OPTION 子句指定 FOR TIMESTAMP AS OF 查询提示。 查询返回的数据与时间戳处(指定为 YYYY-MM-DDTHH:MM:SS[.fff]
)存在的数据完全相同。 例如:
SELECT *
FROM [dbo].[dimension_customer] AS DC
OPTION (FOR TIMESTAMP AS OF '2024-03-13T19:39:35.28'); --March 13, 2024 at 7:39:35.28 PM UTC
使用 CONVERT
语法来获取样式 126 的必要日期时间格式。
对于查询、存储过程、视图等,只能使用 OPTION
子句指定一次时间戳。OPTION
适用于 SELECT 语句中的所有内容。
有关示例,请参阅操作说明:使用时间旅行进行查询。
数据保留
在 Microsoft Fabric 中,仓库会自动保留和维护各种版本的数据,默认保留期最长为 30 个日历日。 这样就可以查询任何先前时间点的表。 对数据仓库所做的所有插入、更新和删除都将保留。 保留从仓库创建那一刻起自动开始。 超过保留阈值后,过期文件将被自动删除。
- 目前,使用
FOR TIMESTAMP AS OF
查询提示的SELECT
语句将返回最新版本的表架构。 - 如果删除是在保留期内,则可以查询表中删除的任何记录,因为它们在删除之前就已存在。
- 在架构更改之前,无法查询对表架构所做的任何修改,包括但不限于在表中添加或删除列。 同样,删除并重新创建具有相同数据的表也会删除其历史记录。
时间旅行应用场景
考虑在下列应用场景中对先前数据进行时间旅行的能力:
稳定报告
为了满足不断变化的数据环境要求,频繁执行提取、转换和加载 (ETL) 作业至关重要。 时间旅行功能可帮助实现这一目标,它既能确保数据完整性,又能在后台处理正在进行时,灵活地根据过去某个时间点(如前天晚上)返回的查询结果生成报告。
ETL 活动可以并发运行,同时查询上一个时间点的同一个表。
历史趋势和预测分析
时间旅行简化了历史数据分析,通过查询过去不同时间段的数据,来帮助发现有价值的趋势和模式。 这有助于通过实验历史数据集和训练预测模型来进行预测分析。 它有助于预测未来趋势,并帮助做出明智的数据驱动型决策。
分析和比较
时间旅行提供了一个用于分析和比较的历史镜头,便于找出根本原因,从而实现高效、经济的故障排除。
性能分析
时间旅行可帮助分析仓库查询的超时性能。 这有助于识别性能下降趋势,并据此优化查询。
审核和符合性
时间旅行通过授权审核员浏览数据历史记录,简化了审核和合规程序。 这不仅有助于遵守法规,而且有助于增强保证和透明度。
机器学习模型
时间旅行功能通过对历史数据的分析和真实场景的模拟,来帮助重现机器学习模型的结果。 这增强了模型的整体可靠性,以便做出准确的数据驱动型决策。
设计注意事项
OPTION FOR TIMESTAMP AS OF 查询提示的注意事项:
FOR TIMESTAMP AS OF
查询提示不能用于创建保留期内任何先前时间点的视图。 可用于查询保留期内过去时间点的视图。FOR TIMESTAMP AS OF
查询提示只能在SELECT
语句中使用一次。FOR TIMESTAMP AS OF
查询提示可在存储过程的SELECT
语句中定义。
时间旅行权限
任何拥有管理员、成员、参与者或查看者工作区角色的用户都可以查询过去某个时间点的表。 当用户查询表时,会自动施加列级安全性 (CLS)、行级安全性 (RLS) 或动态数据掩码 (DDM) 的限制。
限制
在时间戳中最多提供三位数的小数秒。 如果提供更高的精度,则会收到错误消息
An error occurred during timestamp conversion. Please provide a timestamp in the format yyyy-MM-ddTHH:mm:ss[.fff]. Msg 22440, Level 16, State 1, Code line 29
。目前,时间旅行只使用协调世界时 (UTC) 时区。
目前,时间旅行查询的数据保留期为 30 个日历日。
OPTION
子句中的FOR TIMESTAMP AS OF
值必须是确定性的。 有关参数化的示例,请参阅存储过程中的时间旅行。湖屋的 SQL 分析终结点不支持时间旅行。
OPTION FOR TIMESTAMP AS OF
语法只能用于以SELECT
语句开头的查询。INSERT INTO SELECT
和CREATE TABLE AS SELECT
等查询不能与OPTION FOR TIMESTAMP AS OF
一起使用。 请考虑在某个时间点克隆仓库表的能力。视图定义不能包含
OPTION FOR TIMESTAMP AS OF
语法。 可以使用SELECT .. FROM <view> ... OPTION FOR TIMESTAMP AS OF
语法查询视图。 但是,在创建视图之前,不能从视图的表中查询过去的数据。Power BI Desktop Direct 查询模式或浏览此数据选项当前不支持时间旅行的
FOR TIMESTAMP AS OF
语法。