[TASK] Generic commit.
This commit is contained in:
parent
0e833d0dfb
commit
a720654ba6
|
@ -829,22 +829,30 @@ Dieses Muster verbietet die Vorkommnis von Ereignistyp B lediglich dann, wenn er
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\paragraph{Aggregation von Ereignissen}
|
\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.
|
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{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:
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item \texttt{COUNT()}
|
\item \texttt{COUNT(\emph{?var})}: Zählt die Anzahl Tupel pro Gruppe
|
||||||
\item \texttt{SUM()}
|
\item \texttt{SUM(\emph{?var})}: Bildet Summe der Variable über jede Gruppe
|
||||||
\item \texttt{AVG()}
|
\item \texttt{AVG(\emph{?var})}: Bildet Mittelwert der Variable über jede Gruppe
|
||||||
\item \texttt{MIN()}
|
\item \texttt{MIN(\emph{?var})}: Ermittelt das Minimum der gegebenen Variable pro Gruppe
|
||||||
\item \texttt{MAX()}
|
\item \texttt{MAX(\emph{?var})}: Ermittelt das Maximum der gegebenen Variable pro Gruppe
|
||||||
\end{itemize}
|
\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}
|
\section{Auslösen von Aktionen}\label{cpt:register_stream}
|
||||||
|
|
Loading…
Reference in New Issue