exasol-udfslisted
Install: claude install-skill exasol-labs/exasol-agent-skills
# Exasol UDFs & Script Language Containers
Trigger when the user mentions **UDF**, **user defined function**, **CREATE SCRIPT**, **ExaIterator**, **SCALAR**, **SET EMITS**, **BucketFS**, **script language container**, **SLC**, **exaslct**, **custom packages**, **GPU UDF**, **ctx.emit**, **ctx.next**, **variadic script**, **dynamic parameters**, **EMITS(...)**, **default_output_columns**, **execute script**, **pquery**, **Lua execute**, **in-database orchestration**, or any UDF/SLC-related topic.
## When to Use UDFs
Use UDFs to extend SQL with custom logic that runs inside the Exasol cluster:
- Per-row transforms (cleaning, parsing, hashing)
- Custom aggregation across grouped rows
- ML model inference (load model from BucketFS, score rows)
- Calling external APIs from within SQL
- Batch processing with DataFrames
Use **Lua execute scripts** (not UDFs) when you need to orchestrate multi-step SQL workflows or iterative algorithms from within the database — see [references/lua-execute-scripts.md](references/lua-execute-scripts.md).
## SCALAR vs SET Decision Guide
| | SCALAR | SET |
|---|--------|-----|
| **Input** | One row at a time | Group of rows (via GROUP BY) |
| **Output** | `RETURNS <type>` (single value) | `EMITS (col1 TYPE, ...)` (zero or more rows) |
| **Row iteration** | Not needed | `ctx.next()` loop required |
| **SQL usage** | `SELECT udf(col) FROM t` | `SELECT udf(col) FROM t GROUP BY key` |
| **Use case** | Per-row transforms | Aggregation, ML batch predict