pub struct Table { /* private fields */ }Expand description
An exact immutable table version.
Writing a table produces its next version without publishing it: nothing changes in the
Catalog until a Commit stages the new version and publishes.
Implementations§
Source§impl Table
impl Table
Sourcepub async fn write_blob(
&self,
media_type: &str,
max_bytes: u64,
input: BlobStream,
) -> Result<Blob, Error>
pub async fn write_blob( &self, media_type: &str, max_bytes: u64, input: BlobStream, ) -> Result<Blob, Error>
Stream a dedicated payload into this Table’s storage before publishing its row.
Enforces max_bytes while consuming the stream. Failure returns no reference;
cancellation aborts an active upload when possible. A process crash may leave
an unreferenced object for retention cleanup. This does not publish a row.
Source§impl Table
impl Table
Sourcepub async fn plan_changes(
&self,
since: &Table,
columns: Option<Vec<String>>,
) -> Result<ChangePlan, Error>
pub async fn plan_changes( &self, since: &Table, columns: Option<Vec<String>>, ) -> Result<ChangePlan, Error>
How this version changed since since, from version metadata only: for each fragment,
whether since has it at the same positions, with the row IDs patched and deleted since,
or whether it was added since, with the row IDs appended since and those a rewrite
carried over. columns names the columns whose changes count; all when absent. since
must be this version or one of its ancestors.
Sourcepub async fn changes_since(
&self,
since: &Table,
options: ChangeOptions,
) -> Result<Scan, Error>
pub async fn changes_since( &self, since: &Table, options: ChangeOptions, ) -> Result<Scan, Error>
The rows that changed since since, with their ChangeKind and row ID, as one scan.
A row a rewrite carried without changing it is not reported; across an overwrite of the
whole table every old row is deleted and every new row inserted. The filter applies to
each image, and an update is reported when either image matches. Before images are read
from since with the same columns and must have this version’s names and types there.
The scan has no splits to read by work item.
Source§impl Table
impl Table
Sourcepub async fn column_writer(
&self,
fields: SchemaRef,
) -> Result<ColumnWrite, Error>
pub async fn column_writer( &self, fields: SchemaRef, ) -> Result<ColumnWrite, Error>
Begin writing values for new nullable fields of this table, which join its schema in
its next version. Rows the write gives no values read NULL, so values may follow over
several versions.
Sourcepub async fn add_columns(
&self,
columns: Vec<NamedExpression>,
) -> Result<Table, Error>
pub async fn add_columns( &self, columns: Vec<NamedExpression>, ) -> Result<Table, Error>
Write the next version of this table with a new nullable column for each of columns,
filled for every row with the expression’s value over that row.
Each fragment is read in stored order with the expressions as its projection and written whole, several fragments at once.
Source§impl Table
impl Table
Sourcepub async fn merge_rows(
&self,
source: impl IntoArrowStream,
on: &[&str],
actions: MergeActions,
) -> Result<MergedRows, Error>
pub async fn merge_rows( &self, source: impl IntoArrowStream, on: &[&str], actions: MergeActions, ) -> Result<MergedRows, Error>
Write the next version of this table with source merged into it by the on columns,
as actions say: one version with every patch, deletion and appended row.
The source is held in memory, so a merge suits batches of upserts; join larger sources in DataFusion. Duplicate source keys are an error, and null keys match nothing. One source row may match several table rows and updates all of them. A matched row whose values are unchanged is not written. Unless unmatched table rows are deleted, the table scan is pruned by the bounds of the source’s integer and string keys. When nothing changes, nothing is written and the result holds this table.
Source§impl Table
impl Table
Sourcepub fn identity(&self) -> TableIdentity
pub fn identity(&self) -> TableIdentity
Exact immutable identity selected by this handle.
Sourcepub fn resolved_address(&self) -> Option<&ResourceAddress>
pub fn resolved_address(&self) -> Option<&ResourceAddress>
Canonical path@v<version> provenance, when opened through a resource path.
Tables opened by IDs, and versions written from a table, have no resource path.
Sourcepub async fn maintain(&self, run: Run) -> Result<Option<TaskHandle>, Error>
pub async fn maintain(&self, run: Run) -> Result<Option<TaskHandle>, Error>
Submit maintenance of this table’s latest version on the branch it was opened from.
Maintenance compacts and reclusters, publishing each step as a new version; its
result lists them. Returns None when maintenance of this table and branch is
already waiting to run.
Sourcepub async fn scan(&self, options: ScanOptions) -> Result<Scan, Error>
pub async fn scan(&self, options: ScanOptions) -> Result<Scan, Error>
Open a scan with fixed projection, predicate, schema, and execution binding.
Metadata is resolved once. Batches are read when its streams are polled.
Sourcepub async fn append(&self, input: impl IntoArrowStream) -> Result<Table, Error>
pub async fn append(&self, input: impl IntoArrowStream) -> Result<Table, Error>
Write the next version of this table: its rows followed by input.
Sourcepub async fn overwrite(
&self,
input: impl IntoArrowStream,
) -> Result<Table, Error>
pub async fn overwrite( &self, input: impl IntoArrowStream, ) -> Result<Table, Error>
Write the next version of this table with only the rows of input.
Sourcepub async fn delete_rows(
&self,
filter: Option<Expression>,
) -> Result<DeletedRows, Error>
pub async fn delete_rows( &self, filter: Option<Expression>, ) -> Result<DeletedRows, Error>
Write the next version of this table without the visible rows matching filter, or
without any rows when there is no filter.
Retained rows keep their stable row IDs. When no row matches, nothing is written and the result holds this table. Unsupported predicates fail before anything is written.
Sourcepub async fn recover_write(
&self,
receipt: PreparedWriteReceipt,
) -> Result<Table, Error>
pub async fn recover_write( &self, receipt: PreparedWriteReceipt, ) -> Result<Table, Error>
Register a version of this table that a write prepared but whose registration outcome
was unknown (Error::RegistrationUnknown), without uploading its rows again.
Source§impl Table
impl Table
Sourcepub async fn schema(&self) -> Result<SchemaRef, Error>
pub async fn schema(&self) -> Result<SchemaRef, Error>
This version’s Arrow schema. It plans a scan but reads no rows.
Sourcepub async fn alter_schema(
&self,
changes: impl IntoIterator<Item = SchemaChange>,
) -> Result<Table, Error>
pub async fn alter_schema( &self, changes: impl IntoIterator<Item = SchemaChange>, ) -> Result<Table, Error>
Write the next version of this table with changes applied to its schema, in order,
without writing data files. Every change is checked against this version before
anything is written; with no changes the result is this table.
Sourcepub async fn patch_rows(
&self,
filter: Option<Expression>,
set: Vec<NamedExpression>,
) -> Result<UpdatedRows, Error>
pub async fn patch_rows( &self, filter: Option<Expression>, set: Vec<NamedExpression>, ) -> Result<UpdatedRows, Error>
Write the next version of this table with the values of set in the visible rows that
match filter, or in every row without a filter, recorded as patches beside the data.
Each assignment names an existing column and must evaluate to its stored type; nothing is cast. Rows keep their row IDs. When no row matches, nothing is written and the result holds this table.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Table
impl !UnwindSafe for Table
impl Freeze for Table
impl Send for Table
impl Sync for Table
impl Unpin for Table
impl UnsafeUnpin for Table
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.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
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.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
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.