risingwave_common::array::stream_chunk

Struct StreamChunk

source
pub struct StreamChunk {
    ops: Arc<[Op]>,
    data: DataChunk,
}
Expand description

StreamChunk is used to pass data over the streaming pathway.

Fields§

§ops: Arc<[Op]>§data: DataChunk

Implementations§

source§

impl StreamChunk

source

pub fn new(ops: impl Into<Arc<[Op]>>, columns: Vec<ArrayRef>) -> Self

Create a new StreamChunk with given ops and columns.

source

pub fn with_visibility( ops: impl Into<Arc<[Op]>>, columns: Vec<ArrayRef>, visibility: Bitmap, ) -> Self

Create a new StreamChunk with given ops, columns and visibility.

source

pub fn from_rows(rows: &[(Op, impl Row)], data_types: &[DataType]) -> Self

Build a StreamChunk from rows.

Panics if the rows is empty.

Should prefer using StreamChunkBuilder instead to avoid unnecessary allocation of rows.

source

pub fn data_chunk(&self) -> &DataChunk

Get the reference of the underlying data chunk.

source

pub fn compact(self) -> Self

compact the StreamChunk with its visibility map

source

pub fn split(&self, size: usize) -> Vec<Self>

Split the StreamChunk into multiple chunks with the given size at most.

When the total cardinality of all the chunks is not evenly divided by the size, the last new chunk will be the remainder.

For consecutive UpdateDelete and UpdateInsert, they will be kept in one chunk. As a result, some chunks may have size + 1 rows.

source

pub fn into_parts(self) -> (DataChunk, Arc<[Op]>)

source

pub fn from_parts(ops: impl Into<Arc<[Op]>>, data_chunk: DataChunk) -> Self

source

pub fn into_inner(self) -> (Arc<[Op]>, Vec<ArrayRef>, Bitmap)

source

pub fn to_protobuf(&self) -> PbStreamChunk

source

pub fn from_protobuf(prost: &PbStreamChunk) -> ArrayResult<Self>

source

pub fn ops(&self) -> &[Op]

source

pub fn to_pretty(&self) -> impl Display

Returns a table-like text representation of the StreamChunk.

source

pub fn to_pretty_with_schema(&self, schema: &Schema) -> impl Display

Returns a table-like text representation of the StreamChunk with a header of column names from the given schema.

source

fn to_pretty_inner(&self, schema: Option<&Schema>) -> impl Display

source

pub fn project(&self, indices: &[usize]) -> Self

Reorder (and possibly remove) columns.

e.g. if indices is [2, 1, 0], and the chunk contains column [a, b, c], then the output will be [c, b, a]. If indices is [2, 0], then the output will be [c, a]. If the input mapping is identity mapping, no reorder will be performed.

source

pub fn eliminate_adjacent_noop_update(self) -> Self

Remove the adjacent delete-insert if their row value are the same.

source

pub fn project_with_vis(&self, indices: &[usize], vis: Bitmap) -> Self

Reorder columns and set visibility.

source

pub fn clone_with_vis(&self, vis: Bitmap) -> Self

Clone the StreamChunk with a new visibility.

source§

impl StreamChunk

source

pub fn records(&self) -> StreamChunkRefIter<'_>

Return an iterator on stream records of this stream chunk.

source

pub fn rows(&self) -> impl Iterator<Item = (Op, RowRef<'_>)>

Return an iterator on rows of this stream chunk.

Should consider using StreamChunk::records if possible.

source

pub fn rows_in( &self, range: Range<usize>, ) -> impl Iterator<Item = (Op, RowRef<'_>)>

Return an iterator on rows of this stream chunk in a range.

source

pub fn row_at(&self, pos: usize) -> (Op, RowRef<'_>, bool)

Random access a row at pos. Return the op, data and whether the row is visible.

source

pub fn rows_with_holes(&self) -> impl Iterator<Item = Option<(Op, RowRef<'_>)>>

Methods from Deref<Target = DataChunk>§

source

pub(crate) const PRETTY_TABLE_PRESET: &'static str = "||--+-++| ++++++"

source

pub fn next_visible_row_idx(&self, row_idx: usize) -> Option<usize>

Return the next visible row index on or after row_idx.

source

pub fn dimension(&self) -> usize

source

pub fn cardinality(&self) -> usize

cardinality returns the number of visible tuples

source

pub fn capacity(&self) -> usize

capacity returns physical length of any chunk column

source

pub fn selectivity(&self) -> f64

source

pub fn with_visibility(&self, visibility: impl Into<Bitmap>) -> Self

source

pub fn visibility(&self) -> &Bitmap

source

pub fn set_visibility(&mut self, visibility: Bitmap)

source

pub fn is_compacted(&self) -> bool

source

pub fn column_at(&self, idx: usize) -> &ArrayRef

source

pub fn columns(&self) -> &[ArrayRef]

source

pub fn data_types(&self) -> Vec<DataType>

Returns the data types of all columns.

source

pub fn split_column_at(&self, idx: usize) -> (Self, Self)

Divides one chunk into two at an column index.

§Panics

Panics if idx > columns.len().

source

pub fn to_protobuf(&self) -> PbDataChunk

source

pub fn compact_cow(&self) -> Cow<'_, Self>

Convert the chunk to compact format.

If the chunk is not compacted, return a new compacted chunk, otherwise return a reference to self.

source

pub fn get_hash_values<H: BuildHasher>( &self, column_idxes: &[usize], hasher_builder: H, ) -> Vec<HashCode<H>>

Compute hash values for each row. The number of the returning HashCodes is self.capacity(). When skip_invisible_row is true, the HashCode for the invisible rows is arbitrary.

source

pub fn row_at(&self, pos: usize) -> (RowRef<'_>, bool)

Random access a tuple in a data chunk. Return in a row format.

§Arguments
  • pos - Index of look up tuple
  • RowRef - Reference of data tuple
  • bool - whether this tuple is visible
source

pub fn row_at_unchecked_vis(&self, pos: usize) -> RowRef<'_>

Random access a tuple in a data chunk. Return in a row format. Note that this function do not return whether the row is visible.

§Arguments
  • pos - Index of look up tuple
source

pub fn to_pretty(&self) -> impl Display

Returns a table-like text representation of the DataChunk.

source

pub fn keep_columns(&self, column_indices: &[usize]) -> Self

Keep the specified columns and set the rest elements to null.

§Example
i i i                            i i i
1 2 3  --> keep_columns([1]) --> . 2 .
4 5 6                            . 5 .
source

pub fn project(&self, indices: &[usize]) -> Self

Reorder (and possibly remove) columns.

e.g. if indices is [2, 1, 0], and the chunk contains column [a, b, c], then the output will be [c, b, a]. If indices is [2, 0], then the output will be [c, a]. If the input mapping is identity mapping, no reorder will be performed.

source

pub fn project_with_vis(&self, indices: &[usize], visibility: Bitmap) -> Self

Reorder columns and set visibility.

source

pub fn reorder_rows(&self, indexes: &[usize]) -> Self

Reorder rows by indexes.

source

fn partition_sizes(&self) -> (usize, Vec<&ArrayRef>)

§Partition fixed size datums and variable length ones.

In some cases, we have fixed size for the entire column, when the datatypes are fixed size or the datums are constants. As such we can compute the size for it just once for the column.

Otherwise, for variable sized datatypes, such as varchar, we have to individually compute their sizes per row.

source

pub fn serialize(&self) -> Vec<Bytes>

Serialize each row into value encoding bytes.

The returned vector’s size is self.capacity() and for the invisible row will give a empty bytes.

source

pub fn serialize_with(&self, serializer: &impl ValueRowSerializer) -> Vec<Bytes>

Serialize each row into bytes with given serializer.

This is similar to serialize but it uses a custom serializer. Prefer serialize if possible since it might be more efficient due to columnar operations.

source

pub fn estimate_value_encoding_size(&self, column_indices: &[usize]) -> usize

Estimate size of hash keys. Their indices in a row are indicated by column_indices. Size here refers to the number of u8s required to store the serialized datum.

source

pub fn rows(&self) -> DataChunkRefIter<'_>

Get an iterator for visible rows.

source

pub fn rows_in(&self, range: Range<usize>) -> DataChunkRefIter<'_>

Get an iterator for visible rows in range.

source

pub fn rows_with_holes(&self) -> DataChunkRefIterWithHoles<'_>

Get an iterator for all rows in the chunk, and a None represents an invisible row.

Trait Implementations§

source§

impl Clone for StreamChunk

source§

fn clone(&self) -> StreamChunk

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for StreamChunk

source§

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

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

impl Default for StreamChunk

source§

fn default() -> Self

Create a 0-row-0-col StreamChunk. Only used in some existing tests. This is NOT the same as an empty chunk, which has 0 rows but with columns aligned with executor schema.

source§

impl Deref for StreamChunk

source§

type Target = DataChunk

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl DerefMut for StreamChunk

source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
source§

impl EstimateSize for StreamChunk

source§

fn estimated_heap_size(&self) -> usize

The estimated heap size of the current struct in bytes.
source§

fn estimated_size(&self) -> usize
where Self: Sized,

The estimated total size of the current struct in bytes, including the estimated_heap_size and the size of Self.
source§

impl From<DataChunk> for StreamChunk

StreamChunk can be created from DataChunk with all operations set to Insert.

source§

fn from(data: DataChunk) -> Self

Converts to this type from the input type.
source§

impl From<StreamChunk> for StreamChunkMut

source§

fn from(c: StreamChunk) -> Self

Converts to this type from the input type.
source§

impl From<StreamChunkMut> for StreamChunk

source§

fn from(c: StreamChunkMut) -> Self

Converts to this type from the input type.
source§

impl PartialEq for StreamChunk

source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StreamChunkTestExt for StreamChunk

source§

fn from_pretty(s: &str) -> Self

Parse a chunk from string. Read more
source§

fn valid(&self) -> bool

Validate the StreamChunk layout.
source§

fn concat(chunks: Vec<StreamChunk>) -> StreamChunk

Concatenate multiple StreamChunk into one. Read more
source§

fn sort_rows(self) -> Self

Sort rows.
source§

fn gen_stream_chunks( num_of_chunks: usize, chunk_size: usize, data_types: &[DataType], varchar_properties: &VarcharProperty, ) -> Vec<StreamChunk>

Generate num_of_chunks data chunks with type data_types, where each data chunk has cardinality of chunk_size. TODO(kwannoel): Generate different types of op, different vis.
source§

fn gen_stream_chunks_inner( num_of_chunks: usize, chunk_size: usize, data_types: &[DataType], varchar_properties: &VarcharProperty, visibility_percent: f64, inserts_percent: f64, ) -> Vec<StreamChunk>

source§

impl StructuralPartialEq for StreamChunk

Auto Trait Implementations§

Blanket Implementations§

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<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

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

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

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

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

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<T> IntoResult<T> for T

§

type Err = Infallible

§

fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>

source§

impl<M> MetricVecRelabelExt for M

source§

fn relabel( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>

source§

fn relabel_n( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, relabel_num: usize, ) -> RelabeledMetricVec<M>

source§

fn relabel_debug_1( self, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>

Equivalent to RelabeledMetricVec::with_metric_level_relabel_n with metric_level set to MetricLevel::Debug and relabel_num set to 1.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

impl<T> Same for T

source§

type Output = T

Should always be Self
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, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
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
§

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

§

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

§

impl<T> DevConfig for T
where T: Send + Sync + 'static + Debug,

source§

impl<T> LruValue for T
where T: Send + Sync,

§

impl<T> Value for T
where T: Send + Sync + 'static,