Métodos de la API UDA

Los agregados definidos por el usuario se utilizan junto con una cláusula GROUP BY o la cláusula OVER. La implementación de un UDA requiere una comprensión más profunda de cómo funciona internamente la base de datos Netezza al realizar agregaciones.

Para un UDA estándar utilizado con una sentencia GROUP BY, la base de datos Netezza procesa los datos siguiendo secuencialmente los pasos aquí descritos:
  1. Para cada fila de datos que se procesa, comprueba si ya se ha encontrado una fila para el grupo en el que se encuentra la fila. Si es así, pasa la fila al método ' accumulate() ' junto con el valor actual de las variables de estado para ese grupo. Si la fila pertenece a un nuevo grupo, primero se llama al método ' initState() ' y luego se llama al método accumulate con los valores de estado recién inicializados más la fila de datos. El método accumulate actualiza las variables del estado actual basándose en la fila de datos y devuelve el estado actualizado. No se mueven datos a través de la red hasta el paso 2.
  2. Una vez procesadas todas las filas de datos en cada sección de datos, redistribuya los valores finales de las variables de estado de cada grupo de datos de forma que todas las variables de estado de cada grupo de datos se muevan a las mismas secciones de datos (por ejemplo, si el GROUP BY estaba basado en customer_id, todos los estados de cada sección de datos para customer_id=1 se moverían a la misma sección de datos).
  3. Fusiona todas las variables de estado llamando al método ' merge() '. En cada llamada a merge, se pasan dos conjuntos de variables de estado. El método ' merge() ' fusiona los dos estados y devuelve el resultado. Se llama al método ' merge() ' hasta que sólo hay un estado para cada grupo basado en la sentencia group by.
  4. Para cada uno de los estados restantes, llama al método ' finalResult() ', pasando los valores finales de cada estado. A continuación, el método ' finalResult() ' calcula un resultado basado en las variables de estado y devuelve el resultado a la base de datos Netezza para cada grupo.