godruid

package module
Version: v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 31, 2019 License: MIT Imports: 5 Imported by: 0

README

godruid

An open source Golang client for Druid

Node: This project is not yet beta released. It should certainly contains bugs, and the apis could change in any time. So please be really careful if you choose to use it in production. Currently the groupBy and topN queries are used in our production.

Any bug fixes, issues, contributions, questions are welcome.

Documentation

Index

Constants

View Source
const (
	LOWERSTRICT = "lowerStrict"
	UPPERSTRICT = "upperStrict"
	LOWERLIMIT  = "lowerLimit"
	UPPERLIMIT  = "upperLimit"
)

Filter constants

View Source
const (
	TIMEOUT          = "timeout"
	SKIPEMPTYBUCKETS = "skipEmptyBuckets"
	QUERYID          = "queryId"
)

Context constants

View Source
const (
	DirectionASC  = "ASCENDING"
	DirectionDESC = "DESCENDING"
)
View Source
const (
	DefaultEndPoint = "/druid/v2"
)

Variables

View Source
var (
	ToIncludeAll  = &ToInclude{Type: "All"}
	ToIncludeNone = &ToInclude{Type: "None"}
)
View Source
var (
	SearchSortLexicographic = &SearchSort{Type: "lexicographic"}
	SearchSortStrlen        = &SearchSort{Type: "strlen"}
)

Functions

func GranDuration

func GranDuration(duration string, origin string) granDuration

func GranPeriod

func GranPeriod(period string, timeZone string, origin string) granPeriod

Types

type AggRefer

type AggRefer struct {
	Name  string
	Refer string // The refer of Name, empty means Name has no refer.
}

The agg reference.

type Aggregation

type Aggregation struct {
	Type        string       `json:"type"`
	Name        string       `json:"name,omitempty"`
	FieldName   string       `json:"fieldName,omitempty"`
	FieldNames  []string     `json:"fieldNames,omitempty"`
	FnAggregate string       `json:"fnAggregate,omitempty"`
	FnCombine   string       `json:"fnCombine,omitempty"`
	FnReset     string       `json:"fnReset,omitempty"`
	ByRow       bool         `json:"byRow,omitempty"`
	Filter      *Filter      `json:"filter,omitempty"`
	Resolution  int32        `json:"resolution,omitempty"`
	NumBuckets  int32        `json:"numBuckets,omitempty"`
	LowerLimit  string       `json:"lowerLimit,omitempty"`
	UpperLimit  string       `json:"upperLimit,omitempty"`
	Aggregator  *Aggregation `json:"aggregator,omitempty"`
	Round       bool         `json:"round,omitempty"`
}

func AggCardinality

func AggCardinality(name string, fieldNames []string, byRow ...bool) Aggregation

func AggCount

func AggCount(name string) *Aggregation

func AggDoubleMax

func AggDoubleMax(name, fieldName string) *Aggregation

func AggDoubleMin

func AggDoubleMin(name, fieldName string) *Aggregation

func AggDoubleSum

func AggDoubleSum(name, fieldName string) *Aggregation

func AggFiltered

func AggFiltered(filter *Filter, aggregator *Aggregation) Aggregation

func AggHistoFold

func AggHistoFold(name string, fieldName string, resolution int32, numBuckets int32, lowerLimit string, upperLimit string) Aggregation

func AggJavaScript

func AggJavaScript(name, fnAggregate, fnCombine, fnReset string, fieldNames []string) Aggregation

func AggLongMax

func AggLongMax(name, fieldName string) *Aggregation

func AggLongMin

func AggLongMin(name, fieldName string) *Aggregation

func AggLongSum

func AggLongSum(name, fieldName string) *Aggregation

func AggMax

func AggMax(name, fieldName string) *Aggregation

func AggMin

func AggMin(name, fieldName string) *Aggregation

func AggRawJson

func AggRawJson(rawJson string) *Aggregation

type Client

type Client struct {
	Url      string
	EndPoint string

	Debug        bool
	LastRequest  string
	LastResponse string
	HttpClient   *http.Client
}

func (*Client) Query

func (c *Client) Query(query Query, authToken string) (err error)

func (*Client) QueryRaw

func (c *Client) QueryRaw(req []byte, authToken string) (result []byte, err error)

type Column

type Column struct {
	AsNumber  bool   `json:"asNumber"`
	Dimension string `json:"dimension"`
	Direction string `json:"direction"`
}

type ColumnItem

type ColumnItem struct {
	Type        string      `json:"type"`
	Size        int         `json:"size"`
	Cardinality interface{} `json:"cardinality"`
}

type DimExtractionFn

type DimExtractionFn struct {
	Type        string       `json:"type"`
	Expr        string       `json:"expr,omitempty"`
	Query       *SearchQuery `json:"query,omitempty"`
	Format      string       `json:"format,omitempty"`
	Function    string       `json:"function,omitempty"`
	TimeZone    string       `json:"timeZone,omitempty"`
	Locale      string       `json:"locale,omitempty"`
	Granularity string       `json:"granularity,omitempty"`
	AsMillis    bool         `json:"asMillis,omitempty"`
}

func DimExFnJavascript

func DimExFnJavascript(function string) *DimExtractionFn

func DimExFnPartial

func DimExFnPartial(expr string) *DimExtractionFn

func DimExFnRegex

func DimExFnRegex(expr string) *DimExtractionFn

func DimExFnSearchQuerySpec

func DimExFnSearchQuerySpec(query *SearchQuery) *DimExtractionFn

func DimExFnTime

func DimExFnTime(timeFormat, timeZone string, locale string, granularity string, asMillis bool) *DimExtractionFn

type DimSpec

type DimSpec interface{}

func DimDefault

func DimDefault(dimension, outputName string) DimSpec

func DimExtraction

func DimExtraction(dimension, outputName string, fn *DimExtractionFn) DimSpec

type DimValue

type DimValue struct {
	Dimension string `json:"dimension"`
	Value     string `json:"value"`
	Count     int    `json:"count"`
}

type Dimension

type Dimension struct {
	Type         string           `json:"type"`
	Dimension    string           `json:"dimension"`
	OutputName   string           `json:"outputName"`
	ExtractionFn *DimExtractionFn `json:"extractionFn,omitempty"`
}

type ExtractionFn

type ExtractionFn interface{}

type Filter

type Filter struct {
	Type         string        `json:"type"`
	Dimension    string        `json:"dimension,omitempty"`
	Value        interface{}   `json:"value,omitempty"`
	Values       interface{}   `json:"values,omitempty"`
	Pattern      string        `json:"pattern,omitempty"`
	Function     string        `json:"function,omitempty"`
	Field        *Filter       `json:"field,omitempty"`
	Fields       []*Filter     `json:"fields,omitempty"`
	Upper        float32       `json:"upper,omitempty"`
	Lower        float32       `json:"lower,omitempty"`
	Ordering     Ordering      `json:"ordering,omitempty"`
	UpperStrict  bool          `json:"upperStrict,omitempty"`
	LowerStrict  bool          `json:"lowerStrict,omitempty"`
	ExtractionFn *ExtractionFn `json:"extractionFn,omitempty"`
}

func FilterAnd

func FilterAnd(filters ...*Filter) *Filter

func FilterJavaScript

func FilterJavaScript(dimension, function string) *Filter

func FilterLowerBound

func FilterLowerBound(dimension string, ordering Ordering, bound float32, strict bool) *Filter

func FilterLowerUpperBound

func FilterLowerUpperBound(dimension string, ordering Ordering, lowerBound float32, lowerStrict bool, upperBound float32, upperStrict bool) *Filter

func FilterNot

func FilterNot(filter *Filter) *Filter

func FilterOr

func FilterOr(filters ...*Filter) *Filter

func FilterRegex

func FilterRegex(dimension, pattern string) *Filter

func FilterSelector

func FilterSelector(dimension string, value interface{}) *Filter

func FilterUpperBound

func FilterUpperBound(dimension string, ordering Ordering, bound float32, strict bool) *Filter

type Granlarity

type Granlarity interface{}

type GroupbyItem

type GroupbyItem struct {
	Version   string                 `json:"version"`
	Timestamp string                 `json:"timestamp"`
	Event     map[string]interface{} `json:"event"`
}

type Having

type Having struct {
	Type        string      `json:"type"`
	Aggregation string      `json:"aggregation,omitempty"`
	Value       interface{} `json:"value,omitempty"`
	HavingSpec  *Having     `json:"havingSpec,omitempty"`
	HavingSpecs []*Having   `json:"havingSpecs,omitempty"`
}

func HavingAnd

func HavingAnd(havings ...*Having) *Having

func HavingEqualTo

func HavingEqualTo(agg string, value interface{}) *Having

func HavingGreaterThan

func HavingGreaterThan(agg string, value interface{}) *Having

func HavingLessThan

func HavingLessThan(agg string, value interface{}) *Having

func HavingNot

func HavingNot(having *Having) *Having

func HavingOr

func HavingOr(havings ...*Having) *Having

type Intervals

type Intervals interface{}

type Limit

type Limit struct {
	Type    string   `json:"type"`
	Limit   int      `json:"limit"`
	Columns []Column `json:"columns,omitempty"`
}

func LimitDefault

func LimitDefault(limit int, columns ...[]Column) *Limit

type Ordering

type Ordering string
const (
	LEXICOGRAPHIC Ordering = "lexicographic"
	ALPHANUMERIC  Ordering = "alphanumeric"
	NUMERIC       Ordering = "numeric"
	STRLEN        Ordering = "strlen"
)

type PostAggregation

type PostAggregation struct {
	Type       string            `json:"type"`
	Name       string            `json:"name,omitempty"`
	Value      interface{}       `json:"value,omitempty"`
	Fn         string            `json:"fn,omitempty"`
	Fields     []PostAggregation `json:"fields,omitempty"`
	FieldName  string            `json:"fieldName,omitempty"`
	FieldNames []string          `json:"fieldNames,omitempty"`
	Function   string            `json:"function,omitempty"`
}

func PostAggArithmetic

func PostAggArithmetic(name, fn string, fields []PostAggregation) PostAggregation

func PostAggConstant

func PostAggConstant(name string, value interface{}) PostAggregation

func PostAggFieldAccessor

func PostAggFieldAccessor(fieldName string) PostAggregation

func PostAggFieldHyperUnique

func PostAggFieldHyperUnique(fieldName string) PostAggregation

func PostAggJavaScript

func PostAggJavaScript(name, function string, fieldNames []string) PostAggregation

func PostAggRawJson

func PostAggRawJson(rawJson string) PostAggregation

func (PostAggregation) GetReferAggs

func (pa PostAggregation) GetReferAggs(parentName ...string) (refers []AggRefer)

Return the aggregations or post aggregations which this post aggregation used. It could be helpful while automatically filling the aggregations or post aggregations base on this.

type Query

type Query interface {
	GetRawJSON() []byte
	// contains filtered or unexported methods
}

The Query interface stands for any kinds of druid query.

type QueryGroupBy

type QueryGroupBy struct {
	QueryType        QueryType              `json:"queryType"`
	DataSource       string                 `json:"dataSource"`
	Dimensions       []DimSpec              `json:"dimensions"`
	Granularity      Granlarity             `json:"granularity"`
	LimitSpec        *Limit                 `json:"limitSpec,omitempty"`
	Having           *Having                `json:"having,omitempty"`
	Filter           *Filter                `json:"filter,omitempty"`
	Aggregations     []Aggregation          `json:"aggregations"`
	PostAggregations []PostAggregation      `json:"postAggregations,omitempty"`
	Intervals        Intervals              `json:"intervals"`
	Context          map[string]interface{} `json:"context,omitempty"`
	VirtualColumns   []VirtualColumn        `json:"virtualColumns,omitempty"`
	QueryResult      []GroupbyItem          `json:"-"`
	RawJSON          []byte
}

func (*QueryGroupBy) GetRawJSON

func (q *QueryGroupBy) GetRawJSON() []byte

type QueryScan

type QueryScan struct {
	QueryType      QueryType              `json:"queryType"`
	DataSource     string                 `json:"dataSource"`
	Limit          int                    `json:"limit,omitempty"`
	Columns        []string               `json:"columns,omitempty"`
	ResultFormat   string                 `json:"resultFormat,omitempty"`
	Metric         interface{}            `json:"metric"` // *TopNMetric
	Filter         *Filter                `json:"filter,omitempty"`
	Intervals      Intervals              `json:"intervals"`
	Context        map[string]interface{} `json:"context,omitempty"`
	VirtualColumns []VirtualColumn        `json:"virtualColumns,omitempty"`
	QueryResult    []ScanBlob             `json:"-"`
	RawJSON        []byte
}

func (*QueryScan) GetRawJSON

func (q *QueryScan) GetRawJSON() []byte

type QuerySearch

type QuerySearch struct {
	QueryType        QueryType              `json:"queryType"`
	DataSource       string                 `json:"dataSource"`
	Granularity      Granlarity             `json:"granularity"`
	Filter           *Filter                `json:"filter,omitempty"`
	Intervals        Intervals              `json:"intervals"`
	SearchDimensions []string               `json:"searchDimensions,omitempty"`
	Query            *SearchQuery           `json:"query"`
	Sort             *SearchSort            `json:"sort"`
	Context          map[string]interface{} `json:"context,omitempty"`
	VirtualColumns   []VirtualColumn        `json:"virtualColumns,omitempty"`
	QueryResult      []SearchItem           `json:"-"`
	RawJSON          []byte
}

func (*QuerySearch) GetRawJSON

func (q *QuerySearch) GetRawJSON() []byte

type QuerySegmentMetadata

type QuerySegmentMetadata struct {
	QueryType      QueryType              `json:"queryType"`
	DataSource     string                 `json:"dataSource"`
	Intervals      Intervals              `json:"intervals"`
	ToInclude      *ToInclude             `json:"toInclude,omitempty"`
	Merge          interface{}            `json:"merge,omitempty"`
	Context        map[string]interface{} `json:"context,omitempty"`
	VirtualColumns []VirtualColumn        `json:"virtualColumns,omitempty"`
	QueryResult    []SegmentMetaData      `json:"-"`
	RawJSON        []byte
}

func (*QuerySegmentMetadata) GetRawJSON

func (q *QuerySegmentMetadata) GetRawJSON() []byte

type QuerySelect

type QuerySelect struct {
	QueryType      QueryType              `json:"queryType"`
	DataSource     string                 `json:"dataSource"`
	Intervals      Intervals              `json:"intervals"`
	Filter         *Filter                `json:"filter,omitempty"`
	Dimensions     []DimSpec              `json:"dimensions"`
	Metrics        []string               `json:"metrics"`
	Granularity    Granlarity             `json:"granularity"`
	PagingSpec     map[string]interface{} `json:"pagingSpec,omitempty"`
	Context        map[string]interface{} `json:"context,omitempty"`
	VirtualColumns []VirtualColumn        `json:"virtualColumns,omitempty"`
	QueryResult    SelectBlob             `json:"-"`
	RawJSON        []byte
}

func (*QuerySelect) GetRawJSON

func (q *QuerySelect) GetRawJSON() []byte

type QueryTimeBoundary

type QueryTimeBoundary struct {
	QueryType  QueryType              `json:"queryType"`
	DataSource string                 `json:"dataSource"`
	Bound      string                 `json:"bound,omitempty"`
	Context    map[string]interface{} `json:"context,omitempty"`

	QueryResult []TimeBoundaryItem `json:"-"`
	RawJSON     []byte
}

func (*QueryTimeBoundary) GetRawJSON

func (q *QueryTimeBoundary) GetRawJSON() []byte

type QueryTimeseries

type QueryTimeseries struct {
	QueryType        QueryType              `json:"queryType"`
	DataSource       string                 `json:"dataSource"`
	Granularity      Granlarity             `json:"granularity"`
	Filter           *Filter                `json:"filter,omitempty"`
	Aggregations     []Aggregation          `json:"aggregations"`
	PostAggregations []PostAggregation      `json:"postAggregations,omitempty"`
	Intervals        Intervals              `json:"intervals"`
	Context          map[string]interface{} `json:"context,omitempty"`
	VirtualColumns   []VirtualColumn        `json:"virtualColumns,omitempty"`
	QueryResult      []Timeseries           `json:"-"`
	RawJSON          []byte
}

func (*QueryTimeseries) GetRawJSON

func (q *QueryTimeseries) GetRawJSON() []byte

type QueryTopN

type QueryTopN struct {
	QueryType        QueryType              `json:"queryType"`
	DataSource       string                 `json:"dataSource"`
	Granularity      Granlarity             `json:"granularity"`
	Dimension        DimSpec                `json:"dimension"`
	Threshold        int                    `json:"threshold"`
	Metric           interface{}            `json:"metric"` // *TopNMetric
	Filter           *Filter                `json:"filter,omitempty"`
	Aggregations     []Aggregation          `json:"aggregations"`
	PostAggregations []PostAggregation      `json:"postAggregations,omitempty"`
	Intervals        Intervals              `json:"intervals"`
	Context          map[string]interface{} `json:"context,omitempty"`
	VirtualColumns   []VirtualColumn        `json:"virtualColumns,omitempty"`
	QueryResult      []TopNItem             `json:"-"`
	RawJSON          []byte
}

func (*QueryTopN) GetRawJSON

func (q *QueryTopN) GetRawJSON() []byte

type QueryType

type QueryType string
const (
	TIMESERIES      QueryType = "timeseries"
	TOPN            QueryType = "topN"
	SEARCH          QueryType = "search"
	GROUPBY         QueryType = "groupBy"
	SEGMENTMETADATA QueryType = "segmentMetadata"
	TIMEBOUNDARY    QueryType = "timeBoundary"
	SELECT          QueryType = "select"
	SCAN            QueryType = "scan"
)

type RegisteredLookupExtractionFn

type RegisteredLookupExtractionFn struct {
	Type   string `json:"type"`
	Lookup string `json:"lookup"`
}

type ScanBlob

type ScanBlob struct {
	SegmentID string                   `json:"segmentId"`
	Columns   []string                 `json:"columns"`
	Events    []map[string]interface{} `json:"events"`
}

type SearchItem

type SearchItem struct {
	Timestamp string     `json:"timestamp"`
	Result    []DimValue `json:"result"`
}

type SearchQuery

type SearchQuery struct {
	Type   string        `json:"type"`
	Value  interface{}   `json:"value,omitempty"`
	Values []interface{} `json:"values,omitempty"`
}

func SearchQueryFragmentSearch

func SearchQueryFragmentSearch(values []interface{}) *SearchQuery

func SearchQueryInsensitiveContains

func SearchQueryInsensitiveContains(value interface{}) *SearchQuery

type SearchSort

type SearchSort struct {
	Type string `json:"type"`
}

type SegmentMetaData

type SegmentMetaData struct {
	Id        string                `json:"id"`
	Intervals Intervals             `json:"intervals"`
	Columns   map[string]ColumnItem `json:"columns"`
}

type SelectBlob

type SelectBlob struct {
	Timestamp string       `json:"timestamp"`
	Result    SelectResult `json:"result"`
}

Select json blob from druid comes back as following: http://druid.io/docs/latest/querying/select-query.html the interesting results are in events blob which we call as 'SelectEvent'.

type SelectEvent

type SelectEvent struct {
	SegmentId string                 `json:"segmentId"`
	Offset    int64                  `json:"offset"`
	Event     map[string]interface{} `json:"event"`
}

type SelectResult

type SelectResult struct {
	PagingIdentifiers map[string]interface{} `json:"pagingIdentifiers"`
	Events            []SelectEvent          `json:"events"`
}

type SimpleGran

type SimpleGran string
const (
	GranAll        SimpleGran = "all"
	GranNone       SimpleGran = "none"
	GranMinute     SimpleGran = "minute"
	GranFifteenMin SimpleGran = "fifteen_minute"
	GranThirtyMin  SimpleGran = "thirty_minute"
	GranHour       SimpleGran = "hour"
	GranDay        SimpleGran = "day"
	GranWeek       SimpleGran = "week"
	GranMonth      SimpleGran = "month"
	GranQuarter    SimpleGran = "quarter"
	GranYear       SimpleGran = "year"
)

type TimeBoundary

type TimeBoundary struct {
	MinTime string `json:"minTime"`
	MaxTime string `json:"maxTime"`
}

type TimeBoundaryItem

type TimeBoundaryItem struct {
	Timestamp string       `json:"timestamp"`
	Result    TimeBoundary `json:"result"`
}

type TimeExtractionDimensionSpec

type TimeExtractionDimensionSpec struct {
	Type               string       `json:"type"`
	Dimension          string       `json:"dimension"`
	OutputName         string       `json:"outputName"`
	ExtractionFunction ExtractionFn `json:"extractionFn"`
}

type TimeExtractionFn

type TimeExtractionFn struct {
	Type     string `json:"type"`
	Format   string `json:"format"`
	TimeZone string `json:"timeZone"`
	Locale   string `json:"locale"`
}

type Timeseries

type Timeseries struct {
	Timestamp string                 `json:"timestamp"`
	Result    map[string]interface{} `json:"result"`
}

type ToInclude

type ToInclude struct {
	Type    string   `json:"type"`
	Columns []string `json:"columns,omitempty"`
}

func ToIncludeList

func ToIncludeList(columns []string) *ToInclude

type TopNItem

type TopNItem struct {
	Timestamp string                   `json:"timestamp"`
	Result    []map[string]interface{} `json:"result"`
}

type TopNMetric

type TopNMetric struct {
	Type         string      `json:"type"`
	Metric       interface{} `json:"metric,omitempty"`
	PreviousStop string      `json:"previousStop"`
}

func TopNMetricAlphaNumeric

func TopNMetricAlphaNumeric(previousStop string) *TopNMetric

func TopNMetricInverted

func TopNMetricInverted(metric *TopNMetric) *TopNMetric

func TopNMetricLexicographic

func TopNMetricLexicographic(previousStop string) *TopNMetric

func TopNMetricNumeric

func TopNMetricNumeric(metric string) *TopNMetric

type VirtualColumn

type VirtualColumn struct {
	Type       string                  `json:"type"`
	Name       string                  `json:"name"`
	Expression string                  `json:"expression"`
	OutputType VirtualColumnOutputType `json:"outputType"`
}

func NewVirtualColumn

func NewVirtualColumn(name string, expression string, outputType VirtualColumnOutputType) VirtualColumn

type VirtualColumnOutputType

type VirtualColumnOutputType string
const (
	VirtualColumnLong   VirtualColumnOutputType = "LONG"
	VirtualColumnFloat  VirtualColumnOutputType = "FLOAT"
	VirtualColumnDouble VirtualColumnOutputType = "DOUBLE"
	VirtualColumnString VirtualColumnOutputType = "STRING"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
t or T : Toggle theme light dark auto
y or Y : Canonical URL