Freigeben über


aggregate-Funktion

Gilt für: durch Häkchen mit „Ja“ markiert Databricks SQL durch Häkchen mit „Ja“ markiert Databricks Runtime

Aggregiert Elemente in einem Array unter Verwendung eines benutzerdefinierten Aggregators. Diese Funktion ist ein Synonym für die reduce-Funktion.

Syntax

aggregate(expr, start, merge [, finish])

Argumente

  • expr: Ein ARRAY-Ausdruck.
  • start: Ein Anfangswert eines beliebigen Typs.
  • merge: Eine Lambdafunktion, die zum Aggregieren des aktuellen Elements verwendet wird.
  • finish: Eine optionale Lambdafunktion, die zum Abschließen der Aggregation verwendet wird.

Gibt zurück

Der Ergebnistyp stimmt mit dem Ergebnistyp der finish-Lambdafunktion (sofern vorhanden) oder mit start überein.

Wendet einen Ausdruck auf einen Anfangszustand und alle Elemente im Array an und reduziert diese auf einen einzelnen Zustand. Der Endzustand wird durch Anwenden einer finish-Funktion in das Endergebnis konvertiert.

Die merge-Funktion übernimmt zwei Parameter. Der erste ist der Akkumulator, der zweite das Element, das aggregiert werden soll. Der Akkumulator und das Ergebnis müssen vom Typ start sein. Die optionale finish-Funktion nimmt einen Parameter an und gibt das Endergebnis zurück.

Beispiele

> SELECT aggregate(array(1, 2, 3), 0, (acc, x) -> acc + x);
 6
> SELECT aggregate(array(1, 2, 3), 0, (acc, x) -> acc + x, acc -> acc * 10);
 60

> SELECT aggregate(array(1, 2, 3, 4),
                   named_struct('sum', 0, 'cnt', 0),
                   (acc, x) -> named_struct('sum', acc.sum + x, 'cnt', acc.cnt + 1),
                   acc -> acc.sum / acc.cnt) AS avg
 2.5