Panoramix v0.10.1 Panoramix View Source

Post a query to Druid Broker or request its status.

Use Panoramix.Query to build a query.

Examples

Build a query like this:

use Panoramix

q = from "my_datasource",
      query_type: "timeseries",
      intervals: ["2019-03-01T00:00:00+00:00/2019-03-04T00:00:00+00:00"],
      granularity: :day,
      filter: dimensions.foo == "bar",
       aggregations: [event_count: count(),
                      unique_id_count: hyperUnique(:user_unique)]

And then send it:

Panoramix.post_query(q, :default)

Where :default is a configuration profile pointing to your Druid server.

The default value for the profile argument is :default, so if you only need a single configuration you can omit it:

Panoramix.post_query(q)

Response example:

{:ok,
 [
   %{
     "result" => %{
       "event_count" => 7544,
       "unique_id_count" => 43.18210933535
     },
     "timestamp" => "2019-03-01T00:00:00.000Z"
   },
   %{
     "result" => %{
       "event_count" => 1051,
       "unique_id_count" => 104.02052398847
     },
     "timestamp" => "2019-03-02T00:00:00.000Z"
   },
   %{
     "result" => %{
       "event_count" => 4591,
       "unique_id_count" => 79.19885795313
     },
     "timestamp" => "2019-03-03T00:00:00.000Z"
   }
 ]}

To request status from Broker run

Panoramix.status(:default)

Link to this section Summary

Link to this section Functions

Format a date or a datetime into a format that Druid expects.

Examples

iex> Panoramix.format_time! ~D[2018-07-20]
"2018-07-20"
iex> Panoramix.format_time!(
...>   Timex.to_datetime({{2018,07,20},{1,2,3}}))
"2018-07-20T01:02:03+00:00"
Link to this function

post_query(query, profile \\ :default) View Source
post_query(
  %Panoramix.Query{
    aggregations: term(),
    analysis_types: term(),
    bound: term(),
    context: term(),
    data_source: term(),
    dimension: term(),
    dimensions: term(),
    filter: term(),
    granularity: term(),
    intervals: term(),
    limit: term(),
    limit_spec: term(),
    merge: term(),
    metric: term(),
    post_aggregations: term(),
    query: term(),
    query_type: term(),
    search_dimensions: term(),
    sort: term(),
    threshold: term(),
    to_include: term(),
    virtual_columns: term()
  },
  atom()
) ::
  {:ok, term()}
  | {:error, HTTPoison.Error.t() | Jason.DecodeError.t() | Panoramix.Error.t()}

Link to this function

post_query!(query, profile \\ :default) View Source
post_query!(
  %Panoramix.Query{
    aggregations: term(),
    analysis_types: term(),
    bound: term(),
    context: term(),
    data_source: term(),
    dimension: term(),
    dimensions: term(),
    filter: term(),
    granularity: term(),
    intervals: term(),
    limit: term(),
    limit_spec: term(),
    merge: term(),
    metric: term(),
    post_aggregations: term(),
    query: term(),
    query_type: term(),
    search_dimensions: term(),
    sort: term(),
    threshold: term(),
    to_include: term(),
    virtual_columns: term()
  },
  atom()
) :: term()

Link to this function

status(profile \\ :default) View Source
status(atom()) ::
  {:ok, term()}
  | {:error, HTTPoison.Error.t() | Jason.DecodeError.t() | Panoramix.Error.t()}

Link to this function

status!(profile \\ :default) View Source
status!(atom()) :: term()