Registrar la UDF en el sistema Netezza Performance Server
Para registrar una UDF, se utiliza el comando CREAR FUNCIÓN.
Cuando emite un mandato CREATE FUNCTION, la base de datos procesa los archivos HOST OBJECT y SPU OBJECT como usuario nz. El usuario nz debe tener acceso de lectura a los archivos de objeto, y poder leer y ejecutar el acceso a cada directorio de la vía de acceso, desde la raíz al archivo de objeto.
nzsql mydb myuser password
MYDB.SCHEMA(MYUSER)=> CREATE FUNCTION CustomerName(varchar(64000))
RETURNS int4 LANGUAGE CPP PARAMETER STYLE NPSGENERIC API VERSION 2
EXTERNAL CLASS NAME 'CCustomerName'
EXTERNAL HOST OBJECT '/home/nz/udx_files/customername.o_x86'
EXTERNAL SPU OBJECT '/home/nz/udx_files/customername.o_spu10';
Si el mandato es correcto, devuelve el mensaje CREATE FUNCTION y añade la función al esquema y base de datos actuales. Crea la función en la base de datos mydb, y la función es propiedad de myuser. Para crear una función, la cuenta de usuario debe tener el privilegio Create Function o debe haber iniciado sesión como usuario administrativo, como propietario de la base de datos o como propietario del esquema. Para el nombre de la función, puede especificar un nombre como schema.functionname (por ejemplo, schema.CustomerName(varchar(64000)) para crear la función en un esquema específico de la base de datos actual. Puede especificar un nombre de base de datos, pero el nombre debe ser el mismo que la base de datos actual. No se admiten grabaciones entre bases de datos cruzadas.
Cuando se registra una UDF en el sistema ' Netezza Performance Server ', los archivos objeto especificados se copian en los directorios de la base de datos ' Netezza Performance Server. Esto permite que todos los usuarios con permiso utilicen las funciones en las consultas, y también asegura que se haga copia de seguridad y se restauran las UDF con los datos de usuario de la base de datos. Si modifica el programa C++ por cualquier motivo (como añadir mensajes de depuración o cambiar el funcionamiento de la función), deberá recompilar el programa y volver a ejecutar el comando CREATE OR REPLACE FUNCTION para copiar los archivos objeto actualizados en la base de datos de Netezza Performance Server.
Tenga en cuenta las siguientes características del mandato CREATE FUNCTION:
- Si utiliza el mandato CREATE FUNCTION, en lugar de CREATE OR REPLACE FUNCTION, el mandato falla si ya existe una función definida por el usuario con el mismo nombre y firma en la base de datos, o en el mismo esquema si el sistema tiene soporte para varios esquemas.
- Puede crear varias UDF que utilicen el mismo nombre, pero deben tener firmas diferentes si están en la misma base de datos. El nombre debe cumplir las restricciones de caracteres para una palabra clave o identificador SQL legal Netezza Performance Server, y no necesita coincidir ni relacionarse con nada definido en el archivo C++ (es decir, el nombre no se utiliza para el enlace).
- El valor que especifica para EXTERNAL CLASS NAME debe coincidir exactamente con la clase del archivo C++, ya que es así como el motor de tiempo de ejecución crea y llama al método de objeto de UDF.
- El mandato falla si el argumento DEPENDENCIES hace referencia al nombre de una biblioteca compartida definida por el usuario que no está definida en la base de datos actual.
- Para los argumentos de serie, tenga cuidado a la hora de elegir el tamaño de la serie. En general, siga estas directrices para las series:
- Si la entrada de la serie está enlazada de forma natural, especifique un tamaño de serie que coincida con la serie más larga necesaria. Para el ejemplo customername, varchar(10) es suficiente.
- Si la longitud de entrada de serie puede variar mucho, utilice argumentos de tamaño genérico.
- Puede haber una penalización de rendimiento por especificar una serie larga cuando la entrada que se pasa es de tipo CHAR/NCHAR y el argumento se especifica como VARCHAR/NVARCHAR. En este caso, el argumento se convierte implícitamente en un argumento de tamaño variable, incluidos los espacios al final.