Download the latest version of the CrateDB Architecture Guide

Download Now
Skip to content
Querying

Functions

Run powerful logic right where your data lives.

CrateDB functions let you transform, enrich, and analyze data in real time, using familiar SQL. Choose from a rich catalog of built-in functions (scalar, aggregate, window, table) and extend behavior safely with user-defined functions (UDFs) when you need something custom. CrateDB’s distributed SQL engine executes these functions close to the data for millisecond-level results at scale.


Why Functions Matter in CrateDB

  • Speed at scale: Functions are executed inside the distributed query engine, so complex logic (aggregations, filters, joins, window ops) stays close to your data, no extract-and-process round trips.
  • Everything in SQL: Use the SQL you know to work with time series, vectors, text, JSON, geospatial, and relational data, without switching tools.
  • Extensible when you need it: Add bespoke business logic as JavaScript UDFs, version them, and reuse across queries and teams.
cr-quote-image

Built-in Functions

CrateDB ships with a comprehensive set of functions and operators covering day-to-day analytics all the way to advanced real-time scenarios:

 

  • Scalar functions: String, date/time, geo, math, regex, array, object, conditional, system, and more. Use them in SELECT, WHERE, ORDER BY, GROUP BY.
  • Aggregations: Core aggregate functions and expressions for real-time summaries over massive datasets.
  • Window functions: Perform calculations across partitions and ordered rows (e.g., running totals, percentiles, top-N per group) with OVER (...).
  • Table functions: Generate and transform rows with helpers like unnest(...), regexp_matches(...), and pg_catalog.generate_series(...).
  • Operators: Arithmetic, bitwise, comparison, and array comparison operators for expressive filtering and scoring. 

You can combine these capabilities to power aggregations, ad-hoc queries, hybrid search, and AI feature pipelines. All in SQL, all in real time.

cr-quote-image

User-Defined Functions (UDFs)

When built-ins aren’t enough, define your own JavaScript functions and call them from SQL like any other function.

  • Language: JavaScript (declared with LANGUAGE JAVASCRIPT).
  • Usage: Ideal for custom transformations, domain-specific parsing, specialized math, or feature engineering you want to reuse across queries.
  • SQL-native: Create with CREATE FUNCTION, update with CREATE OR REPLACE FUNCTION, remove with DROP FUNCTION, and use in SELECT, WHERE, GROUP BY, etc.

Example use cases: Convert units, normalize messy text, compute a domain-specific score, or extract a value from a complex JSON object, then reuse it everywhere.

cr-quote-image

Design Best Practices

  • Deterministic logic: Keep UDFs deterministic (same inputs generating same outputs) to ensure predictable results and easier debugging.
  • Keep it tight: Put heavier lifting into built-ins when possible; reserve UDFs for the truly custom bits to maximize performance.
  • Test & version: Treat UDFs as shared assets. Version them, document inputs/outputs, and test on representative datasets.|
cr-quote-image

Additional Resources

Interested in Learning More?