Creating a user-defined function (UDF)
Write custom functions using Java or JavaScript to use in SELECT, INSERT, and UPDATE statements.
Write custom functions using Java or JavaScript to use in SELECT, INSERT, and UPDATE statements or as a building block for a user-defined aggregate (UDA). Functions are only available within the keyspace where it is defined. To preserve fast performance, use user-defined functions for short computations, and create Java UDFs instead of Javascript UDFs.
You can define functions that are executed against data stored in a table as part of a query result. The function must be created prior to its use in a SELECT statement. The function is performed on each row of the table.
cassandra.yaml
The location of the cassandra.yaml file depends on the type of installation:Package installations | /etc/dse/cassandra/cassandra.yaml |
Tarball installations | installation_location/resources/cassandra/conf/cassandra.yaml |
Prerequisites
- Java: Set enable_user_defined_functions to
true
. - JavaScript (in addition to Java): Set enable_scripted_user_defined_functions
to
true
.
Procedure
fLog()
, computes the logarithmic value of each input.
It is a built-in java
function and used to generate linear
plots of non-linear data. For this example, it presents a simple math function
to show the capabilities of user-defined functions.
CREATE OR REPLACE FUNCTION cycling.fLog ( input double ) CALLED ON NULL INPUT RETURNS double LANGUAGE java AS $$ return Double.valueOf(Math.log(input.doubleValue())); $$ ;
- Actions when the input from the target column is null:
CALLED ON NULL INPUT
ensures the function always executes when called.RETURNS NULL ON NULL INPUT
ensures the function always returnsNULL
if any of the input arguments areNULL
.
RETURNS
defines the CQL data type of the value returned by the function.- A function can be replaced with a different function if
OR REPLACE
is used as shown in the example above. Optionally, theIF NOT EXISTS
keywords can be used to create the function only if another function with the same signature does not exist in the keyspace.OR REPLACE
andIF NOT EXISTS
cannot be used in the same command.