initial commit
This commit is contained in:
parent
4d0bc602ad
commit
a0fcf4e08c
5 changed files with 96 additions and 2 deletions
|
@ -1,2 +1,5 @@
|
|||
clj-druid
|
||||
=========
|
||||
# clj-druid
|
||||
|
||||
Clojure library for [Druid](http://druid.io/).
|
||||
|
||||
Currently in very early stage, contains schemas to validate a Druid query.
|
||||
|
|
3
doc/intro.md
Normal file
3
doc/intro.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# Introduction to clj-druid
|
||||
|
||||
TODO: write [great documentation](http://jacobian.org/writing/what-to-write/)
|
7
project.clj
Normal file
7
project.clj
Normal file
|
@ -0,0 +1,7 @@
|
|||
(defproject clj-druid "0.1.0-SNAPSHOT"
|
||||
:description "Clojure library for Druid.io"
|
||||
:url "http://example.com/FIXME"
|
||||
:license {:name "MIT"
|
||||
:url "http://opensource.org/licenses/MIT"}
|
||||
:dependencies [[org.clojure/clojure "1.6.0"]
|
||||
[prismatic/schema "0.2.6"]])
|
74
src/clj_druid/schemas.clj
Normal file
74
src/clj_druid/schemas.clj
Normal file
|
@ -0,0 +1,74 @@
|
|||
(ns clj-druid.schemas
|
||||
(:require [schema.core :as s]))
|
||||
|
||||
(s/defschema granularity
|
||||
"Druid Granularity option schema"
|
||||
(s/enum :all
|
||||
:none
|
||||
:minute
|
||||
:fifteen_minute
|
||||
:thirty_minute
|
||||
:hour
|
||||
:day))
|
||||
|
||||
(s/defschema limitSpec
|
||||
"Druid limitSpec option schema"
|
||||
{:type String :limit Long :columns [String]})
|
||||
|
||||
(s/defschema filterSchema
|
||||
"Druid filter field option schema"
|
||||
{:type (s/enum :selector :regex :and :or :not)
|
||||
(s/optional-key :dimension) String
|
||||
(s/optional-key :value) String
|
||||
(s/optional-key :pattern) String
|
||||
(s/optional-key :fields) [filterSchema]
|
||||
(s/optional-key :field) filterSchema})
|
||||
|
||||
(s/defschema aggregationSchema
|
||||
"Druid filter field option schema"
|
||||
{:type (s/enum :count :longSum :doubleSum :min :max)
|
||||
:name String
|
||||
(s/optional-key :fieldName) String})
|
||||
|
||||
(s/defschema postAggregationSchema
|
||||
"Druid filter field option schema"
|
||||
{:type (s/enum :arithmetic :fieldAccess :constant)
|
||||
:name String
|
||||
(s/optional-key :fieldName) String
|
||||
(s/optional-key :value) String})
|
||||
|
||||
(s/defschema intervalSchema
|
||||
"Druid interval schema"
|
||||
[String])
|
||||
|
||||
(s/defschema havingSchema
|
||||
{:type (s/enum :equalTo
|
||||
:greaterThan
|
||||
:lessThan
|
||||
:and
|
||||
:or
|
||||
:not)
|
||||
|
||||
(s/optional-key :aggregation) String
|
||||
(s/optional-key :value) String
|
||||
(s/optional-key :havingSpecs) [havingSchema]})
|
||||
|
||||
|
||||
(s/defschema druidQuery
|
||||
"Main druid query schema"
|
||||
{:queryType (s/enum :groupBy
|
||||
:search
|
||||
:segmentMetadata
|
||||
:timeBoundary
|
||||
:timeseries
|
||||
:topN)
|
||||
|
||||
:dataSource String
|
||||
:dimensions [String]
|
||||
:limitSpec limitSpec
|
||||
:having havingSchema
|
||||
:granularity granularity
|
||||
:filter filterSchema
|
||||
:aggregations aggregationSchema
|
||||
:postAggregations postAggregationSchema
|
||||
:intervals intervalSchema})
|
7
test/clj_druid/core_test.clj
Normal file
7
test/clj_druid/core_test.clj
Normal file
|
@ -0,0 +1,7 @@
|
|||
(ns clj-druid.core-test
|
||||
(:require [clojure.test :refer :all]
|
||||
[clj-druid.core :refer :all]))
|
||||
|
||||
(deftest a-test
|
||||
(testing "FIXME, I fail."
|
||||
(is (= 0 1))))
|
Loading…
Reference in a new issue