Struct perspective_js::Table
source · pub struct Table(/* private fields */);Expand description
Table is Perspective’s columnar data frame, analogous to a Pandas
DataFrame or Apache Arrow, supporting append & in-place updates, removal by
index, and update notifications.
A Table contains columns, each of which have a unique name, are strongly and
consistently typed, and contains rows of data conforming to the column’s type.
Each column in a Table must have the same number of rows, though not every
row must contain data; null-values are used to indicate missing values in the
dataset.
The schema of a Table is immutable after creation, which means the column
names and data types cannot be changed after the Table has been created.
Columns cannot be added or deleted after creation either, but a View can be
used to select an arbitrary set of columns from the Table.
Implementations§
source§impl Table
impl Table
sourcepub async fn get_index(&self) -> Option<String>
pub async fn get_index(&self) -> Option<String>
Returns the name of the index column for the table.
§JavaScript Examples
const table = await client.table("x,y\n1,2\n3,4", { index: "x" });
const index = table.get_index(); // "x"
§Python Examples
table = client.table("x,y\n1,2\n3,4", index="x");
index = table.get_index() # "x"
§Examples
let options = TableInitOptions {index: Some("x".to_string()), ..default() };
let table = client.table("x,y\n1,2\n3,4", options).await;
let tables = client.open_table("table_one").await;sourcepub async fn get_client(&self) -> Client
pub async fn get_client(&self) -> Client
sourcepub async fn get_limit(&self) -> Option<u32>
pub async fn get_limit(&self) -> Option<u32>
Returns the user-specified row limit for this table.
sourcepub async fn clear(&self) -> ApiResult<()>
pub async fn clear(&self) -> ApiResult<()>
Removes all the rows in the Table, but preserves everything else including
the schema, index, and any callbacks or registered View instances.
Calling Table::clear, like Table::update and Table::remove, will
trigger an update event to any registered listeners via View::on_update.
sourcepub async fn delete(self) -> ApiResult<()>
pub async fn delete(self) -> ApiResult<()>
Delete this Table and cleans up associated resources, assuming it has no
View instances registered to it (which must be deleted first).
Tables do not stop consuming resources or processing updates when they are
garbage collected in their host language - you must call this method to reclaim
these.
§JavaScript Examples
const table = await client.table("x,y\n1,2\n3,4");
// ...
await table.delete();
§Python Examples
table = client.table("x,y\n1,2\n3,4")
// ...
table.delete()
§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?;
// ...
table.delete().await?;sourcepub async fn schema(&self) -> ApiResult<JsValue>
pub async fn schema(&self) -> ApiResult<JsValue>
Returns a table’s Schema, a mapping of column names to column types.
The mapping of a Table’s column names to data types is referred to as a
Schema. Each column has a unique name and a data type, one of:
"boolean"- A boolean type"date"- A timesonze-agnostic date type (month/day/year)"datetime"- A millisecond-precision datetime type in the UTC timezone"float"- A 64 bit float"integer"- A signed 32 bit integer (the integer type supported by JavaScript)"string"- AStringdata type (encoded internally as a dictionary)
Note that all Table columns are nullable, regardless of the data type.
sourcepub async fn make_port(&self) -> ApiResult<i32>
pub async fn make_port(&self) -> ApiResult<i32>
Create a unique channel ID on this Table, which allows View::on_update
callback calls to be associated with the Table::update which caused them.
sourcepub async fn on_delete(&self, on_delete: Function) -> ApiResult<u32>
pub async fn on_delete(&self, on_delete: Function) -> ApiResult<u32>
Register a callback which is called exactly once, when this Table is deleted
with the Table::delete method.
Table::on_delete resolves when the subscription message is sent, not when
the delete event occurs.
sourcepub fn remove_delete(&self, callback_id: u32) -> ApiFuture<()>
pub fn remove_delete(&self, callback_id: u32) -> ApiFuture<()>
Removes a listener with a given ID, as returned by a previous call to Table::on_delete.
sourcepub async fn remove(&self, value: &JsValue) -> ApiResult<()>
pub async fn remove(&self, value: &JsValue) -> ApiResult<()>
Replace all rows in this Table with the input data, coerced to this
Table’s existing Schema, notifying any derived View and
View::on_update callbacks.
Calling Table::replace is an easy way to replace all the data in a
Table without losing any derived View instances or View::on_update
callbacks. Table::replace does not infer data types like Client::table
does, rather it coerces input data to the Schema like Table::update. If
you need a Table with a different Schema, you must create a new one.
§JavaScript Examples
await table.replace("x,y\n1,2");
§Python Examples
table.replace("x,y\n1,2")
§Examples
let data = UpdateData::Csv("x,y\n1,2".into());
let opts = UpdateOptions::default();
table.replace(data, opts).await?;sourcepub async fn replace(&self, input: &JsValue) -> ApiResult<()>
pub async fn replace(&self, input: &JsValue) -> ApiResult<()>
Replace all rows in this Table with the input data, coerced to this
Table’s existing Schema, notifying any derived View and
View::on_update callbacks.
Calling Table::replace is an easy way to replace all the data in a
Table without losing any derived View instances or View::on_update
callbacks. Table::replace does not infer data types like Client::table
does, rather it coerces input data to the Schema like Table::update. If
you need a Table with a different Schema, you must create a new one.
§JavaScript Examples
await table.replace("x,y\n1,2");
§Python Examples
table.replace("x,y\n1,2")
§Examples
let data = UpdateData::Csv("x,y\n1,2".into());
let opts = UpdateOptions::default();
table.replace(data, opts).await?;sourcepub async fn update(
&self,
input: &JsTableInitData,
options: Option<JsUpdateOptions>,
) -> ApiResult<()>
pub async fn update( &self, input: &JsTableInitData, options: Option<JsUpdateOptions>, ) -> ApiResult<()>
Updates the rows of this table and any derived View instances.
Calling Table::update will trigger the View::on_update callbacks
register to derived View, and the call itself will not resolve until all
derived View’s are notified.
When updating a Table with an index, Table::update supports partial
updates, by omitting columns from the update data.
§Arguments
input- The input data for thisTable. The schema of aTableis immutable after creation, so this method cannot be called with a schema.options- Options for this update step - seeUpdateOptions.
§JavaScript Examples
await table.update("x,y\n1,2");
§Python Examples
table.update("x,y\n1,2")
§Examples
let data = UpdateData::Csv("x,y\n1,2".into());
let opts = UpdateOptions::default();
table.update(data, opts).await?;sourcepub async fn view(&self, config: Option<JsViewConfig>) -> ApiResult<View>
pub async fn view(&self, config: Option<JsViewConfig>) -> ApiResult<View>
Create a new View from this table with a specified ViewConfigUpdate.
See View struct.
§JavaScript Examples
const view = await table.view({
columns: ["Sales"],
aggregates: { Sales: "sum" },
group_by: ["Region", "Country"],
filter: [["Category", "in", ["Furniture", "Technology"]]],
});
§Python Examples
view = table.view(
columns=["Sales"],
aggregates={"Sales": "sum"},
group_by=["Region", "Country"],
filter=[["Category", "in", ["Furniture", "Technology"]]]
)
§Examples
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?;sourcepub async fn validate_expressions(&self, exprs: &JsValue) -> ApiResult<JsValue>
pub async fn validate_expressions(&self, exprs: &JsValue) -> ApiResult<JsValue>
Validates the given expressions.
§Python Examples
exprs = client.validate_expressions({"computed": '"Quantity" + 4'})
Trait Implementations§
source§impl FromWasmAbi for Table
impl FromWasmAbi for Table
source§impl IntoWasmAbi for Table
impl IntoWasmAbi for Table
source§impl LongRefFromWasmAbi for Table
impl LongRefFromWasmAbi for Table
source§impl OptionFromWasmAbi for Table
impl OptionFromWasmAbi for Table
source§impl OptionIntoWasmAbi for Table
impl OptionIntoWasmAbi for Table
source§impl RefFromWasmAbi for Table
impl RefFromWasmAbi for Table
source§impl RefMutFromWasmAbi for Table
impl RefMutFromWasmAbi for Table
source§impl TryFromJsValue for Table
impl TryFromJsValue for Table
source§impl VectorFromWasmAbi for Table
impl VectorFromWasmAbi for Table
source§impl VectorIntoWasmAbi for Table
impl VectorIntoWasmAbi for Table
Auto Trait Implementations§
impl Freeze for Table
impl !RefUnwindSafe for Table
impl Send for Table
impl Sync for Table
impl Unpin for Table
impl !UnwindSafe 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
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)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> ReturnWasmAbi for Twhere
T: IntoWasmAbi,
impl<T> ReturnWasmAbi for Twhere
T: IntoWasmAbi,
§type Abi = <T as IntoWasmAbi>::Abi
type Abi = <T as IntoWasmAbi>::Abi
IntoWasmAbi::Abisource§fn return_abi(self) -> <T as ReturnWasmAbi>::Abi
fn return_abi(self) -> <T as ReturnWasmAbi>::Abi
IntoWasmAbi::into_abi, except that it may throw and never
return in the case of Err.