⌘K ctrl+k
Search Shortcut cmd + k | ctrl + k
Struct Functions

The functions on this page work on STRUCT values. Functions that access entries by position, such as struct[idx], struct_extract_at, struct_contains, struct_position and struct_values, also accept TUPLE values, i.e., structs with unnamed entries. struct_concat accepts either only STRUCTs or only TUPLEs. Functions that work with entry names, i.e., struct_insert, struct_keys, struct_update and remap_struct, require a STRUCT.

Name Description
struct.entry Dot notation that serves as an alias for struct_extract from named STRUCTs.
struct[entry] Bracket notation that serves as an alias for struct_extract from named STRUCTs.
struct[idx] Bracket notation that serves as an alias for struct_extract from TUPLEs, using an index (1-based).
remap_struct(input, target_type, mapping, defaults) Remap a STRUCT, LIST, or MAP value into the shape given by the type of target_type, renaming and reordering fields, descending into nested types, and filling missing fields from defaults.
row(any, ...) Create a TUPLE containing the argument values.
struct_concat(structs...) Merge the multiple structs into a single STRUCT.
struct_contains(struct, entry) Check if the STRUCT contains the specified entry.
struct_extract(struct, 'entry') Extract the named entry from the STRUCT.
struct_extract(struct, idx) Extract the entry from a TUPLE using an index (1-based).
struct_extract_at(struct, idx) Extract the entry from a STRUCT or TUPLE using an index (1-based).
struct_insert(struct, name := any, ...) Add field(s) to an existing STRUCT.
struct_keys(struct) Return the names of the entries of a STRUCT as a list.
struct_pack(name := any, ...) Create a STRUCT containing the argument values. The entry name will be the bound variable name.
struct_position(struct, entry) Return the index of the entry within the STRUCT (1-based), or NULL if not found.
struct_update(struct, name := any, ...) Add or update field(s) of an existing STRUCT.
struct_values(struct) Return the values of a STRUCT as a TUPLE.

struct.entry

| Description | Dot notation that serves as an alias for struct_extract from named STRUCTs. | | Example | ({'i': 3, 's': 'string'}).i | | Result | 3 |

struct[entry]

| Description | Bracket notation that serves as an alias for struct_extract from named STRUCTs. | | Example | ({'i': 3, 's': 'string'})['i'] | | Result | 3 |

struct[idx]

| Description | Bracket notation that serves as an alias for struct_extract from TUPLEs, using an index (1-based). | | Example | (row(42, 84))[1] | | Result | 42 |

remap_struct(input, target_type, mapping, defaults)

| Description | Remap an input value of type STRUCT, LIST, or MAP into the shape declared by the type of target_type, renaming and reordering fields, descending into nested types, and filling target fields that have no source counterpart from defaults. Only the type of target_type is used, not its value, so any value of the desired type works; a typed NULL literal (e.g. NULL::STRUCT(v1 INT, v2 INT)) is a convenient way to declare the target shape when no suitable value is at hand. mapping is a STRUCT keyed by target field name whose values name the source field to read from; defaults is a STRUCT of constant values for the remaining target fields. Every target field must be covered by either mapping or defaults. | | Example | remap_struct({'i': 1, 'j': 2}, NULL::STRUCT(v1 INT, v2 INT, v3 INT), {'v1': 'j', 'v3': 'i'}, {'v2': NULL::INTEGER}) | | Result | {'v1': 2, 'v2': NULL, 'v3': 1} |

To remap a target field that is itself a STRUCT, give its mapping value as ROW(source_field, {inner_mapping}), and nest its defaults the same way. A LIST's single child is addressed by the mapping key 'list', and a MAP's children by the keys 'key' and 'value'.

row(any, ...)

| Description | Create a TUPLE containing the argument values. | | Example | row(i, i % 4, i / 4) | | Result | (10, 2, 2.5) |

struct_concat(structs...)

| Description | Merge the multiple structs into a single STRUCT. | | Example | struct_concat(struct_pack(i := 4), struct_pack(s := 'string')) | | Result | {'i': 4, 's': string} |

struct_contains(struct, entry)

| Description | Check if the STRUCT contains the specified entry. | | Example | struct_contains(row(1, 2, 3), 2) | | Result | true | | Alias | struct_has |

struct_extract(struct, 'entry')

| Description | Extract the named entry from the STRUCT. | | Example | struct_extract({'i': 3, 'v2': 3, 'v3': 0}, 'i') | | Result | 3 |

struct_extract(struct, idx)

| Description | Extract the entry from a TUPLE using an index (1-based). | | Example | struct_extract(row(42, 84), 1) | | Result | 42 |

struct_extract_at(struct, idx)

| Description | Extract the entry from a STRUCT or TUPLE using an index (1-based). | | Example | struct_extract_at({'v1': 10, 'v2': 20, 'v3': 3}, 2) | | Result | 20 |

struct_insert(struct, name := any, ...)

| Description | Add field(s) to an existing STRUCT. | | Example | struct_insert({'a': 1}, b := 2) | | Result | {'a': 1, 'b': 2} |

struct_keys(struct)

| Description | Return the names of the entries of a STRUCT as a list. | | Example | struct_keys({'a': 1, 'b': 2}) | | Result | [a, b] |

struct_pack(name := any, ...)

| Description | Create a STRUCT containing the argument values. The entry name will be the bound variable name. | | Example | struct_pack(i := 4, s := 'string') | | Result | {'i': 4, 's': string} |

struct_position(struct, entry)

| Description | Return the index of the entry within the STRUCT (1-based), or NULL if not found. | | Example | struct_position(row(1, 2, 3), 2) | | Result | 2 | | Alias | struct_indexof |

struct_update(struct, name := any, ...)

| Description | Add or update field(s) of an existing STRUCT. | | Example | struct_update({'a': 1, 'b': 2}, b := 3, c := 4) | | Result | {'a': 1, 'b': 3, 'c': 4} |

struct_values(struct)

| Description | Return the values of a STRUCT as a TUPLE. | | Example | struct_values({'a': 1, 'b': 2, 'c': 3}) | | Result | (1, 2, 3) |

関連キーワード


© 2026 DuckDB Foundation, Amsterdam NL
DuckDB Home Code of Conduct Trademark Use Blog