MCPcopy Create free account
hub / github.com/apache/paimon-rust / overwrite

Method overwrite

crates/paimon/src/table/table_commit.rs:121–157  ·  view source on GitHub ↗

Overwrite partitions with new data. When `static_partitions` is `None`, extracts the set of partitions touched by `commit_messages` and overwrites only those (dynamic partition overwrite). When `static_partitions` is `Some`, uses the caller-provided partition spec to determine which partitions to replace (static partition overwrite). A partial spec (not all partition keys specified) uses predicat

(
        &self,
        commit_messages: Vec<CommitMessage>,
        static_partitions: Option<HashMap<String, Option<Datum>>>,
    )

Source from the content-addressed store, hash-verified

119 /// When `static_partitions` is `Some` but `commit_messages` is empty,
120 /// the specified partitions are truncated (all existing data removed, nothing written).
121 pub async fn overwrite(
122 &self,
123 commit_messages: Vec<CommitMessage>,
124 static_partitions: Option<HashMap<String, Option<Datum>>>,
125 ) -> Result<()> {
126 if commit_messages.is_empty() && static_partitions.is_none() {
127 return Ok(());
128 }
129
130 let new_entries = self.messages_to_entries(&commit_messages);
131 let new_index_entries = self.messages_to_index_entries(&commit_messages);
132
133 let partition_filter = if let Some(sp) = static_partitions {
134 let partition_keys = self.table.schema().partition_keys();
135 let partition_fields = self.table.schema().partition_fields();
136 let is_full_spec = partition_keys.iter().all(|k| sp.contains_key(k));
137
138 if is_full_spec {
139 let bytes = self.partitions_to_bytes(&[sp]);
140 Some(PartitionFilter::from_partition_set(
141 bytes,
142 &partition_fields,
143 )?)
144 } else {
145 Some(self.build_static_partition_predicate(&sp, &partition_fields)?)
146 }
147 } else {
148 self.build_dynamic_partition_filter(&commit_messages)?
149 };
150
151 self.try_commit(CommitEntriesPlan::Overwrite {
152 partition_filter,
153 new_entries,
154 new_index_entries,
155 })
156 .await
157 }
158
159 /// Build a predicate-based partition filter from a partial static partition spec.
160 fn build_static_partition_predicate(

Callers 4

write_allMethod · 0.80
test_overwrite_partitionFunction · 0.80

Calls 11

messages_to_entriesMethod · 0.80
partition_keysMethod · 0.80
partition_fieldsMethod · 0.80
partitions_to_bytesMethod · 0.80
try_commitMethod · 0.80
is_emptyMethod · 0.45
schemaMethod · 0.45
iterMethod · 0.45

Tested by 2

test_overwrite_partitionFunction · 0.64