Я использую дельта-озеро ("io.delta" %% "delta-core"% "0.4.0") и объединяю в foreachBatch, например:
foreachBatch { (s, batchid) =>
deltaTable.alias("t")
.merge(
s.as("s"),
"s.eventid = t.eventid and t.categories in ('a1', 'a2')")
.whenMatched("s.eventtime < t.eventtime").updateAll()
.whenNotMatched().insertAll()
.execute()
}
Дельта-таблица разделена на категории. Если я добавлю фильтр разделов, например 'и t.categories в (' a1 ',' a2 ')', из искрового графа я вижу, что ввод - это не вся таблица. Я думаю, что это произошло с обрезкой разделов. Однако, если я сделаю: «s.eventid = t.eventid and t.categories = s.categories», он все равно загрузит все данные из дельта-таблицы. Я ожидаю, что он может автоматически определять, какие разделы следует перейти, чтобы выполнить соединение, своего рода выталкивание. Возможно ли сокращение раздела без указания конкретных значений раздела? Я также пытался добавить ("spark.databricks.optimizer.dynamicPartitionPruning", "true"), но не работал.
Спасибо