Skip to main content

CompactionOptions

Struct CompactionOptions 

Source
pub struct CompactionOptions {
Show 21 fields pub target_rows_per_fragment: usize, pub max_rows_per_group: usize, pub max_bytes_per_file: Option<usize>, pub materialize_deletions: bool, pub materialize_deletions_threshold: f32, pub num_threads: Option<usize>, pub batch_size: Option<usize>, pub io_buffer_size: Option<u64>, pub defer_index_remap: bool, pub index_remap_mode: IndexRemapMode, pub compaction_mode: Option<CompactionMode>, pub enable_binary_copy: bool, pub enable_binary_copy_force: bool, pub binary_copy_read_batch_bytes: Option<usize>, pub max_source_fragments: Option<usize>, pub max_source_rows: Option<usize>, pub max_source_bytes: Option<u64>, pub excluded_fragment_ids: Vec<u32>, pub max_overlays_per_fragment: Option<usize>, pub data_storage_version: Option<LanceFileVersion>, pub transaction_properties: Option<Arc<HashMap<String, String>>>,
}
Expand description

Options to be passed to compact_files.

Fields§

§target_rows_per_fragment: usize

Target number of rows per file. Defaults to 1 million.

This is used to determine which fragments need compaction, as any fragments that have fewer rows than this value will be candidates for compaction.

§max_rows_per_group: usize

Max number of rows per group

This does not affect which fragments need compaction, but does affect how they are re-written if selected.

§max_bytes_per_file: Option<usize>

Max number of bytes per file

This does not affect which frgamnets need compaction, but does affect how they are re-written if selected.

If not specified then the default (see WriteParams) will be used.

§materialize_deletions: bool

Whether to compact fragments with deletions so there are no deletions. Defaults to true.

§materialize_deletions_threshold: f32

The fraction of rows that need to be deleted in a fragment before materializing the deletions. Defaults to 10% (0.1). Setting to zero (or lower) will materialize deletions for all fragments with deletions. Setting above 1.0 will never materialize deletions.

§num_threads: Option<usize>

The number of threads to use (how many compaction tasks to run in parallel). Defaults to the number of compute-intensive CPUs. Not used when running tasks manually using plan_compaction

§batch_size: Option<usize>

The batch size to use when scanning the input fragments. If not specified then the default (see crate::dataset::Scanner::batch_size) will be used.

§io_buffer_size: Option<u64>

The number of bytes to allow to queue up in the I/O buffer when scanning the input fragments. If not specified then the default (see crate::dataset::Scanner::io_buffer_size) will be used.

Increasing this can avoid a deadlock that occurs when a single batch of data is larger than the I/O buffer size.

§defer_index_remap: bool

Whether to defer remapping indices during compaction. If true, indices will not be remapped during this compaction operation. Instead, the fragment reuse index is updated and will be used to perform remapping later.

§index_remap_mode: IndexRemapMode

How the old-to-new row-address mapping used to remap indices is built. Defaults to IndexRemapMode::Direct.

§compaction_mode: Option<CompactionMode>

The compaction mode to use. When set, this takes priority over the deprecated enable_binary_copy and enable_binary_copy_force fields.

Defaults to None (falls back to legacy boolean fields).

§enable_binary_copy: bool
👎Deprecated:

Use compaction_mode instead

Deprecated: use compaction_mode instead.

§enable_binary_copy_force: bool
👎Deprecated:

Use compaction_mode instead

Deprecated: use compaction_mode instead.

§binary_copy_read_batch_bytes: Option<usize>

The batch size in bytes for reading during binary copy operations. Controls how much data is read at once when performing binary copy. Defaults to 16MB (16 * 1024 * 1024).

§max_source_fragments: Option<usize>

Maximum number of source fragments to compact in a single run. When set, tasks are included in the plan until adding the next task would exceed this limit. This allows for incremental compaction (e.g., compact 20 fragments at a time). Defaults to None (no limit, all eligible fragments are compacted).

§max_source_rows: Option<usize>

Maximum number of source rows to compact in a single run. Rows are counted as live rows (physical rows minus soft-deleted rows). When set, tasks are included in the plan until adding the next task would exceed this limit. Defaults to None (no limit).

§max_source_bytes: Option<u64>

Maximum number of source bytes to compact in a single run, measured as the total size of the source fragments’ data and overlay files. When set, tasks are included in the plan until adding the next task would exceed this limit. Blob v2 payloads live in separate blob files and are not counted, so this is not a cap on total compaction I/O for datasets with blob columns. Defaults to None (no limit).

§excluded_fragment_ids: Vec<u32>

Fragment IDs to exclude from compaction planning.

Excluded fragments act as boundaries between adjacent compaction candidates, so fragments on opposite sides of an exclusion are never combined into the same task. IDs that are duplicated or absent from the dataset are ignored. Defaults to an empty list.

§max_overlays_per_fragment: Option<usize>

Maximum number of data overlay files a fragment may carry before it is fully compacted. When set, any fragment with more than this many overlays is rewritten into a fresh fragment with its overlays (and deletions) materialized into the base data, dropping the fragment from any index left stale by those overlays. Defaults to Some(10). Set to Some(0) to compact every fragment that carries any overlay, or None to disable the overlay-count trigger entirely.

§data_storage_version: Option<LanceFileVersion>

Exact data file version for compacted output.

If omitted, use the dataset’s default write version without changing it. The planner resolves release selectors before distributing tasks. Targets cannot cross the V1/V2 boundary.

let options = CompactionOptions {
    data_storage_version: Some(LanceFileVersion::V2_2),
    ..Default::default()
};
§transaction_properties: Option<Arc<HashMap<String, String>>>

Transaction properties to store with this commit.

These key-value pairs are stored in the transaction file and can be read later to identify the source of the commit (e.g., job_id for tracking completed compaction jobs).

Implementations§

Source§

impl CompactionOptions

Source

pub fn from_dataset_config(config: &HashMap<String, String>) -> Result<Self>

Create CompactionOptions by starting with defaults and applying any overrides found in the dataset manifest config.

Config keys are prefixed with lance.compaction. and map to fields:

  • lance.compaction.target_rows_per_fragment
  • lance.compaction.max_rows_per_group
  • lance.compaction.max_bytes_per_file
  • lance.compaction.materialize_deletions
  • lance.compaction.materialize_deletions_threshold
  • lance.compaction.defer_index_remap
  • lance.compaction.index_remap_mode
  • lance.compaction.batch_size
  • lance.compaction.io_buffer_size
  • lance.compaction.compaction_mode
  • lance.compaction.binary_copy_read_batch_bytes
  • lance.compaction.max_source_fragments
  • lance.compaction.max_source_rows
  • lance.compaction.max_source_bytes
  • lance.compaction.max_overlays_per_fragment
  • lance.compaction.data_storage_version
Source

pub fn apply_dataset_config( &mut self, config: &HashMap<String, String>, ) -> Result<()>

Apply overrides from the dataset manifest config to this options struct.

Only fields with corresponding config keys are modified; other fields retain their current values.

Source

pub fn validate(&mut self) -> Result<()>

Source

pub fn compaction_mode(&self) -> CompactionMode

Returns the effective CompactionMode, preferring the new compaction_mode field and falling back to the deprecated boolean fields for backwards compatibility.

Source

pub fn transaction_properties(self, properties: HashMap<String, String>) -> Self

Set transaction properties to store in the commit manifest.

Trait Implementations§

Source§

impl Clone for CompactionOptions

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CompactionOptions

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CompactionOptions

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for CompactionOptions

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for CompactionOptions

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for CompactionOptions

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for CompactionOptions

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more