- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-10-2025 12:13 PM
Hi @seefoods
Let me break down your questions about Delta Lake write operations and streaming strategies.
Static vs Streaming Write Operations
The write modes behave differently between static writes and streaming (autoloader):
Static Write Operations:
overwrite: Replaces entire table/partition data
append: Adds new records without checking for duplicates
merge: Uses MERGE SQL operations for upserts/complex logic
Streaming Write Operations:
complete: Outputs entire result table each trigger (rare use case)
update: Not a standard streaming mode - you might be thinking of append
append: Default streaming mode - adds new records as they arrive
The key difference is that streaming operations are incremental and trigger-based, while static operations process the entire dataset at once.
Write Modes in Streaming Context
append: Most common for streaming. Processes new data incrementally
complete: Rewrites entire output each trigger - only works with aggregations that can be fully recomputed
update: This isn't a standard Spark streaming output mode. You might be confusing it with append or thinking of update operations within foreachBatch
Idempotency Strategies for Delta Lake
For idempotent writes to Delta Lake, you have two main approaches:
1. Direct writeStream with Deduplication
# Example with built-in deduplication
df.writeStream \
.option("checkpointLocation", checkpoint_path) \
.option("mergeSchema", "true") \
.trigger(availableNow=True) \
.table("target_table")
2. foreachBatch with Custom Logic
def upsert_to_delta(microBatchDF, batchId):
microBatchDF.createOrReplaceTempView("updates")
microBatchDF._jdf.sparkSession().sql("""
MERGE INTO target_table t
USING updates u ON t.id = u.id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *
""")
df.writeStream \
.foreachBatch(upsert_to_delta) \
.option("checkpointLocation", checkpoint_path) \
.trigger(availableNow=True) \
.start()
Recommended Strategy for Idempotency
Use foreachBatch when you need:
- Complex merge logic
- Multiple target tables
- Custom deduplication logic
- Cross-batch deduplication
Use direct writeStream when you have:
- Simple append scenarios
- Natural deduplication keys
- Partitioned data that naturally avoids duplicates