When SQL Meets Lambda Expressions

0
252

A few modern SQL dialects have started introducing lambda expressions

ARRAY types are a part of the ISO/IEC 9075 SQL standard. The standard specifies how to:

  • Construct arrays
  • Nest data into arrays (e.g. by means of aggregation or subqueries)
  • Unnest data from arrays into tables

But it is very unopinionated when it comes to function support. The ISO/IEC 9075-2:2023(E) 6.47 <array value expression> specifies concatenation of arrays, whereas the 6.48 <array value function> section lists a not extremely useful TRIM_ARRAY function, exclusively (using which you can remove the last N elements of an array, something I have yet to encounter a use-case for)

The implementations fare better. Many of them have a ton of useful functions, and since recently , there are a couple of more modern SQL dialects out there who have started experimenting with lambda expressions in SQL, when working with ARRAY types. These dialects include, mostly:

  • ClickHouse
  • Databricks
  • DuckDB
  • Snowflake
  • Trino

Take the ARRAY_FILTER function, for example. With jOOQ you might write something like this, where you apply a filter that keeps only even numbers in an array:

arrayFilter(array(1, 2, 2, 3), e -> e.mod(2).eq(0))

The corresponding jOOQ API is simply:

public static <T> Field<T[]> arrayFilter(
    Field<T[]> array, 
    Function1<? super Field<T>, ? extends Condition> predicate
) { ... }

So, jOOQ can simply map Java (or Kotlin, Scala) lambda expressions to a SQL lambda expression, without any magic. You just construct an expression of the right type, as always with jOOQ.

The result of such an expression might look like this:

+--------------+
| array_filter |
+--------------+
| [ 2, 2 ]     |
+--------------+

In DuckDB, for example, the above is translated to:

array_filter(
  ARRAY[1, 2, 2, 3],
  e -> (e % 2) = 0
)

If the dialect doesn’t support the lambda style syntax, the function can easily be emulated using a subquery that unnests the array, applies a WHERE clause corresponding to the lambda, and collects the results back into an array, e.g. in PostgreSQL:

(
  SELECT coalesce(
    array_agg(e),
    CAST(ARRAY[] AS int[])
  )
  FROM UNNEST(ARRAY[1, 2, 2, 3]) t (e)
  WHERE mod(e, 2) = 0
)

This works just the same way when the array isn’t just a static array literal, but an array expression, e.g. TABLE.ARRAY_FIELD.

Related functions include:

Gesponsert
Gesponsert
Gesponsert
Suche
Virtualbook
CDN FREE
Kategorien
Mehr lesen
Food
Dietary Supplements Market expected to grow at CAGR of 7.56% by 2032
The global dietary supplements market was valued at USD 195.85 billion in 2023 and is expected to...
Von Cassie Tyler 2025-02-05 06:53:24 0 416
Art
स्टारबक्स का प्रिंटर बैन: दूरस्थ कार्य ने बहुत दूर तक बढ़ा दिया है
स्टारबक्स, कॉफी की दुनिया का बादशाह, अब अपने कैफे में प्रिंटर लगाने पर रोक लगा रहा है। यह सुनकर...
Von Seema Vandana 2025-08-24 02:05:15 1 121
Art
An Even Better(!) Eevee Subsurface Scattering Translucency Shader
Eevee, Shader, Subsurface Scattering, Translucency, Gleb Alexandrov, Adam Janz, 3D-Grafik,...
Von Lena Nele 2025-09-05 08:05:23 1 53
Art
معركة بين مسؤول خدمات آبل ورئيس الشركة حيال الذكاء الاصطناعي
الذكاء الاصطناعي, آبل, معركة, خدمات آبل, رئيس الشركة, تكنولوجيا, تحليلات, مستقبل الذكاء...
Von Luisa Amelie 2025-09-01 03:05:19 1 26
Art
متحف المستقبل وNVIDIA GeForce يقدمان تجربة RTX AI للجمهور لأول مرة
## متحف المستقبل: بوابة إلى عالم الذكاء الاصطناعي إذا كنت تعتقد أن الذكاء الاصطناعي هو شيء من...
Von Luisa Maja 2025-09-09 10:05:23 1 30
Gesponsert
Virtuala FansOnly https://virtuala.site