我正在使用 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/