# `firstNonNull`

## Description

Return the first non-null value from a list of arguments, in the order they are provided.

Note

Works only on scalar values such as `number`, `string`, or `timestamp`. Does not work on objects.

## Syntax

Like many functions in DataPrime, `firstNonNull` supports [two notations](https://coralogix.com/docs/dataprime/language-reference/functions-reference/index.md), **function** and **method** notation. These interchangeable forms allow flexibility in how you structure expressions.

```dataprime
firstNonNull(value: any, ...values: any): any
```

```dataprime
(value: any).firstNonNull(...values: any): any
```

## Arguments

| Name      | Type | Required | Description                                      |
| --------- | ---- | -------- | ------------------------------------------------ |
| value     | any  | **true** | The first argument to check for a non-null value |
| ...values | any  | **true** | Subsequent arguments to check, in order          |

## Example

**Use case: Consolidate inconsistent field names for the same logical value**

Logs may contain a user identifier under different field names (`userId`, `user_id`, `user_identifier`). Instead of writing complex conditionals, `firstNonNull` returns the first populated value across these fields, creating schema-on-read consistency.

### Example data

```json
{
    "userId": "123",
    "user_id": null,
    "user_identifier": null
},
{
    "userId": null,
    "user_id": "456",
    "user_identifier": null
},
{
    "userId": null,
    "user_id": null,
    "user_identifier": "789"
}
```

### Example query

```dataprime
choose canonical_user_id from firstNonNull(userId, user_id, user_identifier)
```

```dataprime
choose canonical_user_id from userId.firstNonNull(user_id, user_identifier)
```

### Example output

```json
{
    "canonical_user_id": "123"
},
{
    "canonical_user_id": "456"
},
{
    "canonical_user_id": "789"
}
```
