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.
whenMatched
clauses:- The condition in a
whenMatched
clause is optional. However, if there are multiplewhenMatched
clauses, then only the last one may omit the condition. - When there are more than one
whenMatched
clauses 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 thewhenMatched
clauses matters. - If none of the
whenMatched
clauses 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
whenNotMatched
clauses:- The condition in a
whenNotMatched
clause is optional. However, if there are multiplewhenNotMatched
clauses, then only the last one may omit the condition. - When there are more than one
whenNotMatched
clauses 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 thewhenNotMatched
clauses matters. - If no
whenNotMatched
clause 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
whenNotMatchedBySource
clauses:- The condition in a
whenNotMatchedBySource
clause is optional. However, if there are multiplewhenNotMatchedBySource
clauses, then only the last one may omit the condition. - When there are more than one
whenNotMatchedBySource
clauses 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 thewhenNotMatchedBySource
clauses matters. - If no
whenNotMatchedBySource
clause is present or if it is present but the non-matching target row does not satisfy any of thewhenNotMatchedBySource
clause 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
- All
Instance Constructors
- new DeltaMergeBuilder(targetTable: DeltaTable, source: DataFrame, onCondition: Column, whenClauses: Seq[DeltaMergeIntoClause])
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( ... ) @native()
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
execute(): Unit
Execute 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
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
improveUnsupportedOpError(f: ⇒ Unit): Unit
- 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(msg: ⇒ String): Unit
- Attributes
- protected
- Definition Classes
- Logging
-
def
logError(msg: ⇒ String, throwable: Throwable): 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(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(msg: ⇒ String): Unit
- Attributes
- protected
- Definition Classes
- Logging
-
def
logWarning(msg: ⇒ String, throwable: Throwable): 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
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @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(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
def
whenMatched(condition: Column): DeltaMergeMatchedActionBuilder
Build the actions to perform when the merge condition was matched and the given
condition
is true.Build the actions to perform when the merge condition was matched and the given
condition
is 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): DeltaMergeMatchedActionBuilder
Build the actions to perform when the merge condition was matched and the given
condition
is true.Build the actions to perform when the merge condition was matched and the given
condition
is 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(): DeltaMergeMatchedActionBuilder
Build 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): DeltaMergeNotMatchedActionBuilder
Build the actions to perform when the merge condition was not matched and the given
condition
is true.Build the actions to perform when the merge condition was not matched and the given
condition
is 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): DeltaMergeNotMatchedActionBuilder
Build the actions to perform when the merge condition was not matched and the given
condition
is true.Build the actions to perform when the merge condition was not matched and the given
condition
is 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(): DeltaMergeNotMatchedActionBuilder
Build 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): DeltaMergeNotMatchedBySourceActionBuilder
Build the actions to perform when the merge condition was not matched by the source and the given
condition
is true.Build the actions to perform when the merge condition was not matched by the source and the given
condition
is 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): DeltaMergeNotMatchedBySourceActionBuilder
Build the actions to perform when the merge condition was not matched by the source and the given
condition
is true.Build the actions to perform when the merge condition was not matched by the source and the given
condition
is 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(): DeltaMergeNotMatchedBySourceActionBuilder
Build 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
withSchemaEvolution(): DeltaMergeBuilder
Enable 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