Logparser
SQL Aggregatfunktionen

Aggregatfunktionen in SQL-Abfragedateien

Im Unterschied zu den "normalen Funktionen" führen Aggregatfunktionen Operationen über alle (bzw. alle ausgewählten) Datensätze einer Datenquelle aus. Die beiden wichtigsten Aggregatfunktionen dürften wohl

  • SUM für die Summierung
  • COUNT für die Ermittlung der Anzahl

sein.

Aggregatfunktionen erwarten fast immer eine GROUP BY-Klausel. Die SQL-Sequenz

SELECT SUM(BytesSent) AS SUMME
,COUNT(BytesSent) AS ANZAHLByte
,COUNT(RemoteHostName) AS ANZAHL
FROM apache_tage.log

liefert eine einzige Ergebniszeile mit der Summe der übertragenen Bytes, der Anzahl der Datensätze, die hierzu einen Wert haben und der Gesamtzahl der Datensätze. Hingegen funktioniert

SELECT SUM(BytesSent) AS SUMME
,COUNT(BytesSent) AS ANZAHLByte
,RemoteHostName
FROM apache_tage.log

nicht. Der LogParser gibt die folgende Fehlermeldung aus: Error: Semantic Error: presence of field(s) and aggregate function(s) in the SELECT clause with no GROUP BY clause. Der LogfileParser will also eine GROUP BY-Klausel sehen. Also z.B.

SELECT SUM(BytesSent) AS SUMME
,COUNT(BytesSent) AS ANZAHLByte
,RemoteHostName
FROM apache_tage.log
GROUP BY RemoteHostName
ORDER BY RemoteHostName

Wir gruppieren (und sortieren gleich noch) nach der IP-Adresse (Feld RemoteHostName).

Im Beispiele Logfiles zur Auswertung eines Apache Logfiles werden in der Zeile

,DIV(SUM(BytesSent),MUL(1024,1024)) AS SUMMEinMB

sowohl eine Aggregatfunktion (SUM) wie auch normale Funktionen (DIV und MUL) verwendet.