CREATE [OR REPLACE] AGGREGATE
Utilice el mandato CREATE AGGREGATE para crear un agregado definido por el usuario. Utilice CREATE OR REPLACE AGGREGATE para crear un agregado o para actualizar un agregado existente con nuevos archivos de objeto, estado, valor de retorno, memoria de uso o nivel de registro.
Sinopsis
CREATE [OR REPLACE] AGGREGATE aggregate_name(argument_types)
RETURNS return_type STATE (state_types)
LANGUAGE CPP PARAMETER STYLE NPSGENERIC [FENCED | NOT FENCED]
[MAXIMUM MEMORY mem ] [LOGMASK mask]
[NO DEPENDENCIES| DEPENDENCIES deplibs]
[ TYPE ANY | ANALYTIC | GROUPED] [API VERSION [1 | 2]]
[ENVIRONMENT 'name'='value', 'name'='value']
[EXTERNAL CLASS NAME 'class_name']
[EXTERNAL HOST OBJECT 'host_object_filename']
[EXTERNAL SPU OBJECT 'SPU_object_filename']
Entradas
| Entrada | Descripción |
|---|---|
| AGGREGATE_NAME | Especifica el nombre del agregado que desea crear. Este es el identificador SQL que se utiliza para invocar el agregado en una expresión SQL. Si el agregado existe, no puede cambiar el nombre utilizando el mandato CREATE OR REPLACE. Para sistemas que soportan varios esquemas, puede especificar un nombre en el formato esquema.agregado para crear un agregado en un esquema diferente de la base de datos actual. No puede crear un agregado en una base de datos diferente. |
| tipos_de_argumentos | Especifica una lista de tipos de datos de argumento de agregado totalmente especificados. Se admiten todos los tipos de datos Netezza Performance Server. Las series deben incluir un tamaño, o bien ANY para tamaños genéricos. Los tipos NUMERIC deben incluir precisión y escala, o bien ANY para tamaños específicos. Puede especificar el valor VARARGS para crear un agregado de argumento variables donde los usuarios pueden entrar un máximo de 64 valores de cualquier tipo de datos soportado. VARARGS es un valor mutuamente excluyente; no puede especificar ningún otro argumento en la lista. Si el agregado existe, no puede cambiar la lista de tipos de argumento utilizando el mandato CREATE OR REPLACE. Puede cambiar algunos aspectos de los tipos de argumento de un UDA; por ejemplo, puede cambiar el tamaño de una serie o la precisión y escala de un valor numérico. Puede eliminar VARARGS de la lista de argumentos o añadirlo a una lista de argumentos vacía diferente. |
| RETURNS tipo_retorno | Especifica el valor de retorno del agregado como un tipo y argumento totalmente especificado. Se admiten todos los tipos de datos Netezza Performance Server. Las series deben incluir un tamaño y los tipos NUMERIC deben incluir precisión y escala. |
| STATE tipos_estado | Especifica una lista de tipos de datos de estado especificados, que no pueden estar vacíos. Se admiten todos los tipos de datos Netezza Performance Server. Las series deben incluir un tamaño y los tipos NUMERIC deben incluir precisión y escala. Estos elementos de datos sirven como acumuladores de ejecución del agregador. Este estado de agregación es mantenido fuera del estado interno de la clase de implementación de agregación por el sistema Netezza Performance Server por varias razones de eficiencia. |
| IDIOMA | Especifica el lenguaje de programación utilizado para el agregado. El valor predeterminado y el único soportado actualmente es CPP (C++). |
| PARAMETER STYLE | Especifica el estilo de parámetro para el agregado. El valor predeterminado y único valor válido es NPSGENERIC. |
| FENCED NOT FENCED |
Especifica si el agregado se ejecuta en un proceso aparte en un espacio de direcciones protegido (modalidad protegida). Para crear un agregado no protegido, debe tener el privilegio administrativo Unfence. |
| MAXIMUM MEMORY | Especifica una indicación del uso potencial de memoria del agregado. El valor del tamaño puede ser un valor vacío o un valor en forma de un número y las letras b (bytes), k (kilobytes), m (megabytes) o g (gigabytes). Por ejemplo, los valores válidos pueden ser '0', '1k', '100k', '1g' o '10m'. El valor predeterminado es 0. |
| LOGMASK máscara | Especifica el nivel de control de registro para el agregado. Los valores válidos son NONE, DEBUG y TRACE o una combinación separada por comas de DEBUG y TRACE. |
| DEPENDENCIAS deplibs | Especifica la lista opcional de dependencias de la biblioteca compartida definida por el usuario para el UDX. Puede especificar uno o varios nombres de biblioteca, separados por comas. |
| SIN DEPENDENCIAS | Especifica que no hay dependencias para el UDX, que es el valor predeterminado si se omite DEPENDENCIES deplibs. Puede utilizar esta opción para borrar las dependencias anteriores declaradas para el UDX. |
| TIPO | Contexto en el que se puede llamar a un UDA. Especifique ANALYTIC si se permite el UDA únicamente para agregados de ventana, GROUPED si se permite el UDA en agregados agrupados o grandes, o ANY si se permite el UDA en ambos contextos. Para obtener más información sobre el uso de ventanas, consulte la Guía del usuario deIBM Netezza Database. |
| API VERSION [1 | 2] | Especifica la versión de la interfaz de UDX que utiliza el agregado. La API VERSION debe coincidir con la versión compilada de los archivos de objeto para el host y el SPU. El valor predeterminado es 1. Si incluye objetos compilados de la versión 2, debe especificar API VERSION 2. |
| ENTORNO | Especifica el par nombre-valor disponible para el agregado cuando se ejecuta. Puede especificar varios pares nombre-valor separados por coma. Para sustituir un conjunto existente de uno o más pares de entorno, debe especificar todos los valores de entorno; el mandato sustituye la lista actual por la lista especificada en el mandato CREATE OR REPLACE. |
| EXTERNAL CLASS NAME 'nombre_clase' | Especifica el nombre de la clase C++ que implementa el agregado. La clase debe derivarse de la clase base Uda y debe implementar un método estático que crea una instancia de la clase. |
| OBJETO HOST EXTERNO'nombre_archivo_objeto_host' | Especifica el nombre de vía de acceso al objeto compilado para la ejecución del host. |
| OBJETO SPU EXTERNO'SPU_object_filename' | Especifica el nombre de la ruta del archivo objeto compilado de la EPD Linux®. Especifique el objeto compilado spu10 para SPU Rev10 en los modelos IBM® Netezza® 100 y Netezza 100. |
Resultados
| Resultado | Descripción |
|---|---|
| CREATE AGGREGATE | Mensaje que el sistema devuelve si el mandato se ejecuta correctamente. |
| ERROR: User 'username' is not allowed to create/drop aggregates. | El sistema devuelve este mensaje si la cuenta de usuario no tiene el privilegio Create Aggregate. |
| ERROR: Synonym 'name' already exists | El sistema devuelve este mensaje si existe un sinónimo con el nombre que ha especificado para el agregado. |
| ERROR: AggregateCreate: aggregate name already exists with the same arguments | Este error se devuelve cuando se emite un mandato CREATE AGGREGATE y un agregado con el mismo nombre y existe una lista de tipos de argumento en la base de datos. En su lugar, utilice CREATE OR REPLACE AGGREGATE. |
| NOTICE: AggregateCreate: existing UDX name(argument_types) differs in size of string/numeric arguments | Este mensaje indica que existe un UDX con el nombre pero tiene especificados diferentes tamaños para los argumentos de serie o numéricos. Si no tenía la intención de cambiar la firma del agregado, compruebe la firma y asegúrese de que es correcta. |
| ERROR: lookupLibrary: library libname does not exist | Mensaje que devuelve el sistema si no puede encontrar la biblioteca compartida definida por el usuario que se especifica como dependencia. |
| ERROR: Version mismatch for function udx_name. Specified version 2, but provided version 1 object file | Los archivos de objeto compilados utilizan el soporte de API versión 1, pero el mandato SQL utiliza la funcionalidad de la versión 2. Debe crear los objetos compilados de la versión 2, o eliminar las opciones del mandato CREATE que especifican las características de la versión 2. |
| ERROR: Version mismatch for function udx_name. Specified version 1, but provided version 2 object file | Los archivos de objeto compilados utilizan el soporte de API versión 2, pero el mandato SQL utiliza la funcionalidad de la versión 1. Debe especificar los objetos compilados de la versión 1, o cambiar el mandato ALTER para especificar la sintaxis de la versión 2. |
| ERROR: Environment names can't be empty | El valor nombre de una configuración de entorno no puede ser una serie vacía. |
| ERROR: type 'type' is not yet defined | El tipo de retorno especificado no es un tipo de datos conocido Netezza Performance Server. |
Descripción
Al crear un agregado, tenga en cuenta que la firma del agregado (es decir, su nombre y lista de tipos de argumento) debe ser exclusiva dentro de la base de datos para sistemas que soportan esquemas únicos. Para los sistemas que soportan varios esquemas en una base de datos, la firma debe ser exclusiva dentro de un esquema. Ningún otro UDX puede tener el mismo nombre y lista de tipos de argumentos en la misma base de datos.
No puede cambiar el nombre de agregado o la lista de tipos de argumento mediante el mandato CREATE OR REPLACE. Puede cambiar algunos aspectos de los tipos de argumento; por ejemplo, puede cambiar el tamaño de una serie o la precisión y escala de un valor numérico. Para cambiar un nombre de agregado, la lista de tipos de argumento o ambos, debe descartar el agregado y, a continuación, crear un agregado con un nombre, lista de tipos de argumento o ambos nuevos.
No puede sustituir un agregado definido por el usuario que está en uso en una consulta activa. Una vez finalizada la transacción de consulta activa, el sistema Netezza Performance Server procesa el comando CREATE OR REPLACE AGGREGATE para actualizar el agregado.
Privilegios necesarios
Debe ser el usuario administrador de base de datos o ser propietario de la base de datos actual o del esquema actual en sistemas con soporte para varios esquemas. Los demás usuarios deben tener el privilegio Create Aggregate para utilizar el mandato CREATE AGGREGATE. Además, si utiliza CREATE OR REPLACE AGGREGATE para cambiar un UDA, debe tener el privilegio Create Aggregate y el privilegio Alter para que un UDA lo cambie. Para crear un agregado no protegido, debe tener el privilegio administrativo Unfence.
Cuando emite un mandato CREATE AGGREGATE, la base de datos procesa HOST OBJECT y los archivos SPU OBJECT como usuario nz. El usuario nz tiene que tener acceso de lectura para los archivos de objeto y acceso de lectura y ejecución para todos los directorios de la vía de acceso desde la raíz al archivo de objeto.
Tareas comunes
Utilice el mandato CREATE AGGREGATE para crear y convertirse en el propietario de un nuevo agregado definido por el usuario. Debe crear los archivos C++ del agregado y compilarlos utilizando ' nzudxcompile ' antes de poder utilizar este comando para registrar el agregado en el sistema Netezza Performance Server.
ERROR: Records trailing string space set to 512 is too small: Bump it up using the environment variable NZ_SPRINGFIELD_SIZE
Uso
- Para crear el agregado PenMax de muestra (descrito en Crear agregados definidos por el usuario):
MYDB.SCHEMA(MYUSER)=> CREATE AGGREGATE PENMAX(INT4) RETURNS INT4 STATE (INT4, INT4) LANGUAGE CPP PARAMETER STYLE NPSGENERIC EXTERNAL CLASS NAME 'CPenMax' EXTERNAL HOST OBJECT '/home/nz/udx_files/penmax.o_x86' EXTERNAL SPU OBJECT '/home/nz/udx_files/penmax.o_spu10';