Agregaciones

Todo agregado de MobilityDB, como tCount, tSum o extent, se llama con el mismo nombre en todos los motores, con una excepción. Once agregados comparten su nombre con una función: tMin, tMax, merge, appendInstant, appendSequence, sameAlignment, tAnd, tOr, setUnion, spanUnion y spansetUnion. PostgreSQL permite que un agregado y una función compartan un nombre, y MobilityDB llama a estos agregados por él. DuckDB, Apache Spark y Apache Flink tienen una sola función por nombre, y los llaman con el nombre seguido de Agg: tMinAgg, mergeAgg, setUnionAgg, etc. (“Los nombres que poseen los motores”).

Un agregado calcula su resultado en hasta tres pasos, cada uno una función nombrada según el agregado y el paso. La función de transición <aggregate>Transition añade un valor a un estado en curso, la función de combinación <aggregate>Combine une dos estados calculados en paralelo, y la función final <aggregate>Final convierte el estado en el resultado. Los pasos de combinación y final son opcionales: extent no tiene función final, pues su estado es ya su resultado, y los agregados de adición no tienen función de combinación, pues añaden sus valores en orden temporal. Una consulta nunca llama a estas funciones; cada motor construye el agregado a partir de ellas.

La función de transición toma el estado y un valor, y tiene una versión por tipo de valor, como el agregado: tMinTransition toma un tint, un tbigint, un tfloat o un ttext. Las funciones de combinación y final toman solo estados, y un estado conoce el tipo de los valores que contiene, por lo que cada una es una sola función por agregado: tMinCombine combina los estados del mínimo temporal de todos los tipos de valor. En PostgreSQL, donde una función final declara el tipo que devuelve, la función final se declara una vez por tipo de valor con FINALFUNC_EXTRA, como tMinFinal(internal, tint) que devuelve un tint, y todas sus versiones ejecutan el mismo código. En Spark y Flink cada agregado es un solo objeto, que elige su función de transición según el tipo del valor.

La tabla siguiente lista todos los agregados y sus funciones; un guion (—) marca un paso que el agregado no tiene.

CategoríaTransiciónCombinaciónFinal
ConteotCountTransitiontCountCombinetCountFinal
 wCountTransitionwCountCombinewCountFinal
SumatSumTransitiontSumCombinetSumFinal
 wSumTransitionwSumCombinewSumFinal
PromediotAvgTransitiontAvgCombinetAvgFinal
 wAvgTransitionwAvgCombinewAvgFinal
Mínimo / máximotMinTransitiontMinCombinetMinFinal
 tMaxTransitiontMaxCombinetMaxFinal
 wMinTransitionwMinCombinewMinFinal
 wMaxTransitionwMaxCombinewMaxFinal
BooleanotAndTransitiontAndCombinetAndFinal
 tOrTransitiontOrCombinetOrFinal
CentroidetCentroidTransitiontCentroidCombinetCentroidFinal
Nube de puntostnpointsTransitiontnpointsCombinetnpointsFinal
 tdensityTransitiontdensityCombinetdensityFinal
Caja delimitadoraextentTransitionextentCombine—
UniónsetUnionTransitionsetUnionCombinesetUnionFinal
 spanUnionTransitionspanUnionCombinespanUnionFinal
 spansetUnionTransitionspansetUnionCombinespansetUnionFinal
FusiónmergeTransitionmergeCombinemergeFinal
AnexadoappendInstantTransition—appendInstantFinal
 appendSequenceTransition—appendSequenceFinal
RásterrasterUnionTransitionrasterUnionCombinerasterUnionFinal
 sameAlignmentTransitionsameAlignmentCombinesameAlignmentFinal
 summaryStatsAggTransitionsummaryStatsAggCombinesummaryStatsAggFinal