[][src]Crate druid_io

Async rust client for Apache Druid

Fully asynchronous, future-enabled Apache Druid client library for rust programming language.

The library provides staticly typed API for Native Queries

Installation

The library is hosted on crates.io.

[dependencies]
druid-io = "*"

Supported Native Queries

  • Timeseries
  • TopN
  • GroupBy
  • Scan
  • Search
  • TimeBoundary
  • SegmentMetadata
  • DataSourceMetadata

Usage

Client

Connect to a druid cluster throughly staticly provided list of brokers:

use druid_io::client::DruidClient;

let druid_client = DruidClient::new(vec!["localhost:8082".to_string()]);

Querying

Timeseries

See Timeseries query documentation

use druid_io::client::DruidClient;
use serde::Deserialize;
use serde::Serialize;
use druid_io::{
    query::timeseries::Timeseries,
    query::{
        definitions::Aggregation,
        definitions::{Dimension, Filter, Granularity, Ordering, OutputType, SortingOrder},
        group_by::{
            PostAggregation, PostAggregator,
        },
        DataSource
    },
};
 
#[derive(Serialize, Deserialize, Debug)]
pub struct TimeAggr {
    count: usize,
    count_fraction: f32,
    user: String,
}

let druid_client = DruidClient::new(vec!["localhost:8082".to_string()]);

let timeseries = Timeseries {
    data_source: DataSource::table("wikipedia"),
    limit: Some(10),
    descending: false,
    granularity: Granularity::All,
    filter: Some(Filter::selector("user", "Taffe316")),
    aggregations: vec![
        Aggregation::count("count"),
        Aggregation::StringFirst {
            name: "user".into(),
            field_name: "user".into(),
            max_string_bytes: 1024,
        },
    ],
    post_aggregations: vec![PostAggregation::Arithmetic {
        name: "count_fraction".into(),
        function: "/".into(),
        fields: vec![
            PostAggregator::field_access("count_percent", "count"),
            PostAggregator::constant("hundred", 100.into()),
        ],
        ordering: None,
    }],
    intervals: vec!["-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z".into()],
    context: Default::default(),
};
let result = druid_client.timeseries::<TimeAggr>(&timeseries);

Modules

client
connection
query
serialization