对于许多组织来说,能够访问历史数据十分关键。以金融交易公司为例:
特定时间点的数据快照与合规审查、审计流程息息相关。 企业的关键业务系统也依赖历史数据来恢复故障并重建系统。 分析过去事件及其对当前状况的影响,还有助于准确预测并制定战略规划。 此外,回顾历史事件如何影响当下也是数据治理和数据完整性的关键,能帮助组织追踪变化并保持清晰的可追溯记录。
因此,我们在 RisingWave 2.0 版本中推出了时间旅行查询(Time Travel Queries)功能。通过时间旅行查询,您可以在指定的时间旅行窗口内检索过去某个时间点的数据。同时,时间旅行查询也支持将数据保存为单独的表,或将其发送到下游系统进行进一步分析或处理。下面将为大家分享如何使用 RisingWave 中的时间旅行查询。
1获取 Premium Edition 许可证
时间旅行查询是 RisingWave Premium 特有功能,需要购买许可证以使用。
目前 Premium 版本为期 30 天的免费试用活动还在进行中,如需获取许可证密钥,请赶快联系 sales@risingwave-labs.com 或者社区小助手吧。
t
。SELECT rw_test_paid_tier();
2设置环境
为了在 RisingWave 中运行时间旅行查询,请参照以下要求设置环境:
确保元存储类型与 SQL 兼容,并至少保留 50 GB 的磁盘空间。默认情况下,RisingWave 使用 PostgreSQL 作为元存储。 系统参数 time_travel_retention_ms
设置为大于 0 的值。该值确定历史数据的保留时间,超过该值的数据将被删除。例如,以下 SQL 命令将系统参数设置为历史数据保留一天。
ALTER SYSTEM SET time_travel_retention_ms = 86400000;
3时间旅行查询的语法
在 SELECT
查询中使用 FOR SYSTEM_TIME AS OF
子句,以访问指定时间点的数据。该子句应包含一个时间值。
根据以下格式指定历史时间。以下查询从表 historic_table
查询历史数据。
Unix 时间戳(以秒为单位)
SELECT * FROM historic_table
FOR SYSTEM_TIME AS OF 1728025608;
日期时间字符串
SELECT * FROM historic_table
FOR SYSTEM_TIME AS OF '2024-10-02T12:13:14-08:30';
相对于当前时间的时间间隔
SELECT * FROM historic_table
FOR SYSTEM_TIME AS OF NOW() - '1' HOUR;
如果指定的时间超出时间旅行期间,查询将报错。
4持久化历史数据
如果需要持久化某个时间点的数据,可以创建表或 sink,这样即使在数据超出时间旅行保留窗口后也能访问数据。如下所示,要保存一小时前的表状态,可以根据历史数据创建新表。
CREATE TABLE table_at_202409202300 AS
SELECT * FROM historic_table
FOR SYSTEM_TIME AS OF NOW() - '1' HOUR;
5自动空间回收
元存储和对象存储中的过时时间旅行数据会在后台自动移除,以释放存储空间。默认配置通常适用于大多数情况,但也支持自定义。
元存储的回收间隔默认设置为 30 秒,也可以通过调整 vacuum_interval_sec
设置来更改此间隔。设置完需要重启元节点以使其生效。对象存储的回收间隔默认设置为 1 天,也可以通过调整两个设置 full_gc_interval_sec
和min_sst_retention_time_sec
来自定义此计划。同样,设置完需要重启元节点以生效。
6结论
随着 RisingWave 成功引入时间旅行查询,我们期待看到客户开发出各种创新用例。从增强金融服务中的欺诈检测和审计追踪,到优化预测性维护,这些应用前景广阔。此外,我们诚邀您试用时间旅行查询以及 2.0 中发布的众多新功能并向我们分享反馈,共同完善 RisingWave 这一广受喜爱的流式数据库系统。
关于 RisingWave
往期推荐
技术内幕