class DeltaMergeBuilder extends AnalysisHelper with Logging
Builder to specify how to merge data from source DataFrame into the target Delta table.
You can specify any number of whenMatched and whenNotMatched clauses.
Here are the constraints on these clauses.
- whenMatchedclauses:- The condition in a whenMatchedclause is optional. However, if there are multiplewhenMatchedclauses, then only the last one may omit the condition.
- When there are more than one whenMatchedclauses and there are conditions (or the lack of) such that a row satisfies multiple clauses, then the action for the first clause satisfied is executed. In other words, the order of thewhenMatchedclauses matters.
- If none of the whenMatchedclauses match a source-target row pair that satisfy the merge condition, then the target rows will not be updated or deleted.
- If you want to update all the columns of the target Delta table with the
      corresponding column of the source DataFrame, then you can use the
      whenMatched(...).updateAll(). This is equivalent towhenMatched(...).updateExpr(Map( ("col1", "source.col1"), ("col2", "source.col2"), ...))
 
- The condition in a 
- whenNotMatchedclauses:- The condition in a whenNotMatchedclause is optional. However, if there are multiplewhenNotMatchedclauses, then only the last one may omit the condition.
- When there are more than one whenNotMatchedclauses and there are conditions (or the lack of) such that a row satisfies multiple clauses, then the action for the first clause satisfied is executed. In other words, the order of thewhenNotMatchedclauses matters.
- If no whenNotMatchedclause is present or if it is present but the non-matching source row does not satisfy the condition, then the source row is not inserted.
- If you want to insert all the columns of the target Delta table with the
      corresponding column of the source DataFrame, then you can use
      whenNotMatched(...).insertAll(). This is equivalent towhenNotMatched(...).insertExpr(Map( ("col1", "source.col1"), ("col2", "source.col2"), ...))
 
- The condition in a 
- whenNotMatchedBySourceclauses:- The condition in a whenNotMatchedBySourceclause is optional. However, if there are multiplewhenNotMatchedBySourceclauses, then only the last one may omit the condition.
- When there are more than one whenNotMatchedBySourceclauses and there are conditions (or the lack of) such that a row satisfies multiple clauses, then the action for the first clause satisfied is executed. In other words, the order of thewhenNotMatchedBySourceclauses matters.
- If no whenNotMatchedBySourceclause is present or if it is present but the non-matching target row does not satisfy any of thewhenNotMatchedBySourceclause condition, then the target row will not be updated or deleted.
 
- The condition in a 
Scala example to update a key-value Delta table with new key-values from a source DataFrame:
deltaTable .as("target") .merge( source.as("source"), "target.key = source.key") .withSchemaEvolution() .whenMatched() .updateExpr(Map( "value" -> "source.value")) .whenNotMatched() .insertExpr(Map( "key" -> "source.key", "value" -> "source.value")) .whenNotMatchedBySource() .updateExpr(Map( "value" -> "target.value + 1")) .execute()
Java example to update a key-value Delta table with new key-values from a source DataFrame:
deltaTable .as("target") .merge( source.as("source"), "target.key = source.key") .withSchemaEvolution() .whenMatched() .updateExpr( new HashMap<String, String>() {{ put("value", "source.value"); }}) .whenNotMatched() .insertExpr( new HashMap<String, String>() {{ put("key", "source.key"); put("value", "source.value"); }}) .whenNotMatchedBySource() .updateExpr( new HashMap<String, String>() {{ put("value", "target.value + 1"); }}) .execute();
- Since
- 0.3.0 
- Alphabetic
- By Inheritance
- DeltaMergeBuilder
- Logging
- AnalysisHelper
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
-  new DeltaMergeBuilder(targetTable: DeltaTable, source: DataFrame, onCondition: Column, whenClauses: Seq[DeltaMergeIntoClause])
Type Members
-   implicit  class LogStringContext extends AnyRef- Definition Classes
- Logging
 
Value Members
-   final  def !=(arg0: Any): Boolean- Definition Classes
- AnyRef → Any
 
-   final  def ##: Int- Definition Classes
- AnyRef → Any
 
-   final  def ==(arg0: Any): Boolean- Definition Classes
- AnyRef → Any
 
-   final  def asInstanceOf[T0]: T0- Definition Classes
- Any
 
-    def clone(): AnyRef- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @IntrinsicCandidate() @native()
 
-   final  def eq(arg0: AnyRef): Boolean- Definition Classes
- AnyRef
 
-    def equals(arg0: AnyRef): Boolean- Definition Classes
- AnyRef → Any
 
-    def execute(): DataFrameExecute the merge operation based on the built matched and not matched actions. Execute the merge operation based on the built matched and not matched actions. - Since
- 0.3.0 
 
-   final  def getClass(): Class[_ <: AnyRef]- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
 
-    def hashCode(): Int- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
 
-    def improveUnsupportedOpError[T](f: => T): T- Attributes
- protected
- Definition Classes
- AnalysisHelper
 
-    def initializeLogIfNecessary(isInterpreter: Boolean, silent: Boolean): Boolean- Attributes
- protected
- Definition Classes
- Logging
 
-    def initializeLogIfNecessary(isInterpreter: Boolean): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-   final  def isInstanceOf[T0]: Boolean- Definition Classes
- Any
 
-    def isTraceEnabled(): Boolean- Attributes
- protected
- Definition Classes
- Logging
 
-    def log: Logger- Attributes
- protected
- Definition Classes
- Logging
 
-    def logDebug(msg: => String, throwable: Throwable): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logDebug(entry: LogEntry, throwable: Throwable): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logDebug(entry: LogEntry): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logDebug(msg: => String): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logError(msg: => String, throwable: Throwable): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logError(entry: LogEntry, throwable: Throwable): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logError(entry: LogEntry): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logError(msg: => String): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logInfo(msg: => String, throwable: Throwable): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logInfo(entry: LogEntry, throwable: Throwable): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logInfo(entry: LogEntry): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logInfo(msg: => String): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logName: String- Attributes
- protected
- Definition Classes
- Logging
 
-    def logTrace(msg: => String, throwable: Throwable): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logTrace(entry: LogEntry, throwable: Throwable): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logTrace(entry: LogEntry): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logTrace(msg: => String): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logWarning(msg: => String, throwable: Throwable): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logWarning(entry: LogEntry, throwable: Throwable): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logWarning(entry: LogEntry): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def logWarning(msg: => String): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-   final  def ne(arg0: AnyRef): Boolean- Definition Classes
- AnyRef
 
-   final  def notify(): Unit- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
 
-   final  def notifyAll(): Unit- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
 
-    def resolveReferencesForExpressions(sparkSession: SparkSession, exprs: Seq[Expression], planProvidingAttrs: LogicalPlan): Seq[Expression]- Attributes
- protected
- Definition Classes
- AnalysisHelper
 
-   final  def synchronized[T0](arg0: => T0): T0- Definition Classes
- AnyRef
 
-    def toDataset(sparkSession: SparkSession, logicalPlan: LogicalPlan): Dataset[Row]- Attributes
- protected
- Definition Classes
- AnalysisHelper
 
-    def toString(): String- Definition Classes
- AnyRef → Any
 
-    def tryResolveReferences(sparkSession: SparkSession)(expr: Expression, planContainingExpr: LogicalPlan): Expression- Attributes
- protected
- Definition Classes
- AnalysisHelper
 
-    def tryResolveReferencesForExpressions(sparkSession: SparkSession)(exprs: Seq[Expression], plansProvidingAttrs: Seq[LogicalPlan]): Seq[Expression]- Attributes
- protected
- Definition Classes
- AnalysisHelper
 
-    def tryResolveReferencesForExpressions(sparkSession: SparkSession, exprs: Seq[Expression], planContainingExpr: LogicalPlan): Seq[Expression]- Attributes
- protected
- Definition Classes
- AnalysisHelper
 
-   final  def wait(arg0: Long, arg1: Int): Unit- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
 
-   final  def wait(arg0: Long): Unit- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
 
-   final  def wait(): Unit- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
 
-    def whenMatched(condition: Column): DeltaMergeMatchedActionBuilderBuild the actions to perform when the merge condition was matched and the given conditionis true.Build the actions to perform when the merge condition was matched and the given conditionis true. This returns a DeltaMergeMatchedActionBuilder object which can be used to specify how to update or delete the matched target table row with the source row.- condition
- boolean expression as a Column object 
 - Since
- 0.3.0 
 
-    def whenMatched(condition: String): DeltaMergeMatchedActionBuilderBuild the actions to perform when the merge condition was matched and the given conditionis true.Build the actions to perform when the merge condition was matched and the given conditionis true. This returns DeltaMergeMatchedActionBuilder object which can be used to specify how to update or delete the matched target table row with the source row.- condition
- boolean expression as a SQL formatted string 
 - Since
- 0.3.0 
 
-    def whenMatched(): DeltaMergeMatchedActionBuilderBuild the actions to perform when the merge condition was matched. Build the actions to perform when the merge condition was matched. This returns DeltaMergeMatchedActionBuilder object which can be used to specify how to update or delete the matched target table row with the source row. - Since
- 0.3.0 
 
-    def whenNotMatched(condition: Column): DeltaMergeNotMatchedActionBuilderBuild the actions to perform when the merge condition was not matched and the given conditionis true.Build the actions to perform when the merge condition was not matched and the given conditionis true. This returns DeltaMergeMatchedActionBuilder object which can be used to specify how to insert the new sourced row into the target table.- condition
- boolean expression as a Column object 
 - Since
- 0.3.0 
 
-    def whenNotMatched(condition: String): DeltaMergeNotMatchedActionBuilderBuild the actions to perform when the merge condition was not matched and the given conditionis true.Build the actions to perform when the merge condition was not matched and the given conditionis true. This returns DeltaMergeMatchedActionBuilder object which can be used to specify how to insert the new sourced row into the target table.- condition
- boolean expression as a SQL formatted string 
 - Since
- 0.3.0 
 
-    def whenNotMatched(): DeltaMergeNotMatchedActionBuilderBuild the action to perform when the merge condition was not matched. Build the action to perform when the merge condition was not matched. This returns DeltaMergeNotMatchedActionBuilder object which can be used to specify how to insert the new sourced row into the target table. - Since
- 0.3.0 
 
-    def whenNotMatchedBySource(condition: Column): DeltaMergeNotMatchedBySourceActionBuilderBuild the actions to perform when the merge condition was not matched by the source and the given conditionis true.Build the actions to perform when the merge condition was not matched by the source and the given conditionis true. This returns DeltaMergeNotMatchedBySourceActionBuilder object which can be used to specify how to update or delete the target table row .- condition
- boolean expression as a Column object 
 - Since
- 2.3.0 
 
-    def whenNotMatchedBySource(condition: String): DeltaMergeNotMatchedBySourceActionBuilderBuild the actions to perform when the merge condition was not matched by the source and the given conditionis true.Build the actions to perform when the merge condition was not matched by the source and the given conditionis true. This returns DeltaMergeNotMatchedBySourceActionBuilder object which can be used to specify how to update or delete the target table row.- condition
- boolean expression as a SQL formatted string 
 - Since
- 2.3.0 
 
-    def whenNotMatchedBySource(): DeltaMergeNotMatchedBySourceActionBuilderBuild the actions to perform when the merge condition was not matched by the source. Build the actions to perform when the merge condition was not matched by the source. This returns DeltaMergeNotMatchedBySourceActionBuilder object which can be used to specify how to update or delete the target table row. - Since
- 2.3.0 
 
-    def withLogContext(context: Map[String, String])(body: => Unit): Unit- Attributes
- protected
- Definition Classes
- Logging
 
-    def withSchemaEvolution(): DeltaMergeBuilderEnable schema evolution for the merge operation. Enable schema evolution for the merge operation. This allows the schema of the target table/columns to be automatically updated based on the schema of the source table/columns. - Since
- 3.2.0 
 
Deprecated Value Members
-    def finalize(): Unit- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated
- (Since version 9)