From a720654ba680e97ebb3fa6f01c3c7c335d8e4c54 Mon Sep 17 00:00:00 2001 From: Jan Philipp Timme Date: Tue, 4 Oct 2016 13:16:43 +0200 Subject: [PATCH] [TASK] Generic commit. --- Bachelorarbeit.tex | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/Bachelorarbeit.tex b/Bachelorarbeit.tex index dd64a9d..f77b669 100644 --- a/Bachelorarbeit.tex +++ b/Bachelorarbeit.tex @@ -829,22 +829,30 @@ Dieses Muster verbietet die Vorkommnis von Ereignistyp B lediglich dann, wenn er \end{itemize} \paragraph{Aggregation von Ereignissen} -Ergeben sich für Ereignismuster über ein Sliding Window eine größere Menge an Ergebnissen, so kann es sinnvoll sein, diese Anhand von bestimmten Kriterien in einzelne Gruppen zusammenzufassen und mittels Aggregationsfunktionen diese Gruppen zusammenzufassen. Um dies zu tun, gibt es in C-SPARQL das Konstrukt \texttt{GROUP BY (\emph{?var})}, wobei \texttt{?var} eine Variable aus der \texttt{WHERE}-Klausel ist, nach der gruppiert werden soll. -\begin{lstlisting} -SELECT (COUNT(?foo) AS ?zielVariable) -... -WHERE { ... } -GROUP BY ?groupByVariableA, groupByVariableB -HAVING COUNT(?foo) > 5 -\end{lstlisting}\cite{barbieri:querying} -Mögliche Aggregationsfunktionen laut \cite{barbieri:csparql} sind: +Ergeben sich für Ereignismuster über ein Sliding Window eine größere Menge an Ergebnissen, so kann es sinnvoll sein, diese Anhand von bestimmten Kriterien in einzelne Gruppen zusammenzufassen und mittels Aggregationsfunktionen diese Gruppen zusammenzufassen. Um dies zu tun, gibt es in C-SPARQL das Konstrukt \texttt{GROUP BY (\emph{?var})}, wobei \texttt{?var} eine Variable aus der \texttt{WHERE}-Klausel ist, nach der gruppiert werden soll. Wird eine solche Gruppierung vorgenommen, so können über die daraus resultierenden Gruppen die folgenden Aggregationsfunktionen zur Zusammenfassung der Ergebnisgruppen verwendet werden\cite{barbieri:querying}: \begin{itemize} -\item \texttt{COUNT()} -\item \texttt{SUM()} -\item \texttt{AVG()} -\item \texttt{MIN()} -\item \texttt{MAX()} +\item \texttt{COUNT(\emph{?var})}: Zählt die Anzahl Tupel pro Gruppe +\item \texttt{SUM(\emph{?var})}: Bildet Summe der Variable über jede Gruppe +\item \texttt{AVG(\emph{?var})}: Bildet Mittelwert der Variable über jede Gruppe +\item \texttt{MIN(\emph{?var})}: Ermittelt das Minimum der gegebenen Variable pro Gruppe +\item \texttt{MAX(\emph{?var})}: Ermittelt das Maximum der gegebenen Variable pro Gruppe \end{itemize} +Ähnlich wie bei SQL gibt es auch in C-SPARQL die Anweisung \texttt{HAVING}, mit dem Kriterien für die durch \texttt{GROUP BY} gebildeten Gruppen festgelegt werden können. Ist die in \texttt{HAVING} angegebene Bedingung für eine Gruppe nicht erfüllt, so wird sie aus der Ergebnismenge entfernt. + +Nachdem nun die grundlegenden Werkzeuge zur Aggregation von Daten in C-SPARQL erläutert wurden, sollen diese in mit einem Beispiel demonstriert werden: Gegeben seien Statusmeldeereignisse von PKW, die zur weiteren Auswertung aggregiert werden sollen. Hierbei sollen für jeden einzelnen PKW, dessen durchschnittliche Motordrehzahl über 3000 Umdrehungen pro Minute liegt, die minimale beziehungsweise maximale Motordrehzahl ermittelt werden. + +Um dies umzusetzen, müssen die Ereignistupel nach den PKW, auf die sie sich beziehen mit \texttt{GROUP BY} gruppiert werden. Dann können die gewünschten Werte in der \texttt{SELECT}-Klausel unter Nutzung der Funktionen \texttt{MIN()} und \texttt{MAX()} selektiert werden. Zuletzt kann das Kriterium, dass die durchschnittliche Motordrehzahl 3000 Umdrehungen pro Minute überschreitet mit einer \texttt{HAVIN}-Anweisung umgesetzt werden. Die folgende C-SPARQL-Abfrage demonstriert dies: +\begin{lstlisting}[label={lst:sample_csparql_aggregation_query},caption={Ermittlung minimaler und maximaler Motordrehzahl pro PKW}] +SELECT (MIN(?carRPM) AS ?minRPM) (MAX(?carRPM) AS ?maxRPM) +... +WHERE { + ?carStatusEvent rdf:type carOnt:CarStatusEvent . + ?carStatusEvent carOnt:relatedCar ?car . + ?carStatusEvent carOnt:motorRPM ?carRPM . +} +GROUP BY ?car +HAVING AVG(?carRPM) > 3000 +\end{lstlisting} \section{Auslösen von Aktionen}\label{cpt:register_stream}