pub struct DuckDbBackend { /* private fields */ }Expand description
DuckDB-based storage backend for metrics.
Implementations§
Trait Implementations§
Source§impl CacheEviction for DuckDbBackend
impl CacheEviction for DuckDbBackend
Source§impl Clone for DuckDbBackend
impl Clone for DuckDbBackend
Source§fn clone(&self) -> DuckDbBackend
fn clone(&self) -> DuckDbBackend
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl StorageBackend for DuckDbBackend
impl StorageBackend for DuckDbBackend
Source§fn init<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn init<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Initialize the storage backend.
Source§fn insert_metrics<'life0, 'async_trait>(
&'life0 self,
metrics: Vec<MetricRecord>,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn insert_metrics<'life0, 'async_trait>(
&'life0 self,
metrics: Vec<MetricRecord>,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Insert metrics into storage.
Source§fn query_metrics<'life0, 'async_trait>(
&'life0 self,
from_timestamp: i64,
) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn query_metrics<'life0, 'async_trait>(
&'life0 self,
from_timestamp: i64,
) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Query metrics from storage.
Source§fn prepare_sql<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn prepare_sql<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Prepare a SQL query and return a handle.
The handle is backend-specific and opaque to the caller.
Source§fn query_sql<'life0, 'life1, 'async_trait>(
&'life0 self,
statement_handle: &'life1 [u8],
) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn query_sql<'life0, 'life1, 'async_trait>(
&'life0 self,
statement_handle: &'life1 [u8],
) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Execute a prepared SQL query using its handle.
The handle must have been obtained from prepare_sql.
Source§fn aggregate_metrics<'life0, 'life1, 'async_trait>(
&'life0 self,
function: AggregateFunction,
group_by: &'life1 GroupBy,
from_timestamp: i64,
to_timestamp: Option<i64>,
) -> Pin<Box<dyn Future<Output = Result<Vec<AggregateResult>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn aggregate_metrics<'life0, 'life1, 'async_trait>(
&'life0 self,
function: AggregateFunction,
group_by: &'life1 GroupBy,
from_timestamp: i64,
to_timestamp: Option<i64>,
) -> Pin<Box<dyn Future<Output = Result<Vec<AggregateResult>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Aggregate metrics using the specified function and grouping.
Source§fn new_with_options(
connection_string: &str,
options: &HashMap<String, String>,
credentials: Option<&Credentials>,
) -> Result<Self, Status>
fn new_with_options( connection_string: &str, options: &HashMap<String, String>, credentials: Option<&Credentials>, ) -> Result<Self, Status>
Create a new instance with the given options.
The connection string and options are backend-specific.
Source§fn create_table<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
schema: &'life2 Schema,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn create_table<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
schema: &'life2 Schema,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Create a new table with the given schema
Source§fn insert_into_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
batch: RecordBatch,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn insert_into_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
batch: RecordBatch,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Insert data into a table
Source§fn query_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
projection: Option<Vec<String>>,
) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn query_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
projection: Option<Vec<String>>,
) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Query data from a table
Source§fn create_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view: &'life1 AggregationView,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view: &'life1 AggregationView,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Create an aggregation view
Source§fn query_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn query_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Query data from an aggregation view
Source§fn drop_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn drop_table<'life0, 'life1, 'async_trait>(
&'life0 self,
table_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Drop a table
Source§fn drop_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn drop_aggregation_view<'life0, 'life1, 'async_trait>(
&'life0 self,
view_name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Drop an aggregation view
Source§fn table_manager(&self) -> &TableManager
fn table_manager(&self) -> &TableManager
Get the table manager instance
Source§fn update_batch_aggregations<'life0, 'life1, 'async_trait>(
&'life0 self,
batch: &'life1 [MetricRecord],
window: TimeWindow,
) -> Pin<Box<dyn Future<Output = Result<Vec<BatchAggregation>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn update_batch_aggregations<'life0, 'life1, 'async_trait>(
&'life0 self,
batch: &'life1 [MetricRecord],
window: TimeWindow,
) -> Pin<Box<dyn Future<Output = Result<Vec<BatchAggregation>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Update batch-level aggregations.
This is called during batch writes to maintain running aggregations.
Source§fn insert_batch_aggregations<'life0, 'async_trait>(
&'life0 self,
aggregations: Vec<BatchAggregation>,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn insert_batch_aggregations<'life0, 'async_trait>(
&'life0 self,
aggregations: Vec<BatchAggregation>,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Insert batch-level aggregations.
This is called after update_batch_aggregations to persist the aggregations.
Auto Trait Implementations§
impl Freeze for DuckDbBackend
impl !RefUnwindSafe for DuckDbBackend
impl Send for DuckDbBackend
impl Sync for DuckDbBackend
impl Unpin for DuckDbBackend
impl !UnwindSafe for DuckDbBackend
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
Mutably borrows from an owned value. Read more
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>
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 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>
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 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>
Wrap the input message
T in a tonic::Request