delta-table merge sql-如何更新目标中的所有列,除了update子句中的一列之外 我试图在Delta表(0.7.0版)上执行合并,执行插入、更新和删除,并且在合并语句中有一个场景,对于UPDATE子句,考虑除了一列以外的所有列。

delta-table merge sql-如何更新目标中的所有列,除了update子句中的一列之外 我试图在Delta表(0.7.0版)上执行合并,执行插入、更新和删除,并且在合并语句中有一个场景,对于UPDATE子句,考虑除了一列以外的所有列。,sql,delta-lake,Sql,Delta Lake,例如,我正在更新表中的记录,该表捕获了crt_ts和upd_ts。crt_ts仅为新记录填充,在更新过程中,我们不应更新此列 MERGE INTO Target_table tgt USING Source_table src ON src.pk_col = tgt.pk_col WHEN MATCHED AND src.operation=="DELETE" THEN DELETE WHEN MATCHED AND src.operation=="UPDATE&q

例如,我正在更新表中的记录,该表捕获了crt_ts和upd_ts。crt_ts仅为新记录填充,在更新过程中,我们不应更新此列

MERGE INTO Target_table tgt
USING Source_table src
ON src.pk_col = tgt.pk_col
WHEN MATCHED AND src.operation=="DELETE" THEN DELETE
WHEN MATCHED AND src.operation=="UPDATE" THEN UPDATE SET * -- except crt_ts column
WHEN NOT MATCHED AND src.operation!="DELETE" THEN INSERT *
我正在考虑与目标表连接,获取已有记录的crt\t,并将其与当前时间戳合并,以将值传递给crt\t。如果目标表很大,此连接将成为瓶颈

另一种方法是在SET子句中指定各个列进行更新,当我们有更多列的表时,这看起来很乏味


在不执行与目标表的连接和编写庞大的SET子句的情况下,还有其他可能的执行方法吗?

您是直接执行此SQL代码还是从Python/Scala执行此SQL代码?SQL存储在.ini文件中。pyspark将通过读取配置(.ini)获取sql并执行它。