# Tuple functions

Tuple functions construct a record and read one of its fields. Each tuple has a fixed field count, and a typed tuple can declare a different type for every field.

## tuple

```text
tuple(value1, ...)
```

Constructs a nonempty positional tuple from its arguments. To assign field names or enforce exact field types, use a Tuple declaration or cast.

## tuple_element

```text
tuple_element(value, position)
tuple_element(value, 'field_name')
```

A position is positive and one-based, and must fit the tuple's declared field count. A name is case-sensitive and must identify a named field. The selected field retains its native type.

## Examples

### Positional access

```sql
SELECT tuple_element(tuple(7, 'Ada'), 1),
       tuple_element(tuple(7, 'Ada'), 2)
FORMAT csv;
```

```text
7,"Ada"
```

### Named access

```sql
SELECT tuple_element(
    CAST('{"id":7,"name":"Ada"}' AS Tuple(id UInt64, name String)),
    'name'
)
FORMAT csv;
```

```text
"Ada"
```

Named tuple columns also support dotted access, such as `profile.name`. `get_subcolumn` can select a named path. See [Tuple](https://coordinatordb.com/docs/reference/data-types/tuple) for input shape and nullable field rules.
