# Avro streams

An Avro stream file holds records shaped like streamed data: each record names one channel, with its own timestamps, values and tags. To write one, see [Write a file](https://dev.nominal.io/python/guides/datasets/avro-streams.md#write-a-file), and for writers in other languages, the [schema](https://dev.nominal.io/python/guides/datasets/avro-streams.md#schema).

## Upload a file

**Nominal app**

1. In the sidebar, click **+** (**New**), then **Upload data**. Drop the `.avro` file onto **Upload files**, or click **SELECT FILES**.
2. Click **SELECT A DESTINATION** and choose **Standalone dataset**. Pick a dataset, or click **NEW DATASET**, enter a name and click **CREATE DATASET**.
3. Click **CONFIRM & INGEST**.

**Python**

```python
from nominal.core import NominalClient

client = NominalClient.from_profile("default")
dataset = client.create_dataset("Flight telemetry")
file = dataset.add_avro_stream("flight.avro")
file.poll_until_ingestion_completed()  # raises if ingestion fails
```

**nomctl**

```bash
nomctl ingest avro-stream --name "Flight telemetry" flight.avro
```

## Options

| Setting | Nominal app | Python |
| --- | --- | --- |
| A tag for records that don’t set it | **Tags** | `tags` |
| Timestamp unit, if not epoch nanoseconds | — | `timestamp_type` |
