Rechtschreib korrektur
This commit is contained in:
parent
5d517695e3
commit
90c37a2b16
1
arbeit/.vscode/settings.json
vendored
1
arbeit/.vscode/settings.json
vendored
|
@ -7,7 +7,6 @@
|
|||
"pdflatex",
|
||||
"biber",
|
||||
"makeglossaries",
|
||||
"pdflatex",
|
||||
"pdflatex"
|
||||
]
|
||||
}
|
||||
|
|
Binary file not shown.
|
@ -24,7 +24,7 @@
|
|||
\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
|
||||
\caption{InfluxDB Dashboard} % Überschrift
|
||||
\includegraphics[width=1\textwidth]{img/InfluxDB-Dashboard}% Pfad
|
||||
\source{Eigner Screenshot InfluxDB Webinterface} % Quelle\label{fig:dashboard}
|
||||
\source{Eigener Screenshot InfluxDB Webinterface} % Quelle\label{fig:dashboard}
|
||||
\label{fig:dashboard}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
@ -34,7 +34,7 @@
|
|||
\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
|
||||
\caption{InfluxDB Load Data Source} % Überschrift
|
||||
\includegraphics[width=1\textwidth]{img/InfluxD-LoadData-Sources.PNG} % Pfad
|
||||
\source{Eigner Screenshot InfluxDB Webinterface} % Quelle
|
||||
\source{Eigener Screenshot InfluxDB Webinterface} % Quelle
|
||||
\label{fig:load-data-source}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
@ -44,7 +44,7 @@
|
|||
\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
|
||||
\caption{InfluxDB Load Data Bucket} % Überschrift
|
||||
\includegraphics[width=1\textwidth]{img/InfluxD-LoadData-Bucket.PNG} % Pfad
|
||||
\source{Eigner Screenshot InfluxDB Webinterface} % Quelle
|
||||
\source{Eigener Screenshot InfluxDB Webinterface} % Quelle
|
||||
\label{fig:load-data-bucket}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
@ -54,7 +54,7 @@
|
|||
\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
|
||||
\caption{InfluxDB Load Data Bucket hinzufügen} % Überschrift
|
||||
\includegraphics[width=1\textwidth]{img/InfluxD-LoadData-AddBucket.PNG} % Pfad
|
||||
\source{Eigner Screenshot InfluxDB Webinterface} % Quelle
|
||||
\source{Eigener Screenshot InfluxDB Webinterface} % Quelle
|
||||
\label{fig:load-data-add-bucket}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
@ -64,7 +64,7 @@
|
|||
\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
|
||||
\caption{InfluxDB Load Data API Tokens} % Überschrift
|
||||
\includegraphics[width=1\textwidth]{img/InfluxD-LoadData-API-Key.PNG} % Pfad
|
||||
\source{Eigner Screenshot InfluxDB Webinterface} % Quelle
|
||||
\source{Eigener Screenshot InfluxDB Webinterface} % Quelle
|
||||
\label{fig:load-data-api-token}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
@ -74,7 +74,16 @@
|
|||
\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
|
||||
\caption{InfluxDB Load Data API Token hinzufügen} % Überschrift
|
||||
\includegraphics[width=1\textwidth]{img/InfluxD-LoadData-API-Key-anlegen.PNG} % Pfad
|
||||
\source{Eigner Screenshot InfluxDB Webinterface} % Quelle
|
||||
\source{Eigener Screenshot InfluxDB Webinterface} % Quelle
|
||||
\label{fig:load-data-add-token}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
\end{figure}
|
||||
|
||||
% Die anzeige Funktioniert leider nicht!
|
||||
%\anhang{DWD Wetterdaten}
|
||||
%\begin{figure}[bht]
|
||||
%\begin{lstlisting}[caption=Beschreibung Stationen {Quelle: DWD Datei Download}, label=list:lineproto, basicstyle=\tiny,],
|
||||
%Stations_id von_datum bis_datum Stationshoehe geoBreite geoLaenge Stationsname Bundesland
|
||||
%----------- --------- --------- ------------- --------- --------- ----------------------------------------- ----------
|
||||
%\end{lstlisting}
|
||||
%\end{figure}
|
||||
|
|
|
@ -1,17 +1,15 @@
|
|||
%!TEX root = ../Thesis.tex
|
||||
\section{Einleitung}
|
||||
|
||||
\subsection{Zielsetzuing}
|
||||
\subsection{Zielsetzung}
|
||||
|
||||
Das Ziel dieser Arbeit ist es eine Einführung in die Funktion von \gls{TSDB} zu geben.
|
||||
Außerdem soll beispeilhaft an InfluxDB gezeigt werden wie mit einer \gls{TSDB} gearbeitet wird.
|
||||
Dazu werden die Wetterdaten vom \gls{DWD} Importiert und ausgewertet.
|
||||
|
||||
|
||||
Außerdem soll beispielhaft an InfluxDB gezeigt werden, wie mit einer \gls{TSDB} gearbeitet wird.
|
||||
Dazu werden die Wetterdaten des \gls{DWD} importiert und ausgewertet.
|
||||
|
||||
\subsection{Aufbau und Vorgehensweise}
|
||||
|
||||
Im ersten Teil dieser Arbeit werden die Grundlagen von \gls{TSDB} erklärt und besonderheiten beschreiben.
|
||||
Im darauf Folgenden Kapitel wird dann exemplarisch an InfluxDB gezeigt wie mit einer \gls{TSDB} gearbeitet wird. Im
|
||||
Im ersten Teil dieser Arbeit werden die Grundlagen von \gls{TSDB} erklärt und Besonderheiten beschreiben.
|
||||
Im darauf folgenden Kapitel wird dann exemplarisch an InfluxDB gezeigt, wie mit einer \gls{TSDB} gearbeitet wird. Im
|
||||
letzen Kapitel werden die Inhalte dieser Arbeit zusammengefasst.
|
||||
|
||||
|
|
|
@ -1,23 +1,24 @@
|
|||
%!TEX root = ../Thesis.tex
|
||||
\section{Grundlagen}
|
||||
|
||||
\gls{TSDB} gehören zu den NoSQL Datenbanken und sind besonders darauf optimiert mit Time Series Data zu arbeiten. Daruch können die große Mengen an
|
||||
Time Series Daten verarbeiten durchsuchen und Speichern.\footnote{\cite[vgl.][]{ComputerWeekly}}
|
||||
\gls{TSDB} gehören zu den NoSQL Datenbanken und sind besonders darauf optimiert, mit Time Series Data zu arbeiten. Daruch können die große Mengen an
|
||||
Time Series Data verarbeiten durchsuchen und Speichern.\footnote{\cite[vgl.][]{ComputerWeekly}}
|
||||
|
||||
\subsection{Time Series Data}
|
||||
|
||||
Um \gls{TSDB} zu verstehen muss als erstes geklärt werden was Time Series Data überhaupt ist und wie sie sich von anderen Daten unterscheiden.
|
||||
Wie der Name schon sagt ist Time Series Data eine Reihe von Daten die über einen Zeitraum gesammelt wordern sind. Es wird also nicht nur der Endwert aufgezeichnet
|
||||
sonder die Veränderung über einen Zeitraum. Diese Daten können z.B. Servermetriken, Anwendungs Leistungsüberwachung, Netzwerkdaten, \gls{IOT} Sensordaten,
|
||||
Ereignisse, Klicks, Marktgeschäfte und viele andere Arten von Daten sein. Time Series Data können gut daran erkannt, dass die Zeit eine Wichtige
|
||||
Axe bei der Darstellung der Werte ist.\footnote{\cite[vgl.][1\psqq]{PaulDix}}
|
||||
Um \gls{TSDB} zu verstehen, muss als erstes geklärt werden, was Time Series Data überhaupt ist und wie sie sich von anderen Daten unterscheiden.
|
||||
Wie der Name schon impliziert, ist Time Series Data eine Reihe von Daten die über einen Zeitraum gesammelt worden sind. Es wird also nicht nur der Endwert aufgezeichnet,
|
||||
sonder die Veränderung über einen Zeitraum. Diese Daten können z.B. Servermetriken, %Anwendungs Leistungsüberwachung, finde ich kein besseres Wort für weglassen
|
||||
Netzwerkdaten, \gls{IOT} Sensordaten, Ereignisse, Klicks, Marktgeschäfte und viele andere Arten von Daten sein.
|
||||
Time Series Data können gut daran erkannt werden, dass die Zeit eine wichtige Achse bei der Darstellung der Werte ist.\footnote{\cite[vgl.][1\psqq]{PaulDix}}
|
||||
|
||||
Manchmal ist es nicht notwendig alle Daten zu erfassen. Zum Beispiel wird in vielen Anwendungen nur der letze Login gespeichert und mehr ist auch für die
|
||||
Funktion nicht notwendig. Allerdings können zusätzliche Informationen gewonnen werden wenn nicht nur die letzen Daten sondern die Veränderung aufgezeichnet werden.
|
||||
So kann zum Beispeil festgestellt werden wie oft und wann sich der Kunde einloggt und ob es dabei ein Muster gibt. Anhand dieser Daten können Kunden dann Kategorisiert werden.\footnote{\cite[vgl.][]{DataScienceTeam2020}}
|
||||
Manchmal ist es nicht notwendig, alle Daten zu erfassen. Zum Beispiel wird in vielen Anwendungen nur der letze Login gespeichert. Mehr ist auch für die
|
||||
Funktion nicht notwendig. Allerdings können zusätzliche Informationen gewonnen werden, wenn nicht nur die letzen Daten sondern die Veränderung aufgezeichnet wird.
|
||||
So kann zum Beispiel festgestellt werden, wie oft und wann sich der Kunde einloggt und ob es dabei ein Muster gibt. Anhand dieser Daten können Kunden
|
||||
dann kategorisiert werden.\footnote{\cite[vgl.][]{DataScienceTeam2020}}
|
||||
|
||||
Eine besonderheit von Time Series Data ist das sie sich nicht verändert. Wenn die Daten einmal erfasst wurden wird an ihnen nichts mehr verändert.
|
||||
Es werden nur neue Daten hinzugefügt\footnote{\cite[vgl.][]{SamFangman2019}}
|
||||
Eine Besonderheit von Time Series Data ist, dass sie sich nicht verändert. Wenn die Daten einmal erfasst wurden wird an ihnen nichts mehr verändert.
|
||||
Es werden nur neue Daten hinzugefügt.\footnote{\cite[vgl.][]{SamFangman2019}}
|
||||
%
|
||||
%\subsection{{Funktionen von Time Series Database}}
|
||||
%
|
||||
|
@ -30,29 +31,29 @@ Es werden nur neue Daten hinzugefügt\footnote{\cite[vgl.][]{SamFangman2019}}
|
|||
%
|
||||
%Im Aufbau unterscheiden sich \gls{TSDB} vorallendingen darin das sie nur dazu
|
||||
|
||||
\subsection{{Unterschiede zwishen Time Series und relationalen Datenbanken}}
|
||||
\subsection{{Unterschiede zwischen Time Series und relationalen Datenbanken}}
|
||||
|
||||
%Umschreiben und andere Quellen verwenden
|
||||
|
||||
Um Time Series Data zu speichern ist es nicht unbedingt erforderlich eine \gls{TSDB} zu nutzen. Auch relationalen Datenbanken können Time Series
|
||||
Data speichern. Einer der wichtigesten unterschiede zwischen einer \gls{TSDB} im gegensatz zu einer \gls{RDBMS} ist es, dass kein Datenbank Schema notwendig ist.
|
||||
Wenn Time Series Daten in eine Rationale Datenbank geschreiben werden sollen müssen erst entsprechende Tabellen angelegt werden in denen die Daten immer im
|
||||
gleichen Format abgelegt werden müssem. Im gegensatz dazu können in einer \gls{TSDB} die Daten einfach Schemafrei in die Datenbank geschreiben werden. Ein
|
||||
weiterer Vorteil ist es, dass \gls{TSDB} im gegensatz zu relationalen Datenbanken besser und einfacher Skaliert werden
|
||||
Um Time Series Data zu speichern, ist es nicht unbedingt erforderlich, eine \gls{TSDB} zu nutzen. Auch relationale Datenbanken können Time Series
|
||||
Data speichern. Einer der wichtigsten Unterschiede zwischen einer \gls{TSDB} im Gegensatz zu einem \gls{RDBMS} ist es, dass kein Datenbank Schema notwendig ist.
|
||||
Wenn Time Series Daten in einer Rationalen Datenbank geschrieben werden sollen, müssen erst entsprechende Tabellen angelegt werden, in denen die Daten immer im
|
||||
gleichen Format abgelegt werden müssen. Im Gegensatz dazu können in einer \gls{TSDB} die Daten einfach schemafrei in die Datenbank geschrieben werden. Ein
|
||||
weiterer Vorteil ist, dass \gls{TSDB} im Gegensatz zu relationalen Datenbanken besser und einfacher Skaliert werden
|
||||
können.\footnote{\cite[vgl.][]{InfluxDataSQL}}
|
||||
|
||||
Aber \gls{TSDB} haben nicht nur Vorteile. Wie in \cref{fig:db-ranking} zu sehen sind sie viel weniger verbreitet als Zeitbasierte Datenbank Systeme. Dadurch gibt
|
||||
es viel weniger Entwickler die sich mit \gls{TSDB} auskennen und auch das Okösystem um die Datenbank ist deutlich kleiner. Außerdem sind \gls{RDBMS}
|
||||
dadurch das es sie viel länger gibt sehr Stabil und sehr gut unterstützt.\footnote{\cite[vgl.][]{InfluxDataSQL}}
|
||||
Aber \gls{TSDB} haben nicht nur Vorteile. Wie in \cref{fig:db-ranking} zu sehen, sind sie viel weniger verbreitet als nicht zeit basierte Datenbank Systeme. Dadurch gibt
|
||||
es viel weniger Entwickler die sich mit \gls{TSDB} auskennen und auch das Ökosystem um die Datenbank ist deutlich kleiner. Außerdem sind \gls{RDBMS}
|
||||
dadurch, dass es sie viel länger gibt, sehr stabil und sehr gut unterstützt.\footnote{\cite[vgl.][]{InfluxDataSQL}}
|
||||
|
||||
\gls{RDBMS} Arbeiten nach dem \gls{CRUD} Prinzip welches für Time Series Data nicht optimal ist. Auf Time Seires Data werden keine Update Befehle durchgeführt, da
|
||||
neue Daten immer nur als neuer Datenpunkt angehängt werden. Auch das Löschen von Daten wird nicht sehr häufig durchgeführt und im gegensatz zu \gls{RDBMS}
|
||||
meistens gleichzeit auf einer großen Menge an Datensätzen. Daher sind \gls{TSDB} besser dafür geeignet mit Time Series Data zu arbeiten und weisen auch eine
|
||||
\gls{RDBMS} arbeiten nach dem \gls{CRUD} Prinzip, welches für Time Series Data nicht optimal ist. Auf Time Seires Data werden keine Update Befehle durchgeführt, da
|
||||
neue Daten immer nur als neuer Datenpunkt angehängt werden. Auch das Löschen von Daten wird nicht sehr häufig durchgeführt und im Gegensatz zu \gls{RDBMS}
|
||||
meistens gleichzeitig auf einer großen Menge an Datensätzen. Daher sind \gls{TSDB} besser dafür geeignet, mit Time Series Data zu arbeiten und weisen auch eine
|
||||
höhere Performance auf.\footnote{\cite[vgl.][]{InfluxDataSQL}}
|
||||
|
||||
\subsection{Verbreitete DBMS}
|
||||
|
||||
Aktuell gibt es wie in \cref{fig:db-ranking} zu sehen einige beliebte Mulit-Model Datenbanken die als \gls{TSDB} gentuzt werden können.
|
||||
Aktuell gibt es wie in \cref{fig:db-ranking} zu sehen, einige beliebte Mulit-Model Datenbanken, die als \gls{TSDB} genutzt werden können.
|
||||
So können die Datenbanken MongoDB, Redis, Teradata und Couchbase mit Time Series Daten arbeiten. Die erste reine \gls{TSDB} im Ranking ist InfluxDB
|
||||
auf Platz 29.\footnote{\cite[vgl.][]{dbranking}}
|
||||
|
||||
|
@ -67,10 +68,10 @@ auf Platz 29.\footnote{\cite[vgl.][]{dbranking}}
|
|||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
Allerdings haben Datenbanken die nur auf das verarbeiten von Time Series Data ausgelegt sind deutliche Performance Vorteile
|
||||
gegenüber Multi Model Datenbanken. In einem Vergleich von InfluxDB und MongoDB hat InfluxDB eine 2,4 mal bessere
|
||||
Schreibperformance als MongoDB und ist beim lesen sogar 5,7 mal schneller. InfluxDB benötigt außerdem 20 mal weniger
|
||||
Speicherplatz auf der Festplatte um die gleiche Menge an Daten zu speichern.\footnote{\cite[vgl.][]{InfluxDBvsMongo}}
|
||||
Allerdings haben Datenbanken, die nur auf das verarbeiten von Time Series Data ausgelegt sind, deutliche Performance Vorteile
|
||||
gegenüber Multi Model Datenbanken. In einem Vergleich von InfluxDB und MongoDB, hat InfluxDB eine 2,4 mal bessere
|
||||
Schreibperformance als MongoDB und ist beim Lesen sogar 5,7 mal schneller. InfluxDB benötigt außerdem 20 mal weniger
|
||||
Speicherplatz auf der Festplatte, um die gleiche Menge an Daten zu speichern.\footnote{\cite[vgl.][]{InfluxDBvsMongo}}
|
||||
|
||||
|
||||
% Der Teil kommt in die Arbeit wenn ich zu wenig Seiten habe
|
||||
|
@ -98,6 +99,5 @@ Speicherplatz auf der Festplatte um die gleiche Menge an Daten zu speichern.\foo
|
|||
% Python
|
||||
% Jupyter Notebooks
|
||||
|
||||
\subsubsection{{InfluxDB installation}}
|
||||
|
||||
\subsubsection{{InfluxDB Installation}}
|
||||
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
\section{{InfluxDB}}
|
||||
|
||||
InfluxDB ist eine in Go geschreiben open source \gls{TSDB} die darauf ausgelegt ist mit großen Menge an Time Series Data zu arbeiten.\footnote{\cite[vgl.][]{dbranking}}
|
||||
In Kapitel 4 dieser Arbeit wird am Beispeil von Wetterdaten gezeigt wie mit InfluxDB gearbeitet wird. InfluxDB stellt für die integration in eigene Anwendungen
|
||||
ein \gls{HTTP} \gls{API} zur verfügung für die es in vielen Programmiersprachen Client Librarys gibt. Außerdem wird ein Webinterface und ein \gls{CLI} bereitgestellt.
|
||||
InfluxDB ist eine in Go geschriebene open source \gls{TSDB}, die darauf ausgelegt ist, mit einer großen Menge an Time Series Data zu arbeiten.\footnote{\cite[vgl.][]{dbranking}}
|
||||
Im weiterem verlauf dieses Kapitels wird am Beispiel von Wetterdaten gezeigt, wie mit InfluxDB gearbeitet wird. InfluxDB stellt für die Integration in
|
||||
eigene Anwendungen ein \gls{HTTP} \gls{API} zur Verfügung, für die es in vielen Programmiersprachen Client Librarys gibt. Außerdem wird ein Webinterface und ein \gls{CLI} bereitgestellt.
|
||||
\footnote{\cite[vgl.][]{InfluxAPI}}
|
||||
|
||||
%
|
||||
% Bis hierhin korrigiert!
|
||||
%
|
||||
|
||||
|
||||
%\subsection{{Installation}}
|
||||
|
||||
%\subsection{InfluxDB Webinterface}
|
||||
|
@ -13,25 +18,25 @@ ein \gls{HTTP} \gls{API} zur verfügung für die es in vielen Programmiersprache
|
|||
|
||||
\subsection{{Daten einfügen}}
|
||||
|
||||
In InfluxDB werden Daten immer in Buckets gespeichert. Um Daten hochzuladen muss zunächst erst einmal ein Bucket angelegt werden. Dazu gibt es zwei
|
||||
Möglichkeiten. Die einfachste ist es über das Web \gls{UI} von InfluxDB einen neuen Bucket anzulegen. Dazu muss nach dem Login der Navigationspunkt Data
|
||||
In InfluxDB werden Daten immer in Buckets gespeichert. Um Daten hochzuladen, muss zunächst ein Bucket angelegt werden. Dazu gibt es zwei
|
||||
Möglichkeiten. Die Einfachste ist es, über das Web \gls{UI} von InfluxDB einen neuen Bucket anzulegen. Dazu muss nach dem Login der Navigationspunkt Data
|
||||
und der Reiter Buckets ausgewählt werden. Hier kann dann mit dem Button Create Bucket ein neuer Bucket angelegt werden. Bein anlegen kann noch eine
|
||||
Lebensdauer für die Daten ausgewählt werden nach welcher die jeweiligen Datenpunkte gelöscht werden.\footnote{vgl. \cref{fig:dashboard}, \cref{fig:load-data-source}, \cref{fig:load-data-bucket}, \cref{fig:load-data-add-bucket}}
|
||||
Lebensdauer für die Daten ausgewählt werden, nach welcher die jeweiligen Datenpunkte gelöscht werden.\footnote{vgl. \cref{fig:dashboard}, \cref{fig:load-data-source}, \cref{fig:load-data-bucket}, \cref{fig:load-data-add-bucket}}
|
||||
|
||||
Daten werden immer nach dem InfluxDB Line Protokoll formatiert an die Datenbank gesendet. Das Protokoll ist wie in Listing~\ref{list:lineproto}
|
||||
dargestellt aufgebaut. Im ersten Teil des Line Protokolls wird der Name der Messreihe angegeben. Das kann zum Beispiel der Name des Sensors sein oder
|
||||
der Ort an dem der Messwert genommen wurde. Wichtig ist, dass groß und Kleinschreibung beachtete werden muss und Unterstriche nicht
|
||||
genutzt werden dürfen. Sonderzeichen müssen mit einem %\textbackslash
|
||||
der Ort an dem der Messwert genommen wurde. Wichtig ist, dass Groß und Kleinschreibung beachtet werden muss und Unterstriche nicht
|
||||
genutzt werden dürfen. Sonderzeichen müssen mit einem \textbackslash \ %Bachslash mit Leerzeichen
|
||||
maskiert werden. Nach dem Namen kommen getrennt durch ein Komma die Tags der Messung.
|
||||
Tags werden indexiert und dazu genutzt um Messwerte zu durchsuchen. Tags werden als Key Value Paar angegeben. Hier sollen Metadaten wie
|
||||
zum Beispiel der Standort des Sensors oder der Name des Servers einzutragen werden zu dem die Datenpunkt/e gehören. Die eigentlichen Werte sind mit einem
|
||||
Leerzeichen von den Tags abgegrenzt und bestehen aus durch Kommas getrennte Key Value Feldern. Der letzte Wert einer Zeile ist der Unix Timestamp in Millisekunden.
|
||||
In einer Datei oder anfrage kann es mehrere Zeilen mit Daten geben.\footnote{\cite[vgl.][]{InfluxDBLineProtolkoll}}
|
||||
Tags werden indexiert und dazu genutzt, um Messwerte zu durchsuchen. Tags werden als Key Value Paar angegeben. Hier sollen Metadaten wie
|
||||
zum Beispiel der Standort des Sensors oder der Name des Servers eingetragen werden, zu dem die Datenpunkt/e gehören. Die eigentlichen Werte sind mit einem
|
||||
Leerzeichen von den Tags abgegrenzt und bestehen aus durch Kommas getrennten Key Value Feldern. Der letzte Wert einer Zeile ist der Unix Timestamp in Millisekunden.
|
||||
In einer Datei oder Anfrage kann es mehrere Zeilen mit Daten geben.\footnote{\cite[vgl.][]{InfluxDBLineProtolkoll}}
|
||||
%Quelle https://docs.influxdata.com/influxdb/v2.2/reference/syntax/line-protocol/
|
||||
%Quelle https://docs.influxdata.com/influxdb/v2.2/reference/syntax/line-protocol/#naming-restrictions
|
||||
|
||||
\begin{figure}[bht]
|
||||
\begin{lstlisting}[caption=InfluxDB Line Protokoll {Quelle: \cite[][]{InfluxDBLineProtolkoll}}, label=list:lineproto]
|
||||
\begin{lstlisting}[caption=InfluxDB Line Protokoll {Quelle: \cite[][]{InfluxDBLineProtolkoll}}, label=list:lineproto],
|
||||
measurementName,tagKey=tagValue fieldKey="fieldValue" 1465839830100400200
|
||||
--------------- --------------- --------------------- -------------------
|
||||
| | | |
|
||||
|
@ -42,12 +47,12 @@ measurementName,tagKey=tagValue fieldKey="fieldValue" 1465839830100400200
|
|||
%Quelle https://docs.influxdata.com/influxdb/v2.2/reference/syntax/line-protocol/#naming-restrictions
|
||||
|
||||
Die im Line Protokoll formatierten Daten können jetzt entweder mithilfe eines Rest Requests oder des InfluxDB \gls{CLI} in die Datenbank übertragen werden.
|
||||
Um diese Anfragen zu Autorisieren muss ein \gls{API} Token mitgesendet werden.\footnote{\cite[vgl.][]{InfluxDBWriteAPI}}
|
||||
Um einen Token zu bekommen kann dieser entweder über das Webinterface, die \gls{CLI} oder über die \gls{API} angelget werden. Der einfachste Weg ist es
|
||||
Um diese Anfragen zu autorisieren muss ein \gls{API} Token mitgesendet werden.\footnote{\cite[vgl.][]{InfluxDBWriteAPI}}
|
||||
Um einen Token zu bekommen, kann dieser entweder über das Webinterface, die \gls{CLI} oder über die \gls{API} angelegt werden. Der einfachste Weg ist es,
|
||||
den Token über das Webinterface anzulegen. Dazu wird wie beim anlegen eines Buckets zunächst der Menüpunkt Data ausgewählt und anschließend der Reiter API
|
||||
Tokens. Mit einem Klick auf Generate API Token kann dann ein API Token erstellt werden.\footnote{vgl. \cref{fig:dashboard}, \cref{fig:load-data-source}, \cref{fig:load-data-api-token}, \cref{fig:load-data-add-token}}
|
||||
Dabei kann zwischen einem All-Access token und einem Read/Write token ausgewählt werden. Mit dem All Access Token kann auf alles zugegriffen werden.
|
||||
Mit einem Read/Write Token kann wie in \cref{fig:load-data-add-token} zu sehen ausgewählt werden auf welchen Bucket geschrieben oder gelesen werden kann.
|
||||
Mit einem Read/Write Token kann wie in \cref{fig:load-data-add-token} zu sehen, ausgewählt werden, auf welchen Bucket geschrieben oder gelesen werden kann.
|
||||
\footnote{\cite[vgl.][]{InfluxDBToken}}
|
||||
|
||||
|
||||
|
@ -60,7 +65,7 @@ Mit einem Read/Write Token kann wie in \cref{fig:load-data-add-token} zu sehen a
|
|||
|
||||
%InfluxDB QUerrys
|
||||
|
||||
\subsection{{Daten verarbeiten und Visualisieren}}
|
||||
\subsection{{Daten verarbeiten und visualisieren}}
|
||||
|
||||
%InfluxDB Tasks
|
||||
% InfluxDB Graphen
|
||||
|
@ -75,80 +80,102 @@ Mit einem Read/Write Token kann wie in \cref{fig:load-data-add-token} zu sehen a
|
|||
|
||||
\subsubsection{{Wetterdaten Aufbau}}
|
||||
|
||||
Die Wetterdaten des DWD können über den CDC OpenData Bereich heruntergeladen werden. Hier werden die Wetterdaten über FTP und HTTPS zum Download angeboten.
|
||||
Unter der URL \url{https://www.dwd.de/DE/leistungen/cdc/cdc_ueberblick-klimadaten.html} wird eine gute übersicht über die zum Download angeboten Daten geboten.
|
||||
|
||||
Die Werte für die aktuelle Lufttemperatur können über \url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
|
||||
abgerufen werden. Historische Daten können über \url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
|
||||
Die Wetterdaten des DWD können über den CDC OpenData Bereich heruntergeladen werden. Hier werden die Wetterdaten über FTP und HTTPS zum Download
|
||||
angeboten. Unter der URL \url{https://www.dwd.de/DE/leistungen/cdc/cdc_ueberblick-klimadaten.html} wird eine gute Übersicht über die zum
|
||||
Download angeboten Daten geboten. Die Werte für die aktuelle Lufttemperatur können über
|
||||
\url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
|
||||
abgerufen werden. Historische Daten können über
|
||||
\url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
|
||||
abgerufen werden.
|
||||
|
||||
Aktuell werden auf der Webseite für die aktuelle Lufttemperatur ca 480 Datein zum Download angeboten. Die meisten dieser Datein entspricht einer Messstatione
|
||||
und je nach Tageszeit kann deswegen die Menge der Daten varieiren, weil immer um 00:00 eine neue Datei angefangen wird. In den Zip Dateinen finden sich außerdem
|
||||
Metadaten über die Messtationen. Die eigentlichen Daten sind als CSV formatiert und sehen aus wie in Listing~\ref{list:wetter_csv} dargestellt
|
||||
Aktuell werden auf der Webseite, für die aktuelle Lufttemperatur, ca 480 Dateien zum Download angeboten. Die meisten dieser Dateien entsprechen jeweils
|
||||
einer Messstation und je nach Tageszeit kann deswegen die Menge der Zeilen in der Datei variieren, weil immer um 00:00 eine neue Datei angefangen wird.
|
||||
In den Zip-Dateien finden sich außerdem Metadaten über die Messtationen. Die eigentlichen Daten sind als \gls{CSV} formatiert und sehen aus wie in Listing~\ref{list:wetter_csv} gekürzt dargestellt
|
||||
In der \gls{CSV} Datei gibt es 9 Felder. Der Inhalt der Felder wird in \cref{tab:csv-explenation} beschreiben.
|
||||
|
||||
\begin{figure}[bht]
|
||||
\begin{lstlisting}[caption=Wetterdaten CSV, label=list:wetter_csv]
|
||||
STATIONS_ID;MESS_DATUM; QN;PP_10;TT_10;TM5_10;RF_10;TD_10;eor
|
||||
73;202205120000; 2; -999; 12.9; 11.2; 84.2; 10.3;eor
|
||||
73;202205120010; 2; -999; 12.7; 11.2; 84.9; 10.2;eor
|
||||
73;202205120020; 2; -999; 12.9; 11.4; 83.0; 10.1;eor
|
||||
73;202205120030; 2; -999; 12.4; 10.7; 86.9; 10.3;eor
|
||||
73;202205120040; 2; -999; 12.4; 10.5; 86.2; 10.2;eor
|
||||
73;202205120050; 2; -999; 12.3; 10.3; 85.5; 9.9;eor
|
||||
73;202205120100; 2; -999; 12.1; 10.1; 88.1; 10.2;eor
|
||||
73;202205120110; 2; -999; 11.7; 9.9; 90.1; 10.1;eor
|
||||
73;202205120120; 2; -999; 11.7; 10.0; 89.0; 10.0;eor
|
||||
73;202205120130; 2; -999; 11.9; 10.2; 86.3; 9.7;eor
|
||||
73;202205120140; 2; -999; 12.3; 10.6; 83.5; 9.6;eor
|
||||
73;202205120150; 2; -999; 12.4; 10.9; 83.3; 9.7;eor
|
||||
73;202205120200; 2; -999; 11.7; 9.8; 86.2; 9.5;eor
|
||||
73;202205120210; 2; -999; 11.6; 9.6; 88.5; 9.8;eor
|
||||
73;202205120220; 2; -999; 11.4; 9.4; 88.6; 9.6;eor
|
||||
73;202205120230; 2; -999; 11.8; 9.9; 88.7; 10.0;eor
|
||||
73;202205120240; 2; -999; 11.4; 9.9; 88.7; 9.6;eor
|
||||
73;202205120250; 2; -999; 11.5; 9.7; 89.5; 9.8;eor
|
||||
73;202205120300; 2; -999; 11.6; 10.0; 88.4; 9.8;eor
|
||||
73;202205120310; 2; -999; 11.4; 10.3; 87.5; 9.4;eor
|
||||
73;202205120320; 2; -999; 11.6; 9.9; 89.0; 9.9;eor
|
||||
73;202205120330; 2; -999; 12.1; 10.4; 87.3; 10.1;eor
|
||||
73;202205120340; 2; -999; 12.1; 10.6; 87.2; 10.0;eor
|
||||
73;202205120350; 2; -999; 11.9; 10.2; 87.2; 9.8;eor
|
||||
...
|
||||
\end{lstlisting}
|
||||
\end{figure}
|
||||
%Eventuell kürzen wenn zu viele Seiten
|
||||
\begin{figure}[bht]
|
||||
\begin{lstlisting}[caption=Wetterdaten CSV {Quelle: DWD Wetterdaten CSV Download}, label=list:wetter_csv]
|
||||
STATIONS_ID;MESS_DATUM; QN;PP_10;TT_10;TM5_10;RF_10;TD_10;eor
|
||||
73;202205120000; 2; -999; 12.9; 11.2; 84.2; 10.3;eor
|
||||
73;202205120010; 2; -999; 12.7; 11.2; 84.9; 10.2;eor
|
||||
73;202205120020; 2; -999; 12.9; 11.4; 83.0; 10.1;eor
|
||||
73;202205120030; 2; -999; 12.4; 10.7; 86.9; 10.3;eor
|
||||
73;202205120040; 2; -999; 12.4; 10.5; 86.2; 10.2;eor
|
||||
73;202205120050; 2; -999; 12.3; 10.3; 85.5; 9.9;eor
|
||||
73;202205120100; 2; -999; 12.1; 10.1; 88.1; 10.2;eor
|
||||
73;202205120110; 2; -999; 11.7; 9.9; 90.1; 10.1;eor
|
||||
73;202205120120; 2; -999; 11.7; 10.0; 89.0; 10.0;eor
|
||||
\end{lstlisting}
|
||||
\end{figure}
|
||||
|
||||
|
||||
In der CSV Datei gibt es 9 Felder.
|
||||
|
||||
%Quelle einfügen
|
||||
|
||||
\begin{tabular}{l|p{13.0cm}}
|
||||
|
||||
\begin{table}[hbt]
|
||||
\centering
|
||||
\begin{minipage}[t]{1\textwidth} % Breite, z.B. 1\textwidth
|
||||
\caption{Bedeutung der CSV Felder} % Überschrift
|
||||
\begin{tabularx}{\columnwidth}{rXrr}
|
||||
\toprule
|
||||
Feld Name & Bedeutung \\
|
||||
\midrule
|
||||
STATION\_ID & Gibt an von welcher Station die Werte stammen \\ \hline
|
||||
MESS\_DATUM & Gibt an wann gemessen wurde im Format "\%Y\%m\%d\%H\%M" Also Jahr Monat Tag Stunde Minute als eine zusammengeschriebene Zahl. \\ \hline
|
||||
MESS\_DATUM & Gibt an wann gemessen wurde im Format \%Y\%m\%d\%H\%M. Also Jahr Monat Tag Stunde Minute als eine zusammengeschriebene Zahl. \\ \hline
|
||||
QN & Gibt die Qualität der Messwerte an. Hier gibt es die Werte 1 bis 3
|
||||
\begin{compactenum}
|
||||
\item nur formale Kontrolle bei Dekodierung und Import
|
||||
\item Kontrolle mit individuell festgelegten Kriterien
|
||||
\item ROUTINE automatische Kontrolle und Korrektur mit QUALIMET
|
||||
\item ROUTINE automatische Kontrolle und Korrektur mit Software (QUALIMET)
|
||||
\end{compactenum} \\ \hline
|
||||
|
||||
PP\_10 & Luftdruck auf Stationshöhe \\ \hline
|
||||
TT\_10 & Lufttemperatur auf 2 Meter höhe \\ \hline
|
||||
TM5\_10 & Lufttemperatur auf 5cm höhe \\ \hline
|
||||
TD\_10 & relative Luftfeuchtigkeit auf 2m höhe \\ \hline
|
||||
eor & END OF RECORD kann ignriert werden.
|
||||
TT\_10 & Lufttemperatur auf 2m Höhe \\ \hline
|
||||
TM5\_10 & Lufttemperatur auf 5cm Höhe \\ \hline
|
||||
TD\_10 & relative Luftfeuchtigkeit auf 2m Höhe \\ \hline
|
||||
eor & END OF RECORD" Bedeutet die Zeile ist zu Ende. \\
|
||||
\bottomrule
|
||||
\end{tabularx}
|
||||
\source{Eigene Darstellung \url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/BESCHREIBUNG_obsgermany_climate_10min_tu_now_de.pdf}} % Quelle
|
||||
\label{tab:csv-explenation}
|
||||
\end{minipage}
|
||||
\end{table}
|
||||
|
||||
\end{tabular}
|
||||
In der Datei zehn\_now\_tu\_Beschreibung\_Stationen.txt werden die Wetterstationen beschrieben. Diese Datei ist nicht als \gls{CSV} Datei formatiert sondern als Tabelle und erhält
|
||||
Daten über die Wetterstationen. Die Daten der Stationen in der heruntergeladenen Textdatei stimmen mit den Daten der Hauptamtliches Messnetz Karte überein.
|
||||
Allerdings enthält die Textdatei nicht alle Stationen sondern nur Station für die auch Messwerte im Datensatz hinterlegt sind. Die Bedeutung der einzelnen
|
||||
Spalten der Tabelle sind in der \cref{tab:file-stations} beschreiben.
|
||||
|
||||
In dieser CSV Datei sind die Daten mit einem Semikoln voneinander getrennt. Der erste Wert in der CSV Datei ist die STATIONS\_ID auf die später noch weiter eingegangen wird.
|
||||
Danach folgt das Feld Mess\_Datum Formatiert nach dem
|
||||
\begin{table}[hbt]
|
||||
\centering
|
||||
\begin{minipage}[t]{1\textwidth} % Breite, z.B. 1\textwidth
|
||||
\caption{Bedeutung Stationstabelle} % Überschrift
|
||||
\begin{tabularx}{\columnwidth}{rXrr}
|
||||
\toprule
|
||||
Feld Name & Bedeutung \\
|
||||
\midrule
|
||||
STATION\_ID & Gibt an von welcher Station die Werte stammen \\ \hline
|
||||
von\_datum & Datum seit dem die Station aktiv ist. \\ \hline
|
||||
bis\_datum & Hohe der Station. \\ \hline
|
||||
Stationshoehe & Hohe über dem Normalnullpunkt \\ \hline
|
||||
geoBreite & Breitengrad der Station. \\ \hline
|
||||
geoLaenge \_10 & Längengrad der Stations. \\ \hline
|
||||
Stationsname & Name der Station. \\ \hline
|
||||
Bundesland & Bundesland in dem die Station steht. \\
|
||||
\bottomrule
|
||||
\end{tabularx}
|
||||
\source{Vergleich der Werte mit der Hauptamtliches Messnetz Karte \url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/zehn_now_tu_Beschreibung_Stationen.txt}} % Quelle
|
||||
\label{tab:file-stations}
|
||||
\end{minipage}
|
||||
\end{table}
|
||||
|
||||
|
||||
%\pagebreak %Damit die Tabelle nicht auf der falschen Seite ist.
|
||||
\subsubsection{{Wetterdaten abrufen}}
|
||||
|
||||
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
|
||||
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
|
||||
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
|
||||
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
|
||||
Um die Daten auswerten zu können müssen diese als erstes heruntergeladen und entpackt werden. Dazu wird mithilfe von BeautifulSoup aus der \gls{HTML} Seite
|
||||
des \gls{DWD} für jede Datei eine URL ausgelesen. Die so gewonnen URLs können dann mithilfe einer Schleife heruntergeladen werden.
|
||||
Um den Messwerten eine Station zuzuordnen zu können wird als erstes die Datei mit den Station verarbeitet. Für jede Station wird Objekt erstellt und in ein
|
||||
dictionary gespeichert. Dadurch kann in im dictionary einfach über die STATIONS\_ID die passende Station gefunden werden. Weil diese Datei allerdings nicht
|
||||
CSV formatiert ist musst die Datei auf eine andere Art ausgewertete werden. Um die einzelnen Felder aus einer Zeile zu bekommen wird also immer so lange
|
||||
gelesen bis wieder ein bestimmte Anzahl von Leerzeichen hintereinander erkannt worden ist. Die Zeichen zwischen den Leerzeichen sind dann ein ausgelesenes Feld.
|
||||
Nachdem die Stationsdatei ausgewertet word ist werden die CSV Datein in einer Schleife entpackt und mithilfe der Bibliothek Pandas in ein Dataframe
|
||||
umgewandelt. Das so erzeugte Dataframe wir im letzten Schritt mit den Daten der Stations zusammengeführt und als Datenpunkt in InfluxDB geschrieben.
|
||||
|
||||
Weitere Erklärungen und der Code selbst kann im angehängten Jupyter notebook eingesehen und ausgeführt werden.
|
|
@ -7,4 +7,6 @@
|
|||
\newacronym{HTTP}{HTTP}{HyperText Transfer Protocol}
|
||||
\newacronym{API}{API}{Application Programming Interface}
|
||||
\newacronym{CLI}{CLI}{Command Line Interface}
|
||||
\newacronym{UI}{UI}{User Interface}
|
||||
\newacronym{CSV}{CSV}{Comma-separated values}
|
||||
\newacronym{UI}{UI}{User Interface}
|
||||
\newacronym{HTML}{HTML}{Hypertext Markup Language}
|
Binary file not shown.
Binary file not shown.
|
@ -30,7 +30,7 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"execution_count": 8,
|
||||
"id": "c87fe05a-63e3-4748-a01a-d46cb12e9b05",
|
||||
"metadata": {
|
||||
"tags": []
|
||||
|
@ -40,7 +40,6 @@
|
|||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Daten Ordner erstellt\n",
|
||||
"Fertig\n"
|
||||
]
|
||||
}
|
||||
|
@ -84,7 +83,7 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"execution_count": 9,
|
||||
"id": "b9acf473-2f26-40c6-9c48-1a4ec159bd3d",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
|
@ -123,7 +122,7 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"execution_count": 10,
|
||||
"id": "90f1eb08-b4dd-4743-ad38-492bfd742fec",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
|
@ -161,12 +160,9 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"execution_count": 11,
|
||||
"id": "2524986b-9c26-42d5-8d76-f4e228d0eb48",
|
||||
"metadata": {
|
||||
"jupyter": {
|
||||
"source_hidden": true
|
||||
},
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [
|
||||
|
@ -179,7 +175,6 @@
|
|||
}
|
||||
],
|
||||
"source": [
|
||||
"\n",
|
||||
"download_counter = int(1)\n",
|
||||
"dwd_len = len(dwd_links)\n",
|
||||
"station_file = ''\n",
|
||||
|
@ -220,7 +215,7 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"execution_count": 13,
|
||||
"id": "430041d7-21fa-47d8-8df9-7933a8749f82",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
|
@ -229,7 +224,8 @@
|
|||
"output_type": "stream",
|
||||
"text": [
|
||||
"dwd-data/zehn_now_tu_Beschreibung_Stationen.txt\n",
|
||||
"Großenkneten \n"
|
||||
"Großenkneten \n",
|
||||
"52.9336 \n"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
@ -307,7 +303,7 @@
|
|||
"\n",
|
||||
"print(station_file)\n",
|
||||
"stations = read_station_file()\n",
|
||||
"print(stations[\"44\"].name)\n"
|
||||
"print(stations[\"44\"].name)"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -328,7 +324,7 @@
|
|||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Import durchgeführt \r"
|
||||
"Import durchgeführt \r"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
|
Reference in a new issue