distil 💧

GoDoc Build Status Go Report Card license

In memory dataset filtering.


go get -u


Given a dataset...

data := []map[string]interface{}{
	{"location": "New York", "department": "Engineering", "salary": 120000, "start_date": "2016-01-23T12:00:00Z"},
	{"location": "New York", "department": "Engineering", "salary": 80000, "start_date": "2016-03-23T12:00:00Z"},
	{"location": "New York", "department": "Marketing", "salary": 90000, "start_date": "2016-01-23T12:00:00Z"},
	{"location": "New York", "department": "Marketing", "salary": 150000, "start_date": "2016-01-23T12:00:00Z"},
	{"location": "Chicago", "department": "Engineering", "salary": 120000, "start_date": "2016-01-23T12:00:00Z"},
	{"location": "Chicago", "department": "Engineering", "salary": 160000, "start_date": "2016-03-23T12:00:00Z"},

Initialize distil, build filters and run...

// Init distil dataset.
dataset := NewDataset(data...)

// Build a distil query and apply filters.
query := &Query{}
query.Filters = append(query.Filters, Filter{
	Field: "location",
	Value: "Chicago",
	Operator: Operator{
		Code: "eq",
		Type: "string",

// Run it.
results, err := dataset.Run(query)
if err != nil {
  errors.New("Unexpected error running query: %s", err.Error())


	{"location": "Chicago", "department": "Engineering", "salary": 120000, "start_date": "2016-01-23T12:00:00Z"},
	{"location": "Chicago", "department": "Engineering", "salary": 160000, "start_date": "2016-03-23T12:00:00Z"},

Find a list of available operators here.

Thanks & Acknowledgements 👌

The packages's architecture is adapted from aggro, created by Mal Curtis. 🍻


If you've found a bug or would like to contribute, please create an issue here on GitHub, or better yet fork the project and submit a pull request!




This section is empty.


This section is empty.


This section is empty.


type Dataset

type Dataset struct {
	Rows []map[string]interface{}

    Dataset holds our raw data that filters will be applied against.

    func NewDataset

    func NewDataset(data[string]interface{}) *Dataset

      NewDataset creates a new Dataset adding the appropriate rows.

      func (*Dataset) Run

      func (set *Dataset) Run(query *Query) ([]map[string]interface{}, error)

        Run executes the query against the dataset.

        type Filter

        type Filter struct {
        	Field    string      `json:"field"`
        	Operator Operator    `json:"operator"`
        	Value    interface{} `json:"value"`

          Filter represents fields needed to distil a dataset.

          type Operator

          type Operator struct {
          	Code string `json:"code"`
          	Type string `json:"type"`

            Operator represents a filter operator that will be used to distil a dataset.

            type Query

            type Query struct {
            	Filters []Filter

              Query ...