pub struct TableCatalog {Show 36 fields
pub id: TableId,
pub associated_source_id: Option<TableId>,
pub name: String,
pub dependent_relations: Vec<TableId>,
pub columns: Vec<ColumnCatalog>,
pub pk: Vec<ColumnOrder>,
pub stream_key: Vec<usize>,
pub table_type: TableType,
pub distribution_key: Vec<usize>,
pub append_only: bool,
pub cardinality: Cardinality,
pub owner: u32,
pub retention_seconds: Option<u32>,
pub fragment_id: u32,
pub dml_fragment_id: Option<u32>,
pub vnode_col_index: Option<usize>,
pub row_id_index: Option<usize>,
pub value_indices: Vec<usize>,
pub definition: String,
pub conflict_behavior: ConflictBehavior,
pub version_column_index: Option<usize>,
pub read_prefix_len_hint: usize,
pub version: Option<TableVersion>,
pub watermark_columns: FixedBitSet,
pub dist_key_in_pk: Vec<usize>,
pub created_at_epoch: Option<Epoch>,
pub initialized_at_epoch: Option<Epoch>,
pub cleaned_by_watermark: bool,
pub create_type: CreateType,
pub stream_job_status: StreamJobStatus,
pub description: Option<String>,
pub incoming_sinks: Vec<u32>,
pub created_at_cluster_version: Option<String>,
pub initialized_at_cluster_version: Option<String>,
pub cdc_table_id: Option<String>,
pub vnode_count: VnodeCount,
}
Expand description
TableCatalog
Includes full information about a table.
Here Table
is an internal concept, corresponding to a table in storage, all of which can be SELECT
ed.
It is not the same as a user-side table created by CREATE TABLE
.
Use Self::table_type()
to determine the TableType
of the table.
§Column ID & Column Index
ColumnId
(with type i32
) is the unique identifier of
a column in a table. It is used to access storage.
Column index, or idx, (with type usize
) is the relative position inside the Vec
of columns.
A tip to avoid making mistakes is never do casting - i32 as usize or vice versa.
§Keys
All the keys are represented as column indices.
-
Primary Key (pk): unique identifier of a row.
-
Order Key: the primary key for storage, used to sort and access data.
For an MV, the columns in
ORDER BY
clause will be put at the beginning of the order key. And the remaining columns in pk will follow behind.If there’s no
ORDER BY
clause, the order key will be the same as pk. -
Distribution Key: the columns used to partition the data. It must be a subset of the order key.
Fields§
§id: TableId
§associated_source_id: Option<TableId>
§name: String
§dependent_relations: Vec<TableId>
§columns: Vec<ColumnCatalog>
All columns in this table.
pk: Vec<ColumnOrder>
Key used as materialize’s storage key prefix, including MV order columns and stream_key
.
stream_key: Vec<usize>
pk_indices
of the corresponding materialize operator’s output.
table_type: TableType
Type of the table. Used to distinguish user-created tables, materialized views, index tables, and internal tables.
distribution_key: Vec<usize>
Distribution key column indices.
append_only: bool
The append-only attribute is derived from StreamMaterialize
and StreamTableScan
relies
on this to derive an append-only stream plan.
cardinality: Cardinality
The cardinality of the table.
owner: u32
Owner of the table.
retention_seconds: Option<u32>
§fragment_id: u32
The fragment id of the Materialize
operator for this table.
dml_fragment_id: Option<u32>
The fragment id of the DML
operator for this table.
vnode_col_index: Option<usize>
An optional column index which is the vnode of each row computed by the table’s consistent hash distribution.
row_id_index: Option<usize>
An optional column index of row id. If the primary key is specified by users, this will be
None
.
value_indices: Vec<usize>
The column indices which are stored in the state store’s value with row-encoding.
definition: String
The full CREATE TABLE
or CREATE MATERIALIZED VIEW
definition of the table.
conflict_behavior: ConflictBehavior
The behavior of handling incoming pk conflict from source executor, we can overwrite or
ignore conflict pk. For normal materialize executor and other executors, this field will be
No Check
.
version_column_index: Option<usize>
§read_prefix_len_hint: usize
§version: Option<TableVersion>
Per-table catalog version, used by schema change. None
for internal tables and tests.
watermark_columns: FixedBitSet
The column indices which could receive watermarks.
dist_key_in_pk: Vec<usize>
Optional field specifies the distribution key indices in pk. See https://github.com/risingwavelabs/risingwave/issues/8377 for more information.
created_at_epoch: Option<Epoch>
§initialized_at_epoch: Option<Epoch>
§cleaned_by_watermark: bool
Indicate whether to use watermark cache for state table.
create_type: CreateType
Indicate whether to create table in background or foreground.
stream_job_status: StreamJobStatus
Indicate the stream job status, whether it is created or creating. If it is creating, we should hide it.
description: Option<String>
description of table, set by comment on
.
incoming_sinks: Vec<u32>
Incoming sinks, used for sink into table
created_at_cluster_version: Option<String>
§initialized_at_cluster_version: Option<String>
§cdc_table_id: Option<String>
§vnode_count: VnodeCount
Total vnode count of the table.
Can be VnodeCount::Placeholder
if the catalog is generated by the frontend and the
corresponding job is still in Creating
status, in which case calling Self::vnode_count
will panic.
Implementations§
source§impl TableCatalog
impl TableCatalog
pub fn with_id(self, id: TableId) -> Self
pub fn with_cleaned_by_watermark(self, cleaned_by_watermark: bool) -> Self
pub fn conflict_behavior(&self) -> ConflictBehavior
pub fn table_type(&self) -> TableType
pub fn is_table(&self) -> bool
pub fn is_internal_table(&self) -> bool
pub fn is_mview(&self) -> bool
pub fn is_index(&self) -> bool
sourcepub fn bad_drop_error(&self) -> RwError
pub fn bad_drop_error(&self) -> RwError
Returns an error if DROP
statements are used on the wrong type of table.
sourcepub fn associated_source_id(&self) -> Option<TableId>
pub fn associated_source_id(&self) -> Option<TableId>
Get the table catalog’s associated source id.
pub fn has_associated_source(&self) -> bool
sourcepub fn columns(&self) -> &[ColumnCatalog]
pub fn columns(&self) -> &[ColumnCatalog]
Get a reference to the table catalog’s columns.
pub fn columns_without_rw_timestamp(&self) -> Vec<ColumnCatalog>
sourcepub fn pk(&self) -> &[ColumnOrder]
pub fn pk(&self) -> &[ColumnOrder]
Get a reference to the table catalog’s pk desc.
sourcepub fn pk_column_ids(&self) -> Vec<ColumnId>
pub fn pk_column_ids(&self) -> Vec<ColumnId>
Get the column IDs of the primary key.
sourcepub fn table_desc(&self) -> TableDesc
pub fn table_desc(&self) -> TableDesc
Get a TableDesc
of the table.
Note: this must be called on existing tables, otherwise it will fail to get the vnode count (which is determined by the meta service) and panic.
pub fn distribution_key(&self) -> &[usize]
pub fn to_internal_table_prost(&self) -> PbTable
sourcepub fn create_sql(&self) -> String
pub fn create_sql(&self) -> String
Returns the SQL statement that can be used to create this table.
sourcepub fn version(&self) -> Option<&TableVersion>
pub fn version(&self) -> Option<&TableVersion>
Get a reference to the table catalog’s version.
sourcepub fn version_id(&self) -> Option<TableVersionId>
pub fn version_id(&self) -> Option<TableVersionId>
Get the table’s version id. Returns None
if the table has no version field.
sourcepub fn vnode_count(&self) -> usize
pub fn vnode_count(&self) -> usize
Get the total vnode count of the table.
Panics if it’s called on an incomplete (and not yet persisted) table catalog.
pub fn to_prost(&self, schema_id: u32, database_id: u32) -> PbTable
sourcepub fn columns_to_insert(&self) -> impl Iterator<Item = &ColumnCatalog>
pub fn columns_to_insert(&self) -> impl Iterator<Item = &ColumnCatalog>
Get columns excluding hidden columns and generated golumns.
pub fn generated_column_names(&self) -> impl Iterator<Item = &str>
pub fn generated_col_idxes(&self) -> impl Iterator<Item = usize> + '_
pub fn default_column_expr(&self, col_idx: usize) -> ExprImpl
pub fn default_column_exprs(columns: &[ColumnCatalog]) -> Vec<ExprImpl>
pub fn default_columns(&self) -> impl Iterator<Item = (usize, ExprImpl)> + '_
pub fn has_generated_column(&self) -> bool
pub fn has_rw_timestamp_column(&self) -> bool
pub fn column_schema(&self) -> Schema
pub fn is_created(&self) -> bool
Trait Implementations§
source§impl Clone for TableCatalog
impl Clone for TableCatalog
source§fn clone(&self) -> TableCatalog
fn clone(&self) -> TableCatalog
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for TableCatalog
impl Debug for TableCatalog
source§impl From<&Table> for TableCatalog
impl From<&Table> for TableCatalog
source§impl From<Table> for TableCatalog
impl From<Table> for TableCatalog
source§impl Hash for TableCatalog
impl Hash for TableCatalog
source§impl OwnedByUserCatalog for TableCatalog
impl OwnedByUserCatalog for TableCatalog
source§impl PartialEq for TableCatalog
impl PartialEq for TableCatalog
impl Eq for TableCatalog
impl StructuralPartialEq for TableCatalog
Auto Trait Implementations§
impl Freeze for TableCatalog
impl RefUnwindSafe for TableCatalog
impl Send for TableCatalog
impl Sync for TableCatalog
impl Unpin for TableCatalog
impl UnwindSafe for TableCatalog
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> Conv for T
impl<T> Conv for T
§impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> FmtForward for T
impl<T> FmtForward for T
§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.§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.§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.§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.§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.§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.§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.§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.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§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>
§impl<T, U, I> LiftInto<U, I> for Twhere
U: LiftFrom<T, I>,
impl<T, U, I> LiftInto<U, I> for Twhere
U: LiftFrom<T, I>,
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.§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§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 more§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 more§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
§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
§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.§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.§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.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<Source> Sculptor<HNil, HNil> for Source
impl<Source> Sculptor<HNil, HNil> for Source
§impl<T> Tap for T
impl<T> Tap for T
§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 more§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 more§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 more§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 more§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 more§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 more§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.§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.§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.§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.§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.§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.§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.