pub struct View {
pub name: String,
/* private fields */
}Expand description
The View struct is Perspective’s query and serialization interface. It
represents a query on the Table’s dataset and is always created from an
existing Table instance via the Table::view method.
Views are immutable with respect to the arguments provided to the
Table::view method; to change these parameters, you must create a new
View on the same Table. However, each View is live with
respect to the Table’s data, and will (within a conflation window)
update with the latest state as its parent Table updates, including
incrementally recalculating all aggregates, pivots, filters, etc. View
query parameters are composable, in that each parameter works independently
and in conjunction with each other, and there is no limit to the number of
pivots, filters, etc. which can be applied.
To construct a View, call the Table::view factory method. A
Table can have as many Views associated with it as you need -
Perspective conserves memory by relying on a single Table to power
multiple Views concurrently.
§Examples
let opts = TableInitOptions::default();
let data = TableData::Update(UpdateData::Csv("x,y\n1,2\n3,4".into()));
let table = client.table(data, opts).await?;
let view = table.view(None).await?;
let arrow = view.to_arrow().await?;
view.delete().await?;use crate::config::*;
let view = table
.view(Some(ViewConfigUpdate {
columns: Some(vec![Some("Sales".into())]),
aggregates: Some(HashMap::from_iter(vec![("Sales".into(), "sum".into())])),
group_by: Some(vec!["Region".into(), "Country".into()]),
filter: Some(vec![Filter::new("Category", "in", &[
"Furniture",
"Technology",
])]),
..ViewConfigUpdate::default()
}))
.await?;Group By
let view = table
.view(Some(ViewConfigUpdate {
group_by: Some(vec!["a".into(), "c".into()]),
..ViewConfigUpdate::default()
}))
.await?;Split By
let view = table
.view(Some(ViewConfigUpdate {
split_by: Some(vec!["a".into(), "c".into()]),
..ViewConfigUpdate::default()
}))
.await?;In Javascript, a Table can be constructed on a Table::view instance,
which will return a new Table based on the Table::view’s dataset,
and all future updates that affect the Table::view will be forwarded to
the new Table. This is particularly useful for implementing a
Client/Server Replicated design, by
serializing the View to an arrow and setting up an on_update callback.
let opts = TableInitOptions::default();
let data = TableData::Update(UpdateData::Csv("x,y\n1,2\n3,4".into()));
let table = client.table(data, opts).await?;
let view = table.view(None).await?;
let table2 = client.table(TableData::View(view)).await?;
table.update(data).await?;Fields§
§name: StringImplementations§
Source§impl View
impl View
pub fn new(name: String, client: Client) -> Self
Sourcepub async fn column_paths(
&self,
window: ColumnWindow,
) -> ClientResult<Vec<String>>
pub async fn column_paths( &self, window: ColumnWindow, ) -> ClientResult<Vec<String>>
Returns an array of strings containing the column paths of the View
without any of the source columns.
A column path shows the columns that a given cell belongs to after pivots are applied.
Sourcepub async fn dimensions(&self) -> ClientResult<ViewDimensionsResp>
pub async fn dimensions(&self) -> ClientResult<ViewDimensionsResp>
Returns this View’s dimensions, row and column count, as well as
those of the crate::Table from which it was derived.
num_table_rows- The number of rows in the underlyingcrate::Table.num_table_columns- The number of columns in the underlyingcrate::Table(including theindexcolumn if thiscrate::Tablewas constructed with one).num_view_rows- The number of rows in thisView. If thisViewhas agroup_byclause,num_view_rowswill also include aggregated rows.num_view_columns- The number of columns in thisView. If thisViewhas asplit_byclause,num_view_columnswill include all column paths, e.g. the number ofcolumnsclause times the number ofsplit_bygroups.
Sourcepub async fn expression_schema(
&self,
) -> ClientResult<HashMap<String, ColumnType>>
pub async fn expression_schema( &self, ) -> ClientResult<HashMap<String, ColumnType>>
The expression schema of this View, which contains only the
expressions created on this View. See View::schema for
details.
Sourcepub async fn get_config(&self) -> ClientResult<ViewConfig>
pub async fn get_config(&self) -> ClientResult<ViewConfig>
A copy of the [ViewConfig] object passed to the Table::view method
which created this View.
Sourcepub async fn num_rows(&self) -> ClientResult<u32>
pub async fn num_rows(&self) -> ClientResult<u32>
Sourcepub async fn schema(&self) -> ClientResult<HashMap<String, ColumnType>>
pub async fn schema(&self) -> ClientResult<HashMap<String, ColumnType>>
The schema of this View.
The View schema differs from the schema returned by
Table::schema; it may have different column names due to
expressions or columns configs, or it maye have different
column types due to the application og group_by and aggregates
config. You can think of Table::schema as the input schema and
View::schema as the output schema of a Perspective pipeline.
Sourcepub async fn to_arrow(&self, window: ViewWindow) -> ClientResult<Bytes>
pub async fn to_arrow(&self, window: ViewWindow) -> ClientResult<Bytes>
Serializes a View to the Apache Arrow data format.
Sourcepub async fn to_columns_string(
&self,
window: ViewWindow,
) -> ClientResult<String>
pub async fn to_columns_string( &self, window: ViewWindow, ) -> ClientResult<String>
Serializes this View to a string of JSON data. Useful if you want to
save additional round trip serialize/deserialize cycles.
Sourcepub async fn to_json_string(&self, window: ViewWindow) -> ClientResult<String>
pub async fn to_json_string(&self, window: ViewWindow) -> ClientResult<String>
Render this View as a JSON string.
Sourcepub async fn to_ndjson(&self, window: ViewWindow) -> ClientResult<String>
pub async fn to_ndjson(&self, window: ViewWindow) -> ClientResult<String>
Sourcepub async fn to_csv(&self, window: ViewWindow) -> ClientResult<String>
pub async fn to_csv(&self, window: ViewWindow) -> ClientResult<String>
Serializes this View to CSV data in a standard format.
Sourcepub async fn delete(&self) -> ClientResult<()>
pub async fn delete(&self) -> ClientResult<()>
Sourcepub async fn get_min_max(
&self,
column_name: String,
) -> ClientResult<(String, String)>
pub async fn get_min_max( &self, column_name: String, ) -> ClientResult<(String, String)>
Calculates the [min, max] of the leaf nodes of a column column_name.
§Returns
A tuple of [min, max], whose types are column and aggregate dependent.
Sourcepub async fn on_update<T, U>(
&self,
on_update: T,
options: OnUpdateOptions,
) -> ClientResult<u32>
pub async fn on_update<T, U>( &self, on_update: T, options: OnUpdateOptions, ) -> ClientResult<u32>
Register a callback with this View. Whenever the view’s underlying
table emits an update, this callback will be invoked with an object
containing port_id, indicating which port the update fired on, and
optionally delta, which is the new data that was updated for each
cell or each row.
§Arguments
on_update- A callback function invoked on update, which receives an object with two keys:port_id, indicating which port the update was triggered on, anddelta, whose value is dependent on the mode parameter.options- If this is provided asOnUpdateOptions { mode: Some(OnUpdateMode::Row) }, thendeltais an Arrow of the updated rows. Otherwisedeltawill beOption::None.
Sourcepub async fn remove_update(&self, update_id: u32) -> ClientResult<()>
pub async fn remove_update(&self, update_id: u32) -> ClientResult<()>
Unregister a previously registered update callback with this View.
§Arguments
id- A callbackidas returned by a recipricol call toView::on_update.
§Examples
let callback = |_| async { print!("Updated!") };
let cid = view.on_update(callback, OnUpdateOptions::default()).await?;
view.remove_update(cid).await?;Sourcepub async fn on_delete(
&self,
on_delete: Box<dyn Fn() + Send + Sync + 'static>,
) -> ClientResult<u32>
pub async fn on_delete( &self, on_delete: Box<dyn Fn() + Send + Sync + 'static>, ) -> ClientResult<u32>
Sourcepub async fn remove_delete(&self, callback_id: u32) -> ClientResult<()>
pub async fn remove_delete(&self, callback_id: u32) -> ClientResult<()>
Unregister a previously registered View::on_delete callback.
Sourcepub async fn collapse(&self, row_index: u32) -> ClientResult<u32>
pub async fn collapse(&self, row_index: u32) -> ClientResult<u32>
Collapses the group_by row at row_index.
Sourcepub async fn expand(&self, row_index: u32) -> ClientResult<u32>
pub async fn expand(&self, row_index: u32) -> ClientResult<u32>
Expand the group_by row at row_index.
Sourcepub async fn set_depth(&self, depth: u32) -> ClientResult<()>
pub async fn set_depth(&self, depth: u32) -> ClientResult<()>
Set expansion depth of the group_by tree.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for View
impl !RefUnwindSafe for View
impl Send for View
impl Sync for View
impl Unpin for View
impl !UnwindSafe for View
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§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 more