【问题标题】:Reading version specific files delta-lake读取特定于版本的文件 delta-lake
【发布时间】:2022-01-28 04:13:28
【问题描述】:

我想在某个时间戳/版本之后读取增量数据。逻辑here建议读取整个数据并读取特定版本,然后找到增量。由于我的数据很大,我宁愿不读取整个数据,如果能够以某种方式仅读取某个时间戳/版本之后的数据。

有什么建议吗?

【问题讨论】:

  • 需要特定时间后的数据,还是特定时间的数据快照?
  • @AlexOtt 我需要数据。但是数据快照到底是什么意思?
  • Delta 中的数据按版本组织 - 但这是给定时间段内数据的快照,可能包含不同的时间戳等。

标签: apache-spark pyspark delta-lake


【解决方案1】:

如果您需要在某个特定日期之后具有时间戳的数据,那么您仍然需要遍历所有数据。但如果您正确组织数据,Spark 和 Delta Lake 可能会有所帮助:

  • 你可以有基于时间的分区,例如,按天/周/月存储数据,所以当 Spark 读取数据时,它可能只读取特定的分区(执行所谓的谓词下推),例如,df = spark.read.format("delta").load(...).filter("day > '2021-12-29'") - 这不仅适用于 Delta,也适用于其他格式。 Delta Lake 在这里可能也有帮助,因为它支持所谓的generated columns,您不需要显式创建分区列,但允许 Spark 根据其他列为您生成它

  • 在分区之上,Parquet(以及基于 Parquet 的 Delta)等格式允许跳过读取所有数据,因为它们在文件中维护最小/最大统计信息。但是你仍然需要阅读这些文件

  • 在 Databricks 上,Delta Lake 具有更多选择性读取数据的功能 - 例如,Parquet 在文件中的最小/最大统计信息可以保存到事务日志中,因此 Delta 不需要打开文件检查时间戳是否在给定范围内 - 这种技术称为data skipping。额外的性能可能来自ZOrdering 的数据,这些数据将使数据更接近彼此 - 当您需要按多列过滤时特别有用

【讨论】:

    猜你喜欢
    • 2021-12-04
    • 2023-03-23
    • 2022-12-18
    • 2021-12-21
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    相关资源
    最近更新 更多