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
impl StreamChunk
sourcepub fn new(ops: impl Into<Arc<[Op]>>, columns: Vec<ArrayRef>) -> Self
pub fn new(ops: impl Into<Arc<[Op]>>, columns: Vec<ArrayRef>) -> Self
Create a new StreamChunk
with given ops and columns.
sourcepub fn with_visibility(
ops: impl Into<Arc<[Op]>>,
columns: Vec<ArrayRef>,
visibility: Bitmap,
) -> Self
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.
sourcepub fn from_rows(rows: &[(Op, impl Row)], data_types: &[DataType]) -> Self
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.
sourcepub fn data_chunk(&self) -> &DataChunk
pub fn data_chunk(&self) -> &DataChunk
Get the reference of the underlying data chunk.
sourcepub fn split(&self, size: usize) -> Vec<Self>
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.
pub fn into_parts(self) -> (DataChunk, Arc<[Op]>)
pub fn from_parts(ops: impl Into<Arc<[Op]>>, data_chunk: DataChunk) -> Self
pub fn into_inner(self) -> (Arc<[Op]>, Vec<ArrayRef>, Bitmap)
pub fn to_protobuf(&self) -> PbStreamChunk
pub fn from_protobuf(prost: &PbStreamChunk) -> ArrayResult<Self>
pub fn ops(&self) -> &[Op]
sourcepub fn to_pretty(&self) -> impl Display
pub fn to_pretty(&self) -> impl Display
Returns a table-like text representation of the StreamChunk
.
sourcepub fn to_pretty_with_schema(&self, schema: &Schema) -> impl Display
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
.
fn to_pretty_inner(&self, schema: Option<&Schema>) -> impl Display
sourcepub fn project(&self, indices: &[usize]) -> Self
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.
sourcepub fn eliminate_adjacent_noop_update(self) -> Self
pub fn eliminate_adjacent_noop_update(self) -> Self
Remove the adjacent delete-insert if their row value are the same.
sourcepub fn project_with_vis(&self, indices: &[usize], vis: Bitmap) -> Self
pub fn project_with_vis(&self, indices: &[usize], vis: Bitmap) -> Self
Reorder columns and set visibility.
sourcepub fn clone_with_vis(&self, vis: Bitmap) -> Self
pub fn clone_with_vis(&self, vis: Bitmap) -> Self
Clone the StreamChunk
with a new visibility.
source§impl StreamChunk
impl StreamChunk
sourcepub fn records(&self) -> StreamChunkRefIter<'_> ⓘ
pub fn records(&self) -> StreamChunkRefIter<'_> ⓘ
Return an iterator on stream records of this stream chunk.
sourcepub fn rows(&self) -> impl Iterator<Item = (Op, RowRef<'_>)>
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.
sourcepub fn rows_in(
&self,
range: Range<usize>,
) -> impl Iterator<Item = (Op, RowRef<'_>)>
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.
sourcepub fn row_at(&self, pos: usize) -> (Op, RowRef<'_>, bool)
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.
pub fn rows_with_holes(&self) -> impl Iterator<Item = Option<(Op, RowRef<'_>)>>
Methods from Deref<Target = DataChunk>§
pub(crate) const PRETTY_TABLE_PRESET: &'static str = "||--+-++| ++++++"
sourcepub fn next_visible_row_idx(&self, row_idx: usize) -> Option<usize>
pub fn next_visible_row_idx(&self, row_idx: usize) -> Option<usize>
Return the next visible row index on or after row_idx
.
pub fn dimension(&self) -> usize
sourcepub fn cardinality(&self) -> usize
pub fn cardinality(&self) -> usize
cardinality
returns the number of visible tuples
pub fn selectivity(&self) -> f64
pub fn with_visibility(&self, visibility: impl Into<Bitmap>) -> Self
pub fn visibility(&self) -> &Bitmap
pub fn set_visibility(&mut self, visibility: Bitmap)
pub fn is_compacted(&self) -> bool
pub fn column_at(&self, idx: usize) -> &ArrayRef
pub fn columns(&self) -> &[ArrayRef]
sourcepub fn data_types(&self) -> Vec<DataType>
pub fn data_types(&self) -> Vec<DataType>
Returns the data types of all columns.
sourcepub fn split_column_at(&self, idx: usize) -> (Self, Self)
pub fn split_column_at(&self, idx: usize) -> (Self, Self)
pub fn to_protobuf(&self) -> PbDataChunk
sourcepub fn compact_cow(&self) -> Cow<'_, Self>
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.
sourcepub fn get_hash_values<H: BuildHasher>(
&self,
column_idxes: &[usize],
hasher_builder: H,
) -> Vec<HashCode<H>>
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.
sourcepub fn row_at(&self, pos: usize) -> (RowRef<'_>, bool)
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 tupleRowRef
- Reference of data tuple- bool - whether this tuple is visible
sourcepub fn row_at_unchecked_vis(&self, pos: usize) -> RowRef<'_>
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
sourcepub fn to_pretty(&self) -> impl Display
pub fn to_pretty(&self) -> impl Display
Returns a table-like text representation of the DataChunk
.
sourcepub fn keep_columns(&self, column_indices: &[usize]) -> Self
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 .
sourcepub fn project(&self, indices: &[usize]) -> Self
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.
sourcepub fn project_with_vis(&self, indices: &[usize], visibility: Bitmap) -> Self
pub fn project_with_vis(&self, indices: &[usize], visibility: Bitmap) -> Self
Reorder columns and set visibility.
sourcepub fn reorder_rows(&self, indexes: &[usize]) -> Self
pub fn reorder_rows(&self, indexes: &[usize]) -> Self
Reorder rows by indexes.
sourcefn partition_sizes(&self) -> (usize, Vec<&ArrayRef>)
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.
sourcepub fn serialize(&self) -> Vec<Bytes>
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.
sourcepub fn serialize_with(&self, serializer: &impl ValueRowSerializer) -> Vec<Bytes>
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.
sourcepub fn estimate_value_encoding_size(&self, column_indices: &[usize]) -> usize
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.
sourcepub fn rows(&self) -> DataChunkRefIter<'_> ⓘ
pub fn rows(&self) -> DataChunkRefIter<'_> ⓘ
Get an iterator for visible rows.
sourcepub fn rows_in(&self, range: Range<usize>) -> DataChunkRefIter<'_> ⓘ
pub fn rows_in(&self, range: Range<usize>) -> DataChunkRefIter<'_> ⓘ
Get an iterator for visible rows in range.
sourcepub fn rows_with_holes(&self) -> DataChunkRefIterWithHoles<'_> ⓘ
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
impl Clone for StreamChunk
source§fn clone(&self) -> StreamChunk
fn clone(&self) -> StreamChunk
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for StreamChunk
impl Debug for StreamChunk
source§impl Default for StreamChunk
impl Default for StreamChunk
source§impl Deref for StreamChunk
impl Deref for StreamChunk
source§impl DerefMut for StreamChunk
impl DerefMut for StreamChunk
source§impl EstimateSize for StreamChunk
impl EstimateSize for StreamChunk
source§fn estimated_heap_size(&self) -> usize
fn estimated_heap_size(&self) -> usize
source§fn estimated_size(&self) -> usizewhere
Self: Sized,
fn estimated_size(&self) -> usizewhere
Self: Sized,
estimated_heap_size
and the size of Self
.source§impl From<DataChunk> for StreamChunk
impl From<DataChunk> for StreamChunk
StreamChunk
can be created from DataChunk
with all operations set to Insert
.
source§impl From<StreamChunk> for StreamChunkMut
impl From<StreamChunk> for StreamChunkMut
source§fn from(c: StreamChunk) -> Self
fn from(c: StreamChunk) -> Self
source§impl From<StreamChunkMut> for StreamChunk
impl From<StreamChunkMut> for StreamChunk
source§fn from(c: StreamChunkMut) -> Self
fn from(c: StreamChunkMut) -> Self
source§impl PartialEq for StreamChunk
impl PartialEq for StreamChunk
source§impl StreamChunkTestExt for StreamChunk
impl StreamChunkTestExt for StreamChunk
source§fn from_pretty(s: &str) -> Self
fn from_pretty(s: &str) -> Self
source§fn concat(chunks: Vec<StreamChunk>) -> StreamChunk
fn concat(chunks: Vec<StreamChunk>) -> StreamChunk
StreamChunk
into one. Read moresource§fn gen_stream_chunks(
num_of_chunks: usize,
chunk_size: usize,
data_types: &[DataType],
varchar_properties: &VarcharProperty,
) -> Vec<StreamChunk>
fn gen_stream_chunks( num_of_chunks: usize, chunk_size: usize, data_types: &[DataType], varchar_properties: &VarcharProperty, ) -> Vec<StreamChunk>
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.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>
impl StructuralPartialEq for StreamChunk
Auto Trait Implementations§
impl Freeze for StreamChunk
impl RefUnwindSafe for StreamChunk
impl Send for StreamChunk
impl Sync for StreamChunk
impl Unpin for StreamChunk
impl UnwindSafe for StreamChunk
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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
§impl<T> IntoResult<T> for T
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
impl<M> MetricVecRelabelExt for M
source§fn relabel(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level
.source§fn relabel_n(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
relabel_num: usize,
) -> RelabeledMetricVec<M>
fn relabel_n( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, relabel_num: usize, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n
.source§fn relabel_debug_1(
self,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel_debug_1( self, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n
with metric_level
set to
MetricLevel::Debug
and relabel_num
set to 1.