Benutzer-Werkzeuge

Webseiten-Werkzeuge


howto:datenmengen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
howto:datenmengen [2018/11/30 09:55] – [Aggregieren mit mySQL] wf_bitplan.comhowto:datenmengen [2018/12/04 08:49] wf_bitplan.com
Zeile 136: Zeile 136:
  
 ===== Aggregieren mit mySQL ===== ===== Aggregieren mit mySQL =====
-Das folgende mySQL Script erzeugt eine "daily" Tabelle mit Tagessummen für Messwerte vom Typ "electric meter". +**Function channelSum** 
-Im Beispiel werden die Werte für den Zeitraum 2014-01-01 bis 2018-11-30 aufsummiert. Für die Erzeugung von 7450 Einträgen hat diese Abfrage ca. 2700 Sekunden Zeit gebraucht. +Die folgende mySQL Hilfsfunktion berechnet die "Summe" von Werten für ein electric Meter über einen gegebenen Zeitraum.Dazu wird 
 +der höchste und der niedrigste Wert gesucht. Es gilt sum=max - min für solche Zähler. 
 + 
 +Der Aggregationseffekt von channelSum hängt von der Frequenz der Datenerhebung und der Länge des Intervals ab. Bei der Erhebung eines Wertes alle 15 Minuten und einer Zeitraumbreite von einem Tag werden 15x24 = 320 x weniger Daten geliefert. 
 +<code> 
 +-- 
 +-- Volkszähler mySQL function to sum up channel data for a given time period 
 +-- 
 +-- params 
 +--    channel_id  int   - the id of the channel 
 +--    from_time   date  - the time from which to sum up 
 +--    to_time     date  - the time to which to sum up 
 +-- 
 +CREATE FUNCTION channelSum(channel_id INT, from_time DATE, to_time DATE)  
 +  RETURNS DOUBLE 
 +  DETERMINISTIC 
 +BEGIN 
 + DECLARE d_min double; 
 + DECLARE d_max double; 
 + SELECT min(d.value), max(d.value) INTO d_min,d_max 
 + FROM data d  
 + WHERE d.timestamp between unix_timestamp(from_time)*1000 and unix_timestamp(to_time)*1000 and d.channel_id=channel_id; 
 + RETURN d_max-d_min; 
 +END 
 +</code> 
 + 
 +**Daily Tabelle** 
 +Das folgende mySQL Script erzeugt mit Hilfe der obigen "channelSum" Funktion eine "daily" Tabelle mit Tagessummen für Messwerte vom Typ "electric meter". Im Beispiel werden die Werte für den Zeitraum 2014-01-01 bis 2018-11-30 aufsummiert. Für die Erzeugung von 7450 Einträgen hat diese Abfrage ca. 2700 Sekunden Zeit gebraucht und dazu mehrere Millionen Einträge betrachtet. Beim zweiten Aufruf kann man statt des "CREATE Table" einen "INSERT " benutzen, sonst ist zuvor ein "DROP Table" erforderlich
  
 Als Basis diente eine SQL-Abfrage zur Erzeugung einer Liste von Tagen siehe: https://stackoverflow.com/a/53541150/1497139 Als Basis diente eine SQL-Abfrage zur Erzeugung einer Liste von Tagen siehe: https://stackoverflow.com/a/53541150/1497139
howto/datenmengen.txt · Zuletzt geändert: 2024/05/18 10:16 von jau