...
Code Block | ||
---|---|---|
| ||
{
"instrument_details": {
"type": "COUNTER",
"key": "count"
},
"name": "attendance_by_school_grade_for_a_day",
"is_active": true,
"event_schema": {
"$schema": "https://json-schema.org/draft/2019-09/schema",
"$id": "http://example.com/example.json",
"type": "object",
"default": {},
"title": "attendance_by_school_grade_for_a_day",
"required": ["date", "grade", "school_id", "count"],
"properties": {
"date": {
"type": "string",
"default": "",
"title": "The date Schema",
"examples": ["2019-01-01"]
},
"grade": {
"type": "integer",
"default": 0,
"title": "The grade Schema",
"examples": [1]
},
"school_id": {
"type": "integer",
"default": 0,
"title": "The school_id Schema",
"examples": [901]
}
},
"examples": [
{
"date": "2019-01-01",
"grade": 1,
"school_id": 901,
"count": 23
}
]
}
} |
...
If the data is not aggregated at a daily level, an event could also be shared at a week
, month
, year
level as well by just defining a start_date
and end_date
. Not the start_date
and end_date
should cleanly fall in a week
, month
, year
, last 7 days
, last 15 days,
or last 30 days
.
Code Block | ||
---|---|---|
| ||
{ "start_date": "2019-01-01", "end_date": "2019-02-01", "grade": 1, "school_id": 901, "count": 23 } |
...
The following keywords in an event will be treated as special keywords and don’t need to be part of the schema - date
, start_date
, end_date
, week
, month
, and year
and are preferred in the same order. They cannot be mappings to a dimension or dataset.
...
Code Block | ||
---|---|---|
| ||
const transformer = { name: "transformer_name", event_grammar: "es11", //EventGrammar on which the transformer can act. dataset_grammar: "ds23", //Dataset that this transformer which modify. config: { actor((callback, transform, transformBulk) => { // manage side effects here // Examples - logging, pushing to an externa event bus, etc. callback('SOME_EVENT'); // receive from parent transform(async (event: Event) => { // transform event to dataset; Has access to event and dataset grammars for validation }); // for speedups transformBulk(async (event: Event[]) => { // transform events to dataset; Has access to event and dataset grammars for validation }); // disposal return () => { /* do cleanup here */ /* push this to dataset */ }; }), } } |
...
You can also use keep the transformer as null
to just bypass everything and not store datatransform data and directly insert it in a dataset.
Defining Dimensions
cQube supports arbitrary dimensions to be stored. There are only two categories of dimensions that are supported:
...
School (Dynamic)
District (Dynamic)
Time (Time Based) -
week
,month
,year
,last 7 days
,last 15 days
,last 30 days
.
School as a dimension
Below is the specifications on how they should be defined in cQube.
...