Java Example: Using Session Parameters
The RowCount example uses a user-defined session parameter, also called RowCount. This parameter counts the total number of rows processed by the UDx each time it runs. RowCount then displays the aggregate number of rows processed for all executions.
package com.mycompany.example; import com.vertica.sdk.*; public class RowCountFactory extends ScalarFunctionFactory { @Override public void getPrototype(ServerInterface srvInterface, ColumnTypes argTypes, ColumnTypes returnType) { argTypes.addInt(); argTypes.addInt(); returnType.addInt(); } public class RowCount extends ScalarFunction { private Integer count; private Integer rowCount; // In the setup method, you look for the rowCount parameter. If it doesn't exist, it is created. // Look in the default namespace which is "library," but it could be anything else, most likely "public" if not "library". @Override public void setup(ServerInterface srvInterface, SizedColumnTypes argTypes) { count = new Integer(0); ParamReader pSessionParams = srvInterface.getUDSessionParamReader("library"); String rCount = pSessionParams.containsParameter("rowCount")? pSessionParams.getString("rowCount"): "0"; rowCount = Integer.parseInt(rCount); } @Override public void processBlock(ServerInterface srvInterface, BlockReader arg_reader, BlockWriter res_writer) throws UdfException, DestroyInvocation { do { ++count; long a = arg_reader.getLong(0); long b = arg_reader.getLong(1); res_writer.setLong(a+b); res_writer.next(); } while (arg_reader.next()); } @Override public void destroy(ServerInterface srvInterface, SizedColumnTypes argTypes, SessionParamWriterMap udParams){ rowCount = rowCount+count; udParams.getUDSessionParamWriter("library").setString("rowCount", Integer.toString(rowCount)); srvInterface.log("RowNumber processed %d records", count); } } @Override public ScalarFunction createScalarFunction(ServerInterface srvInterface){ return new RowCount(); } }