# assets

One row per asset: the vehicle, ground station, or other physical thing that data belongs to.

Metadata table, so no `dataset_rid` predicate is required.

For how assets organize data in Nominal, see [Assets](https://dev.nominal.io/platform/data-model.md#asset) in the data model.

## Columns

| Column | Type | Nullable | Notes |
| --- | --- | --- | --- |
| `asset_rid` | `VARCHAR` | No | Resource ID. |
| `title` | `VARCHAR` | Yes | Asset title. |
| `description` | `VARCHAR` | Yes | Free-text description. |
| `labels` | `ARRAY` | Yes | Labels applied to the asset. |
| `properties` | `MAP` | No | Key-value properties applied to the asset. See [Properties](https://dev.nominal.io/sql-reference/schema/assets.md#properties). |
| `links` | `ARRAY` | Yes | Links associated with the asset. Each element is a map with string keys. |
| `dataset_rid` | `VARCHAR` | Yes | The dataset backing the asset. Null for an asset with no dataset attached. |

## Properties

Each entry in `properties` is a JSON object holding the property’s type and value, such as `{"type":"string","value":"<value>"}`, so read a value with `properties['<key>']['value']`. The `runs`, `datasets`, and `events` tables store `properties` the same way.

## Examples

List assets:

```sql
SELECT asset_rid, title FROM assets ORDER BY title LIMIT 50
```

Filter on a property:

```sql
SELECT asset_rid, title, description
FROM assets
WHERE properties['<key>']['value'] = '<value>'
ORDER BY title
```

Search titles. Matching is case-sensitive:

```sql
SELECT asset_rid, title
FROM assets
WHERE UPPER(title) LIKE '%<TITLE TEXT>%'
```

To find which runs covered an asset, join through [`run_assets`](https://dev.nominal.io/sql-reference/schema/run_assets.md):

```sql
SELECT r.title, r.start_time, r.end_time
FROM run_assets AS ra
JOIN runs AS r ON ra.run_rid = r.run_rid
WHERE ra.asset_rid = '<asset-rid>'
ORDER BY r.start_time DESC
```

> **Note**
>
> An asset is backed by at most one dataset. Join `dataset_rid` to [`datasets`](https://dev.nominal.io/sql-reference/schema/datasets.md) for time bounds, or use it directly as the `dataset_rid` predicate on the telemetry tables. That dataset can be a [🔒︎composition](https://docs.nominal.io/core/documentation/platform/data/compositions) of other datasets.

## Next steps

- [run_assets](https://dev.nominal.io/sql-reference/schema/run_assets.md): which assets each run covers.
- [runs](https://dev.nominal.io/sql-reference/schema/runs.md): time ranges of activity.
- [datasets](https://dev.nominal.io/sql-reference/schema/datasets.md): data sources you can query telemetry from.
