Skip to main content
Version: 1.3.0

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:

  1. Lists functions from the Gravitino server for each schema.
  2. Filters to include only functions with RuntimeType.TRINO and Language.SQL.
  3. Maps each function implementation to a Trino LanguageFunction with 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.TRINO are visible. Functions registered with RuntimeType.SPARK or 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.