Trino Connector UDF Support
Introduction
The Gravitino Trino connector supports user-defined functions (UDFs) registered in Apache Gravitino.
Functions with RuntimeType.TRINO and SQL language implementations are automatically exposed as
Trino language functions, making them available for use in Trino queries.
Mechanism
When Gravitino catalogs contain registered functions, the Trino connector:
- Lists functions from the Gravitino server for each schema.
- Filters to include only functions with
RuntimeType.TRINOandLanguage.SQL. - Maps each function implementation to a Trino
LanguageFunctionwith a signature token derived from the function name and parameter types.
Functions registered with other runtimes (e.g., SPARK) are not visible in Trino.
Prerequisites
- The Gravitino catalog must support function operations (i.e., implement
FunctionCatalog). - Functions must be registered in Gravitino via the Gravitino client or REST API before they can be queried from Trino.
Register a UDF
Use the Gravitino Java client to register a function:
FunctionCatalog functionCatalog = catalog.asFunctionCatalog();
functionCatalog.registerFunction(
NameIdentifier.of("my_schema", "add_one"),
"Adds one to input",
FunctionType.SCALAR,
true,
FunctionDefinitions.of(
FunctionDefinitions.of(
FunctionParams.of(FunctionParams.of("x", Types.IntegerType.get())),
Types.IntegerType.get(),
FunctionImpls.of(
FunctionImpls.ofSql(FunctionImpl.RuntimeType.TRINO, "RETURN x + 1")))));
Query UDFs from Trino
Once registered, the function appears in Trino:
-- List available functions in a schema
SHOW FUNCTIONS FROM catalog.my_schema;
-- Invoke the function
SELECT catalog.my_schema.add_one(5);
-- Returns: 6
Limitations
- Read-only: The Trino connector supports listing and invoking Gravitino UDFs. Creating or dropping functions via Trino SQL (
CREATE FUNCTION/DROP FUNCTION) is not yet supported. - SQL only: Only SQL-language implementations are mapped. Java and Python implementations are not exposed to Trino.
- TRINO runtime only: Only functions with
RuntimeType.TRINOare visible. Functions registered withRuntimeType.SPARKor other runtimes are filtered out. - Type mapping: Function parameter and return types are converted from Gravitino types to Trino types. Unsupported types will cause the function to be skipped with a warning log.