gpt4 book ai didi

azure - 优化时间戳范围查询的 Delta Lake 分区

转载 作者:行者123 更新时间:2023-12-02 07:42:13 25 4
gpt4 key购买 nike

我正在使用 Databricks 中的 Delta 表,该表由 Year 列分区,并且表中有一个时间戳列。我想优化查询以获取特定时间戳范围内的数据(例如,2019 年 1 月 21 日至 2019 年 12 月 4 日之间)。

df_filtered = df.filter((df.timestamp >= "2019-01-21") & (df.timestamp <= "2019-12-04"))

我知道分区可以帮助提高性能,但我不确定在基于时间戳范围进行查询时如何有效地利用它。尽管我没有直接查询 Year 分区列,但我想利用分区修剪来仅读取相关分区。

如何确保Year分区列与时间戳数据有效关联,以便分区修剪最适合时间戳范围查询?

最佳答案

Delta Table batch reads and writes 的文档提及:

Delta Lake may be able to generate partition filters for a query whenever a partition column is defined by one of the following expressions:

  • YEAR(col) and the type of col is TIMESTAMP.
  • (...)

这意味着如果您有一个表定义为:

CREATE TABLE a_table (
timestamp TIMESTAMP,
year INT GENERATED ALWAYS AS year(timestamp),
[other columns]
) PARTITIONED BY (year);

然后 Databricks 将能够分析 timestamp 列上的过滤条件,并导出 year 的适当分区过滤器。以你的例子:

df = spark.table("a_table")
df_filtered = df.filter((df.timestamp >= "2019-01-21") & (df.timestamp <= "2019-12-04"))

它将添加分区过滤器year = 2019

关于azure - 优化时间戳范围查询的 Delta Lake 分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77134384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com