在数据块中使用增量时间旅行的时间序列

Time Serie with delta time travel in databricks

我将产品价格存储在增量 table 中。 table 的架构是这样的:

id | price |  updated
1  |   3   | 2022-03-21
2  |   4   | 2022-03-20
3  |   3   | 2022-03-20

我使用 id 字段作为主键更新行并更新价格和更新字段。

我正在尝试使用数据块时间旅行获得随时间变化的一系列价格。但是看文档显然我只能看 2 个版本的 table 像这样

%sql
SELECT count(distinct id) - (
SELECT count(distinct id)
FROM table TIMESTAMP AS OF date_sub(current_date(), 7))
FROM table

有没有办法select所有版本的价格都不同?喜欢:不同的价格。

我真的不建议使用时间旅行,原因如下:

  • 如果你的数据经常更新,那么你会有很多版本,你的性能会随着时间的推移而下降,因为处理大量版本(成千上万)会给驱动程序带来很大压力
  • 很难进行历史分析,正如您已经看到的那样 - 对于每个版本,您都需要有子查询和联合数据。

相反,您可以使用两个 tables - 第一个是实际数据,第二个是历史数据,理想情况下,构建 SCD 类型 2(缓慢变化的维度),其中包含价格为哪个时期的标记积极的。您可以使用 Change Data Feed (CDF) functionality to pull changes from first table, and applying them to the second table using MERGE operation. Databricks documentation includes example of using MERGE to build SCD Type 2(尽管没有 CDF)构建第二个 table。

使用这种方法,您可以轻松地进行历史分析,因为所有数据都在同一个 table 中,您不需要使用时间旅行