我尝试在Azure Synapse Notebook中使用python在维度表中表示SCD类型2。这就是我的代码目前的样子:
(
existing_table.alias(“old”)
.merge(
new_table.alias(“new”),
“old.keycol = new.keycol”
)
.whenMatchedUpdate(condition = “old.CurrentRecord = true AND old.Rate <> new.rate”
,set = {“old.RecordEndDate” : “new.RecordStartDate”
,”old.CurrentRecord” : “false”
}
)
.whenNotMatchedInsert(values = {“old.surrogatekey” : max(“old.surrogatekey”)+1
,”old.keycol” : “new.keycol”
,”old.Rate” : “new.Rate”
,”old.RecordStartDate” : “new.RecorStartDate”
,”old.CurrentRecord” : “true”
}
)
.execute()
)
我得到一个错误,说:
AnalysisException: cannot resolve old.surrogatekey in INSERT clause given colums new.keycol, new.Rate, new.RecordStartDate
我尝试做的是从表 existing_table 中引用 keycol 列。我想从***keycol***中得到最大值,加1,然后使用结果值作为合并的输入值。
我对这一切都是新的,我真的很感激任何帮助,我可以得到这个完成。太感谢了
1条答案
按热度按时间cnwbcb6i1#
我尝试了下面的代码,通过跟踪维度数据的历史更改并为新记录分配唯一的键值来执行SCD类型2行为。
agg
函数查找existing_df中“keycol列的最大值。如果已有记录,则通过加1计算下一个可用键值;否则,它将设置为1。window_spec
,用于根据“valid_from”列按降序对existing_df中的行进行排序。row_number()
对existing_df中的行进行排序,并向DataFrame添加“row_number”列。