CrossClj

0.2.18 docs

SourceDocs



RECENT

    y42/clj-druid

    Clojars

    Feb 27, 2017


    OWNER
    y42

    Readme

    Index of all namespaces


    « Project + dependencies

    Clojure library for Druid.io

    The README below is fetched from the published project artifact. Some relative links may be broken.

    clj-druid

    Build Status

    Clojure library for Druid.

    clj-druid eases druid integration providing a client as well as a set of Schema to validate queries. Current version is up to date with latest query API from official docs.

    Installing

    Add the following to your Leiningen project.clj:

    latest clj-druid version

    Usage

    Client

    Connect to a druid cluster through Zookeeper, this method supports auto detection and update of available brokers for easy HA/load balancing

    (use 'clj-druid.client)
    (connect {:zk {:host "127.0.0.1:2181,my-other-zk-host:2181" ; can contain multiple hosts separated by commas
                   :discovery-path "/druid/discovery"
                   :node-type "druid:broker"}})
    

    you can also connect by supplying a vector of hosts, useful for dev, local testing

    (use 'clj-druid.client)
    (connect {:hosts ["http://127.0.0.1:8083/druid/v2"]})
    

    Querying

    Issue druid queries supplying * a load balance strategy [fixed random] * a queryType * a query in the following form

    (def q
      {:queryType :timeseries
       :dataSource "sample_datasource"
       :granularity :day
       :filter {
         :type :and
         :fields [
           {:type :selector :dimension "sample_dimension1" :value "sample_value1"}
           {:type :or
             :fields [
               {:type :selector :dimension "sample_dimension2" :value "sample_value2"}
               {:type :selector :dimension "sample_dimension3" :value "sample_value3"}]}]}
       :aggregations [
         {:type :longSum :name "sample_name1", :fieldName "sample_fieldName1"}
         {:type :doubleSum :name "sample_name2", :fieldName "sample_fieldName2"}]
       :postAggregations [
         {:type :arithmetic
          :name "sample_divide"
          :fn "/"
          :fields [{:type :fieldAccess :name "sample_name1" :fieldName "sample_fieldName1"}
                   {:type :fieldAccess :name "sample_name2" :fieldName "sample_fieldName2"}]}]
    
       :intervals ["2012-01-01T00:00:00.000/2012-01-03T00:00:00.000"]})
       (let [client (connect {:zk {:host "127.0.0.1:2181"
                              :discovery-path "/druid/discovery"
                              :node-type "druid:broker"}})]
         (query client random (:queryType q) q)
         (close client))
    

    Example

    An example using compojure-api to spawn a full druid API is located in the examples folder

    git clone https://github.com/y42/clj-druid
    cd clj-druid/examples
    lein ring server
    

    Have Fun!

    License

    Copyright © 2015 Guillaume Buisson

    Distributed under the Eclipse Public License, the same as Clojure.