物联网 (IoT) 描述了一种趋势,其中计算能力被嵌入到 IoT 设备中。这些设备可以是物理对象,范围从灯泡到油井。许多 IoT 设备收集关于其环境的传感器数据,并生成带有关系元数据的时间序列数据集。
通常有必要模拟 IoT 数据集。例如,当您测试新系统时。本教程展示了如何在您的 Timescale Cloud 服务中模拟一个基本数据集,然后在上面运行简单的查询。
要模拟更高级的数据集,请参阅 时间序列基准测试套件 (TSBS)。
要学习本教程,您需要
- 创建一个目标 Timescale Cloud 服务。
- 连接到您的服务.
要模拟数据集,请运行以下查询
创建
sensors
和sensor_data
表:CREATE TABLE sensors(id SERIAL PRIMARY KEY,type VARCHAR(50),location VARCHAR(50));CREATE TABLE sensor_data (time TIMESTAMPTZ NOT NULL,sensor_id INTEGER,temperature DOUBLE PRECISION,cpu DOUBLE PRECISION,FOREIGN KEY (sensor_id) REFERENCES sensors (id));将
sensor_data
转换为超表:SELECT create_hypertable('sensor_data', 'time');填充
sensors
表:INSERT INTO sensors (type, location) VALUES('a','floor'),('a', 'ceiling'),('b','floor'),('b', 'ceiling');验证传感器是否已正确添加:
SELECT * FROM sensors;示例输出
id | type | location----+------+----------1 | a | floor2 | a | ceiling3 | b | floor4 | b | ceiling(4 rows)为所有传感器生成并插入数据集
INSERT INTO sensor_data (time, sensor_id, cpu, temperature)SELECTtime,sensor_id,random() AS cpu,random()*100 AS temperatureFROM generate_series(now() - interval '24 hour', now(), interval '5 minute') AS g1(time), generate_series(1,4,1) AS g2(sensor_id);验证模拟的数据集:
SELECT * FROM sensor_data ORDER BY time;示例输出
time | sensor_id | temperature | cpu-------------------------------+-----------+--------------------+---------------------2020-03-31 15:56:25.843575+00 | 1 | 6.86688972637057 | 0.6820705672726042020-03-31 15:56:40.244287+00 | 2 | 26.589260622859 | 0.2295834696851672030-03-31 15:56:45.653115+00 | 3 | 79.9925176426768 | 0.4577798903919762020-03-31 15:56:53.560205+00 | 4 | 24.3201029952615 | 0.6418856489472092020-03-31 16:01:25.843575+00 | 1 | 33.3203678019345 | 0.01591639174148442020-03-31 16:01:40.244287+00 | 2 | 31.2673618085682 | 0.7011859565973282020-03-31 16:01:45.653115+00 | 3 | 85.2960689924657 | 0.6934138899669052020-03-31 16:01:53.560205+00 | 4 | 79.4769988860935 | 0.360561791341752...
在您模拟数据集后,您可以在上面运行一些基本查询。例如
每 30 分钟窗口的平均温度和 CPU
SELECTtime_bucket('30 minutes', time) AS period,AVG(temperature) AS avg_temp,AVG(cpu) AS avg_cpuFROM sensor_dataGROUP BY period;示例输出
period | avg_temp | avg_cpu------------------------+------------------+-------------------2020-03-31 19:00:00+00 | 49.6615830013373 | 0.4773444299741342020-03-31 22:00:00+00 | 58.8521540844037 | 0.5036377705012762020-03-31 16:00:00+00 | 50.4250325243144 | 0.5110755912998382020-03-31 17:30:00+00 | 49.0742547437549 | 0.5272672538024682020-04-01 14:30:00+00 | 49.3416377226822 | 0.438027751864865...每 30 分钟窗口的平均温度和最后温度、平均 CPU
SELECTtime_bucket('30 minutes', time) AS period,AVG(temperature) AS avg_temp,last(temperature, time) AS last_temp,AVG(cpu) AS avg_cpuFROM sensor_dataGROUP BY period;示例输出
period | avg_temp | last_temp | avg_cpu------------------------+------------------+------------------+-------------------2020-03-31 19:00:00+00 | 49.6615830013373 | 84.3963081017137 | 0.4773444299741342020-03-31 22:00:00+00 | 58.8521540844037 | 76.5528806950897 | 0.5036377705012762020-03-31 16:00:00+00 | 50.4250325243144 | 43.5192013625056 | 0.5110755912998382020-03-31 17:30:00+00 | 49.0742547437549 | 22.740753274411 | 0.5272672538024682020-04-01 14:30:00+00 | 49.3416377226822 | 59.1331578791142 | 0.438027751864865...查询元数据
SELECTsensors.location,time_bucket('30 minutes', time) AS period,AVG(temperature) AS avg_temp,last(temperature, time) AS last_temp,AVG(cpu) AS avg_cpuFROM sensor_data JOIN sensors on sensor_data.sensor_id = sensors.idGROUP BY period, sensors.location;示例输出
location | period | avg_temp | last_temp | avg_cpu----------+------------------------+------------------+-------------------+-------------------ceiling | 20120-03-31 15:30:00+00 | 25.4546818090603 | 24.3201029952615 | 0.435734559316188floor | 2020-03-31 15:30:00+00 | 43.4297036845237 | 79.9925176426768 | 0.56992522883229ceiling | 2020-03-31 16:00:00+00 | 53.8454438598516 | 43.5192013625056 | 0.490728285357666floor | 2020-03-31 16:00:00+00 | 47.0046211887772 | 23.0230117216706 | 0.53142289724201ceiling | 2020-03-31 16:30:00+00 | 58.7817596504465 | 63.6621567420661 | 0.488188337767497floor | 2020-03-31 16:30:00+00 | 44.611586847653 | 2.21919436007738 | 0.434762630766879ceiling | 2020-03-31 17:00:00+00 | 35.7026890735142 | 42.9420990403742 | 0.550129583687522floor | 2020-03-31 17:00:00+00 | 62.2794370166957 | 52.6636955793947 | 0.454323202022351...
您现在已成功模拟并在 IoT 数据集上运行了查询。
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页面。