Skip to main content
The Internet of Things (IoT) describes a trend where computing capabilities are embedded into IoT devices. That is, physical objects, ranging from light bulbs to oil wells. Many IoT devices collect sensor data about their environment and generate time-series datasets with relational metadata. It is often necessary to simulate IoT datasets. For example, when you are testing a new system. This tutorial shows how to simulate a basic dataset in your , and then run simple queries on it. To simulate a more advanced dataset, see Time-series Benchmarking Suite (TSBS).

Prerequisites

Simulate a dataset

Run basic queries

After you simulate a dataset, you can run some basic queries on it. For example:
  • Average temperature and CPU by 30-minute windows:
    SELECT
      time_bucket('30 minutes', time) AS period,
      AVG(temperature) AS avg_temp,
      AVG(cpu) AS avg_cpu
    FROM sensor_data
    GROUP BY period;
    
    Sample output:
             period         |     avg_temp     |      avg_cpu      
    ------------------------+------------------+-------------------
     2020-03-31 19:00:00+00 | 49.6615830013373 | 0.477344429974134
     2020-03-31 22:00:00+00 | 58.8521540844037 | 0.503637770501276
     2020-03-31 16:00:00+00 | 50.4250325243144 | 0.511075591299838
     2020-03-31 17:30:00+00 | 49.0742547437549 | 0.527267253802468
     2020-04-01 14:30:00+00 | 49.3416377226822 | 0.438027751864865
     ...
    
  • Average and last temperature, average CPU by 30-minute windows:
    SELECT
      time_bucket('30 minutes', time) AS period,
      AVG(temperature) AS avg_temp,
      last(temperature, time) AS last_temp,
      AVG(cpu) AS avg_cpu
    FROM sensor_data
    GROUP BY period;
    
    Sample output:
             period         |     avg_temp     |    last_temp     |      avg_cpu      
    ------------------------+------------------+------------------+-------------------
     2020-03-31 19:00:00+00 | 49.6615830013373 | 84.3963081017137 | 0.477344429974134
     2020-03-31 22:00:00+00 | 58.8521540844037 | 76.5528806950897 | 0.503637770501276
     2020-03-31 16:00:00+00 | 50.4250325243144 | 43.5192013625056 | 0.511075591299838
     2020-03-31 17:30:00+00 | 49.0742547437549 |  22.740753274411 | 0.527267253802468
     2020-04-01 14:30:00+00 | 49.3416377226822 | 59.1331578791142 | 0.438027751864865
    ...
    
  • Query the metadata:
    SELECT
      sensors.location,
      time_bucket('30 minutes', time) AS period,
      AVG(temperature) AS avg_temp,
      last(temperature, time) AS last_temp,
      AVG(cpu) AS avg_cpu
    FROM sensor_data JOIN sensors on sensor_data.sensor_id = sensors.id
    GROUP BY period, sensors.location;
    
    Sample output:
     location |         period         |     avg_temp     |     last_temp     |      avg_cpu      
    ----------+------------------------+------------------+-------------------+-------------------
     ceiling  | 20120-03-31 15:30:00+00 | 25.4546818090603 |  24.3201029952615 | 0.435734559316188
     floor    | 2020-03-31 15:30:00+00 | 43.4297036845237 |  79.9925176426768 |  0.56992522883229
     ceiling  | 2020-03-31 16:00:00+00 | 53.8454438598516 |  43.5192013625056 | 0.490728285357666
     floor    | 2020-03-31 16:00:00+00 | 47.0046211887772 |  23.0230117216706 |  0.53142289724201
     ceiling  | 2020-03-31 16:30:00+00 | 58.7817596504465 |  63.6621567420661 | 0.488188337767497
     floor    | 2020-03-31 16:30:00+00 |  44.611586847653 |  2.21919436007738 | 0.434762630766879
     ceiling  | 2020-03-31 17:00:00+00 | 35.7026890735142 |  42.9420990403742 | 0.550129583687522
     floor    | 2020-03-31 17:00:00+00 | 62.2794370166957 |  52.6636955793947 | 0.454323202022351
    ...
    
You have now successfully simulated and run queries on an IoT dataset.