Живые таблицы Delta - Медленно меняющиеся размеры
Можно ли создать механизм медленно меняющихся измерений с помощью таблиц Delta Live Tables? Я хотел бы реализовать что-то вроде этого https://docs.databricks.com/_static/notebooks/merge-in-scd-type-2.html
Но в документах DLT я обнаружил, что «Обработка обновлений из исходных таблиц, например, слияние и удаление, не поддерживается. Для обработки обновлений см. команду ПРИМЕНИТЬ ИЗМЕНЕНИЯ В» — но https://docs.databricks.com/data- Engineering/delta-live-tables/delta-live-tables-cdc.html это только для CDC, у вас есть идеи для SCD?
2 ответа
DLT теперь поддерживает SCD Type 2 в общедоступной предварительной версии. Узнать об этом и посмотреть примеры можно в этом документе
Слияние поддерживается в DLT, см. пример кода ниже.
mergeDF1
.as("merge_tbl1")
.merge(mergeDF2.as("merge_tbl2"), "merge_tbl1.key = merge_tbl2.key")
.whenMatched("merge_tbl1.isCurrent = true AND (merge_tbl2.country <> merge_tbl1.country OR merge_tbl2.region <> merge_tbl1.region)")
.updateExpr(Map(
"isCurrent" -> "false",
"endDate" -> "<date>",
.whenNotMatched()
.insertExpr(Map(
"personId" -> "<personId>",
"personName" -> "<personName>",
"country" -> "<country>",
"region" -> "<region>,
"isCurrent" -> "true",
"effectiveDate" -> "<date>",
"endDate" -> "null"))
.execute()