Thinking in WarpScript™ – Fetch data within a temporal or a count range

Fetch data within a temporal or a count range

It is time to go back to basics. The FETCH function allows you to extract your data from Warp 10™ in different manners.

Fetch in a glance

The FETCH function has the following signature:

[ 
    < read token >
    < class name selector >
    < labels and/or attributes selector >
    < start of the range >
    < end of the range >
] FETCH

Remember that the end of the range is in the past compared to the start, we are looking back in time.

A class name selector could be a full class name or a regular expression: 'my.sensor.speed' or '~my.*'.

A labels and/or attribute selector could be empty or described as a string or a regular expression:

  • {}
  • { 'sensorId' '123' 'customer' '456' }
  • { 'sensorId' '~12.*' }.

Get the last 100 data-points

The start of the range is a positive LONG, the end of the range is a negative LONG.

From now

[ < read token > 'my.sensor.speed' {} NOW -100 ] FETCH

The start of the range is NOW and the end of the range is a negative value which corresponds to the number of data-points we want to extract.

From a specific date

[ < read token > 'my.sensor.speed' {} 1568812068234472 -100 ] FETCH

The start of the range is a timestamp in microseconds.

You can obtain such a timestamp with TOTIMESTAMP or TSELEMENTS->:
"2019-09-18T13:09:04.749292Z" TOTIMESTAMP
[ 2019 09 18 13 09 04 ] TSELEMENTS->

Get the last hour of data

The start of the range is a positive LONG, the end of the range is a positive LONG.

From now

[ < read token > 'my.sensor.speed' {} NOW 3600000000 ] FETCH

The start of the range is NOW and the end of the range is defined by a positive value which corresponds to a number of microseconds.

To obtain an amount of microseconds, you can use time unit functions :
d (day), h (hour), m (minute), ms (millisecond), ns (nanosecond), ps (picosecond), s (second), us (microsecond), w (week)

So in the previous warpscript, you could use 1 h instead of 3600000000.

From a specific date

[ < read token > 'my.sensor.speed' {} 1568812068234472 1 h ] FETCH

The start of the range is a timestamp in microseconds.

You can obtain such a timestamp with TOTIMESTAMP or TSELEMENTS->:
"2019-09-18T13:09:04.749292Z" TOTIMESTAMP
[ 2019 09 18 13 09 04 ] TSELEMENTS->

Between two dates

The start and the end of the string must be ISO-8601 strings.

[ < read token > 'my.sensor.speed' {} "2019-09-01T00:00:00.000000Z" "2019-10-01T00:00:00.000000Z" ] FETCH

You can obtain such a string with ISO8601 and TSELEMENTS->:
1568812068234472 ISO8601
[ 2019 09 18 13 09 04 ] TSELEMENTS-> ISO8601

A last word

All dates and timestamps must be in UTC. If you want to switch from timezones, have a look here.

Try it with your data, you can use our Sandbox and Warp-Studio for that.

Share