# Supported file types

## Overview

Plugins are under active development. Stable plugins are documented below with their available options. Plugins under beta testing are available [upon request](mailto:support@marpledata.com).

<table><thead><tr><th width="173.63336181640625">File format</th><th width="216.066650390625">File extensions</th><th>Status</th></tr></thead><tbody><tr><td><a href="#csv">CSV</a></td><td>.csv, .txt, .zip, ...</td><td><i class="fa-octagon-check">:octagon-check:</i> <mark style="color:green;"><strong>Stable</strong></mark></td></tr><tr><td><a href="#mdf">MDF</a></td><td>.mdf, .mf4</td><td><i class="fa-octagon-check">:octagon-check:</i> <mark style="color:green;"><strong>Stable</strong></mark></td></tr><tr><td><a href="#matlab">MATLAB</a></td><td>.mat</td><td><i class="fa-octagon-check">:octagon-check:</i> <mark style="color:green;"><strong>Stable</strong></mark></td></tr><tr><td><a href="#hdf5">HDF5</a></td><td>.h5</td><td><i class="fa-octagon-check">:octagon-check:</i> <mark style="color:green;"><strong>Stable</strong></mark></td></tr><tr><td><a href="#tdms">TDMS</a></td><td>.tdms</td><td><i class="fa-octagon-check">:octagon-check:</i> <mark style="color:green;"><strong>Stable</strong></mark></td></tr><tr><td><a href="#ulog">Ulog (PX4)</a></td><td>.ulg</td><td><i class="fa-octagon-check">:octagon-check:</i> <mark style="color:green;"><strong>Stable</strong></mark></td></tr><tr><td><a href="#mavlink">MAVLink</a></td><td>.bin</td><td><i class="fa-octagon-check">:octagon-check:</i> <mark style="color:green;"><strong>Stable</strong></mark></td></tr><tr><td><a href="#apache-avro">Apache Avro</a></td><td>.avro</td><td><i class="fa-octagon-check">:octagon-check:</i> <mark style="color:green;"><strong>Stable</strong></mark></td></tr><tr><td><a href="#parquet">Parquet</a></td><td>.parquet, .pqt</td><td><i class="fa-octagon-check">:octagon-check:</i> <mark style="color:green;"><strong>Stable</strong></mark></td></tr><tr><td>Rosbag</td><td>.bag</td><td><i class="fa-arrows-rotate-reverse">:arrows-rotate-reverse:</i> <mark style="color:blue;"><strong>Beta testing</strong></mark></td></tr></tbody></table>

## Custom plugins

Do you have files in a different format? Our technical team can create a custom plugin for your data format.&#x20;

Get in touch with <support@marpledata.com> to discuss your use case.

## CSV

Plugin name: `CSV`

The CSV plugin has a lot of options for configuration (see below). Key points:

* The time column can be configured (but defaults to `time`)
* Time can be a number or date string format. (preferably `YYYY/MM/DD hh:mm:ss`)
* CSV zips are supported through `--unzip`
* Two main shapes are supported: `tab` (example 1) and `tsv` (example 2)

**Example 1: Tabular (tab)**

```csv
time,altitude,speed,engine_temp,fuel_level,battery_voltage
s,m,km/h,°C,%,V
0.0,0.0,0.0,90.0,100.0,12.6
1.0,10.0,20.0,91.0,99.5,12.6
2.0,25.0,40.0,92.0,99.0,12.5
3.0,50.0,60.0,93.0,98.4,12.5
4.0,80.0,75.0,94.0,97.8,12.4
5.0,120.0,85.0,95.0,97.2,12.4
6.0,160.0,90.0,96.0,96.5,12.3
7.0,200.0,88.0,96.5,95.7,12.3
8.0,240.0,70.0,97.0,94.9,12.2
9.0,260.0,40.0,96.0,94.3,12.2
```

Download the example file:

{% file src="<https://3590686807-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwEBNWlmdcxXBXd7oyqyR%2Fuploads%2FS4Nz8yftRLtPW2oZcOyP%2Fexample.csv?alt=media&token=acee05c8-cbdc-4d90-bedb-799a38963a42>" %}

**Example 2: Time Signal Value (tsv)**

```csv
time,signal,value
0.0,altitude,0.0
0.0,speed,0.0
0.0,battery_voltage,12.6
1.0,altitude,10.0
1.0,speed,20.0
1.0,battery_voltage,12.6
2.0,altitude,25.0
2.0,speed,40.0
2.0,battery_voltage,12.5
3.0,altitude,50.0
3.0,speed,60.0
```

**Available options**

<table data-full-width="true"><thead><tr><th width="210.199951171875">Option</th><th width="200.2332763671875">Default value</th><th>Details</th></tr></thead><tbody><tr><td><p><code>-t</code></p><p><code>--time-col</code></p></td><td><code>"time"</code></td><td>Name of the time column(s), the first matching item in the list will be used (e.g. <code>-t 'time' -t 'datetime'</code>)</td></tr><tr><td><p><code>-T</code></p><p><code>--combined-time-col</code></p></td><td></td><td>Combine multiple column names using space to form 1 date column (e.g. <code>-T 'date' -T 'time' -T 'UTC Offset'</code>)</td></tr><tr><td><code>--shape</code></td><td><code>tab</code></td><td>If the data is organised tabular (<code>tab</code>), or <code>tsv</code> with for example columns (time, signal, value)</td></tr><tr><td><code>--delimiter</code></td><td><code>,</code></td><td>Character that splits the columns. To specify a tab delimited file, use <code>--delimiter "&#x3C;paste tab here>"</code></td></tr><tr><td><code>--decimal</code></td><td><code>.</code></td><td>Character that show decimal point</td></tr><tr><td><code>--thousands</code></td><td><em>None</em></td><td>Character that splits 1000s</td></tr><tr><td><code>--quotechar</code></td><td><code>"</code></td><td>Character indicating strings</td></tr><tr><td><code>--encoding</code></td><td><code>latin-1</code></td><td>See list of available encodings <a href="https://docs.python.org/3/library/codecs.html#standard-encodings">here</a></td></tr><tr><td><code>--chunksize</code></td><td>1 million (<code>1e6</code>)</td><td>Number of rows consumed at once</td></tr><tr><td><code>--skiprows</code></td><td><code>0</code></td><td>Rows to be ignored at the top of the file</td></tr><tr><td><p><code>--dayfirst</code></p><p><code>--no-dayfirst</code></p></td><td><code>--no-dayfirst</code></td><td>Parse dates with the day first (e.g. 23/08/2025)</td></tr><tr><td><code>--time-factor</code></td><td>1 billion (<code>1e9</code>)</td><td>Factor to convert time to nanoseconds</td></tr><tr><td><code>--time-offset</code></td><td>0</td><td>Offset [ns] to add to time. Time [ns] = [time-col] * time-factor + time-offset</td></tr><tr><td><code>--use-index</code><br><code>--no-use-index</code></td><td><code>--no-use-index</code></td><td>Use row index as time column</td></tr><tr><td><p><code>-h</code></p><p><code>--header</code></p></td><td></td><td>Names for the columns, instead of using the first row (e.g. <code>-h 'time' -h 'col0' -h 'col1'</code>) </td></tr><tr><td><p><code>--units</code></p><p><code>--no-units</code></p></td><td><code>--no-units</code></td><td>Read units from the second line (<code>tab</code> only)</td></tr><tr><td><p><code>--unzip</code></p><p><code>--no-unzip</code></p></td><td><code>--no-unzip</code></td><td>The input file is a <code>.zip</code> file which contains <code>.csv</code> files</td></tr><tr><td><p><code>--group-by-filename</code></p><p><code>--no-group-by-filename</code></p></td><td><code>--no-group-by-filename</code></td><td>Add the file name as a signal group</td></tr><tr><td><code>--signal-col</code></td><td><code>signal</code></td><td>Column to use for signal names, in case of multiple, they will be combined using <code>.</code>   (<code>tsv</code> only)</td></tr><tr><td><code>--value-col</code></td><td><code>value</code></td><td>Column to use for values (<code>tsv</code> only)</td></tr><tr><td><code>--unit-col</code></td><td><em>None</em></td><td>Column to use for units (<code>tsv</code> only)</td></tr><tr><td><p><code>-M</code></p><p><code>--metadata-col</code></p></td><td></td><td>Columns to use for metadata (<code>tsv</code> only)</td></tr></tbody></table>

A general example of how these options can be correctly used in Marple DB:

<figure><img src="https://3590686807-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwEBNWlmdcxXBXd7oyqyR%2Fuploads%2Fy3wTzwoWl9PKhdJu6Avx%2Fimage.png?alt=media&#x26;token=bd9df814-74e0-457e-ba5b-7ba82ff3b243" alt=""><figcaption></figcaption></figure>

## MDF

Plugin name: `MDF/ MF4`  &#x20;

Can import files generated according to the ASAM Measurement Data Format version 4 (MF4) standard. Binary MDF files cannot be parsed but needs to converted using a `.dbc` file first.

**Available options**

<table data-full-width="true"><thead><tr><th width="238.70001220703125">Option</th><th width="216.7000732421875">Default value</th><th>Details</th></tr></thead><tbody><tr><td><code>--chunksize</code></td><td>10 million (<code>1e7</code>)</td><td>Number of datapoints in each processed chunk. Large values may result in too much use of RAM and crashing</td></tr><tr><td><code>--time-factor</code></td><td>1 billion (<code>1e9</code>)</td><td>Factor to convert time to nanoseconds</td></tr><tr><td><code>--time-offset</code></td><td>0</td><td>Offset [ns] to add to time. Time [ns] = [time-col] * time-factor + time-offset</td></tr><tr><td><p><code>--use-header-start-time</code></p><p><code>--no-use-header-start-time</code></p></td><td><code>--use-header-start-time</code></td><td>Use the start time from the header of the file.</td></tr><tr><td><code>-s</code> / <code>--select</code></td><td></td><td>Channel names to include. If not provided, all channels are included.</td></tr><tr><td><p><code>--skip-empty-signals</code></p><p><code>--no--skip-empty-signals</code></p></td><td><code>--no--skip-empty-signals</code></td><td>Skip empty channels during ingestion.</td></tr></tbody></table>

## MATLAB

Plugin name: `MATLAB`&#x20;

MAT files are used a lot when using MATLAB or certain loggers such as dSpace, Speedgoat, .. MAT files are treated similarly to HDF5 files (as described above), so the same rules apply.

If you have a MAT file of version 7.3 or higher, this will be treated as a HDF5 file. MAT files of a lower version are significantly less efficient and will require more effort to be parsed by Marple.

Download the example.mat file below:

{% file src="<https://3590686807-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwEBNWlmdcxXBXd7oyqyR%2Fuploads%2Foxr7y4KfyvOXp8ytAF3r%2Fexample.mat?alt=media&token=36952283-e623-4be5-94ac-059e8d06023c>" %}

We accept 3 different structures for MATLAB files: flat/matrix/signal. Read more about the available file structures in [#hdf5](#hdf5 "mention").

**Available options**

<table data-full-width="true"><thead><tr><th width="193.73333740234375">Option</th><th width="157.79998779296875">Default value</th><th>Details</th></tr></thead><tbody><tr><td><p><code>-t</code></p><p><code>--time-col</code></p></td><td><p><code>-t "time"</code> <br></p><p><code>-t "Time"</code></p></td><td>Name of the time column(s), the first matching item in the list will be used.  (e.g. <code>-t 'time' -t 'datetime'</code>)</td></tr><tr><td><code>--use-index</code><br><code>--no-use-index</code></td><td><code>--no-use-index</code></td><td>Use row index as time column</td></tr><tr><td><code>--time-factor</code></td><td>1 billion (<code>1e9</code>)</td><td>Factor to convert time to nanoseconds</td></tr><tr><td><code>--time-offset</code></td><td>0</td><td>Offset [ns] to add to time. Time [ns] = [time-col] * time-factor + time-offset</td></tr><tr><td><code>--include-groups</code> <code>--no-include-groups</code></td><td><code>--include-groups</code> </td><td>Include group names in signal names.</td></tr><tr><td><code>--structure</code></td><td><code>flat</code></td><td>How to interpret the data structure in the file. [flat/matrix/signal]</td></tr><tr><td><code>--names-key</code></td><td><code>names</code></td><td>Key name for signal names when using 'matrix' structure.</td></tr><tr><td><code>--units-key</code></td><td><code>units</code></td><td>Key name for signal units when using 'matrix' structure.</td></tr><tr><td><code>--descriptions-key</code></td><td><code>descriptions</code></td><td>Key name for signal descriptions when using 'matrix' structure.</td></tr></tbody></table>

## HDF5

Plugin name: `HDF5`&#x20;

HDF5 files are widely known for their excellent handling of large data sets.. and we agree! We love HDF5 data sets!

Unfortunately, HDF5 files come in different shapes and formats, so we need to agree to some structure.

Marple supports 3 structures for HDF5: flat, matrix (row-oriented) and signal (nested groups).

**Flat (default, signal-based)**

Groups act like dictionaries: each signal name is a key, and the value is a Dataset (array). There is typically one time signal per group, shared by all signals in that group.

```
file (h5.File)
└── group_1 (h5.Group)
    ├── time (h5.Dataset)
    ├── signal_1 (h5.Dataset)
    └── signal_2 (h5.Dataset)
```

We also allow for signal grouping, as can be seen in the example below:

Units can be stored as an [attribute](https://docs.h5py.org/en/stable/high/attr.html#attributes) on each signal Dataset.

Example file:

{% file src="<https://3590686807-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwEBNWlmdcxXBXd7oyqyR%2Fuploads%2Fhi2ivHuOxYvwedUGaWeP%2Fexample_flat.hdf5?alt=media&token=84799d0d-f837-4f11-af79-21ffb68895b4>" %}

**SIGNAL (nested groups)**

Each signal is a Group; inside it are Datasets for time and values (e.g. `time`, `value`, `value_text`). No shared time column—each signal carries its own.

```
file (h5.File)
└── group_1 (h5.Group)
    └── signal_1 (h5.Group)
        ├── time (h5.Dataset) (Can be omitted when using '--use-index')
        └── value (h5.Dataset) (Can be text or numeric data)
        └── value_text (h5.Dataset) (Can only be text data, in that case 'value' can only be numeric)
```

Groups can be nested further; any Group that contains both a time-like Dataset and a value Dataset is treated as one signal.

Example file:

{% file src="<https://3590686807-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwEBNWlmdcxXBXd7oyqyR%2Fuploads%2FZ5e600NS4v0y8VVeYhF3%2Fexample_signal.h5?alt=media&token=889c8d9b-7058-45e8-b917-266302e794d2>" %}

**MATRIX (row-oriented)**

A matrix structure is a row-oriented construct.

A group holds a single data matrix plus separate keys for signal names, units, and descriptions. Suited to row-by-row processing.

Key names are configurable (`--data-key`, `--names-key`, `--units-key`, `--descriptions-key`).

```
file (h5.File)
└── group_1 (h5.Group)
    ├── data (h5.Dataset)     # matrix: rows = time, columns = signals
    ├── names (h5.Dataset)    # signal names
    ├── units (h5.Dataset)    # optional
    └── descriptions (h5.Dataset)  # optional
```

Example file:

{% file src="<https://3590686807-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwEBNWlmdcxXBXd7oyqyR%2Fuploads%2F8dWIlYeNiNXYJEnkA8EG%2Fexample_hdf5_matrix.h5?alt=media&token=c2f95c3c-30f9-4bde-a333-b077368f3c04>" %}

**Available options**

<table data-full-width="true"><thead><tr><th width="192.4666748046875">Option</th><th width="157.79998779296875">Default value</th><th>Details</th></tr></thead><tbody><tr><td><p><code>-t</code></p><p><code>--time-col</code></p></td><td><p><code>-t "time"</code> <br></p><p><code>-t "Time"</code></p></td><td>Name of the time column(s), the first matching item in the list will be used.  (e.g. <code>-t 'time' -t 'datetime'</code>)</td></tr><tr><td><code>--time-factor</code></td><td>1 billion (<code>1e9</code>)</td><td>Factor to convert time to nanoseconds</td></tr><tr><td><code>--time-offset</code></td><td>0</td><td>Offset [ns] to add to time. Time [ns] = [time-col] * time-factor + time-offset</td></tr><tr><td><code>--use-index</code><br><code>--no-use-index</code></td><td>--no-use-index</td><td>Use row index as time column</td></tr><tr><td><code>--include-groups</code> <code>--no-include-groups</code></td><td><code>--include-groups</code> </td><td>Include group names in signal names.</td></tr><tr><td><code>--structure</code></td><td><code>flat</code></td><td>How to interpret the data structure in the file. [flat/matrix]</td></tr><tr><td><code>--names-key</code></td><td><code>names</code></td><td>Key name for signal names when using 'matrix' structure.</td></tr><tr><td><code>--units-key</code></td><td><code>units</code></td><td>Key name for signal units when using 'matrix' structure.</td></tr><tr><td><code>--descriptions-key</code></td><td><code>descriptions</code></td><td>Key name for signal descriptions when using 'matrix' structure.</td></tr></tbody></table>

## TDMS

Plugin name: `TDMS`&#x20;

**Available options**

<table data-full-width="true"><thead><tr><th width="150.0333251953125">Option</th><th width="157.79998779296875">Default value</th><th>Details</th></tr></thead><tbody><tr><td><code>--chunksize</code></td><td>10 million (<code>1e7</code>)</td><td>Number of datapoints in each processed chunk. Large values may result in too much use of RAM and crashing</td></tr><tr><td><code>--time-factor</code></td><td>1 billion (<code>1e9</code>)</td><td>Factor to convert time to nanoseconds</td></tr><tr><td><code>--time-offset</code></td><td>0</td><td>Offset [ns] to add to time. Time [ns] = [time-col] * time-factor + time-offset</td></tr><tr><td><p><code>-t</code></p><p><code>--time-col</code></p></td><td><code>-t "time"</code></td><td>Name of the time column(s), the first matching item in the list will be used.  (e.g. <code>-t 'time' -t 'datetime'</code>)</td></tr><tr><td><code>--use-index</code><br><code>--no-use-index</code></td><td><code>--no-use-index</code></td><td>Use row index as time column</td></tr><tr><td><code>--unit</code></td><td><code>unit_string</code></td><td>Name of the channel property which contains the unit.</td></tr></tbody></table>

## ULOG

Plugin name: `ULog`

The ULOG format is often used when dealing with systems that operate using the PX4 software or ecosystem. We think it's a great format because it is standardized!

As long as you adhere to the ULOG structure, `.ulg` formats are plug & play for Marple. No configuration needed!

Download the example.ulg file below:

{% file src="<https://3590686807-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwEBNWlmdcxXBXd7oyqyR%2Fuploads%2FgDjlPRMIZSazHlTJzYqK%2Fexample.ulg?alt=media&token=7d84e969-619f-4838-a64a-6211e259018e>" %}

## MAVLINK

Plugin name: `MAVLink`

MAVLink is a very lightweight messaging protocol for communicating with drones. The messages can be stored in a file, often with a `.bin` extension and can be easily imported by Marple.

**Available options**

<table data-full-width="true"><thead><tr><th width="176.4666748046875">Option</th><th width="157.79998779296875">Default value</th><th>Details</th></tr></thead><tbody><tr><td><code>--include-types</code></td><td></td><td>Message types to include (if empty, include all types). Multiple options allowed.</td></tr><tr><td><code>--exclude-types</code></td><td></td><td>Message types to exclude. Multiple options allowed.</td></tr><tr><td><code>--no-bad-data</code></td><td><code>False</code></td><td>Ignore <code>BAD_DATA</code> messages</td></tr><tr><td><code>--parameters</code></td><td><code>metadata</code></td><td><p>How to add the values from the <code>PARM</code> message type. Valid options are:</p><ul><li><code>skip</code> : Ignore <code>PARM</code> messages</li><li><code>metadata</code> : Add parameters as metadata to the dataset (use first value if more than 1 occur for same parameter)</li><li><code>signal</code> : Add each parameter as a new signal to the dataset </li><li><code>both</code> : Add parameters as metadata &#x26; signals</li></ul></td></tr></tbody></table>

## Apache Avro

Avro is a row-oriented serialization framework that is used in Apache Hadoop. Avro files store data in binary format but it’s syntax definition resembles a JSON file. Here is an example of what a .avro file JSON structure should look like to be supported by Marple:

```json
[
    {
        "Timestamp": "2024-06-01T12:00:00Z",
        "Name": "Measurement",
        "Value": "0.108"
    },
    {
        "Timestamp": "2024-06-01T12:00:00Z",
        "Name": "Measurement1",
        "Value": "48.6"
    },
    {
        "Timestamp": "2024-06-01T12:01:00Z",
        "Name": "Measurement",
        "Value": "0.235"
    },
    ...
]
```

Dataset metadata and signal metadata can be embedded in the Avro file’s metadata section using the following structure:

* **Dataset metadata:**\
  A dictionary containing key–value pairs, where each key represents a metadata field and each value stores the corresponding metadata value.
* **Signal metadata:**\
  A dictionary where each key is a signal name, and the value is another dictionary containing all metadata fields associated with that specific signal.

Example of metadata in Avro file:

```json
{
    "type": "record",
    "name": "marpledb.example",
    "fields": [...],
    "datasetInfo": {
        "Location": "Antwerp",
        "Date": "11/12/2025",
        "Description": "Temporary configuration for testing purposes"
    },
    "signalInfo": {
        "signal1": {
            "unit": "m/s",
            "description": "Signal 1 description"
        },
        "signal2": {
            "unit": "kg",
            "description": "Signal 2 description"
        }
    }
}
```

**Available options**

<table data-full-width="true"><thead><tr><th width="225.4666748046875">Option</th><th width="157.79998779296875">Default value</th><th>Details</th></tr></thead><tbody><tr><td><code>--chunksize</code></td><td>100k (<code>1e5</code>)</td><td>Number of records in each processed chunk. Large values may result in too much use of RAM and crashing</td></tr><tr><td><code>--time-factor</code></td><td>1 billion (<code>1e9</code>)</td><td>Factor to convert time to nanoseconds (only in case timestamps are not stored as dates).</td></tr><tr><td><code>--time-offset</code></td><td>0</td><td>Offset [ns] to add to time. Time [ns] = [time-col] * time-factor + time-offset</td></tr><tr><td><code>--time-col</code></td><td><code>Timestamp</code></td><td>Name of the time column.</td></tr><tr><td><code>--signal-col</code></td><td><code>Name</code></td><td>Name of the signal column.</td></tr><tr><td><code>--value-col</code></td><td><code>Value</code></td><td>Name of the value column.</td></tr><tr><td><code>--signal-metadata-key</code></td><td></td><td>Key name for signal metadata dictionary in file metadata (if any). See example above for more info.</td></tr><tr><td><code>--dataset-metadata-key</code></td><td></td><td>Key name for dataset metadata dictionary in file metadata (if any). See example above for more info.</td></tr><tr><td><code>--unit-key</code></td><td><code>Unit</code></td><td>Key name for signal unit in signal metadata (if any).</td></tr><tr><td><p><code>--dayfirst</code></p><p><code>--no-dayfirst</code></p></td><td><code>--dayfirst</code></td><td>Parse dates with the day first (e.g. 23/08/2025)</td></tr></tbody></table>

## Parquet

The .parquet plugin allows 2 file shapes: long and wide.

**Wide format**

Use this format if your data is already structured as a time-series table where each signal is its own column and one column contains the time values.

| time | temperature | pressure | rpm  |
| ---- | ----------- | -------- | ---- |
| 0.00 | 23.1        | 101.3    | 1200 |
| 0.01 | 23.4        | 101.5    | 1205 |

Example file:

{% file src="<https://3590686807-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwEBNWlmdcxXBXd7oyqyR%2Fuploads%2FNQv9RdXExBodntuHYutq%2Fexample_wide.parquet?alt=media&token=4a0e3e33-e516-4cc3-a51b-9d53da8783e2>" %}

**Long format**

One row per measurement, with a fixed `time`, `signal`, and `value` column.

| time | signal      | value |
| ---- | ----------- | ----- |
| 0.00 | temperature | 23.1  |
| 0.00 | pressure    | 101.3 |
| 0.01 | temperature | 23.4  |

Example file:

{% file src="<https://3590686807-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwEBNWlmdcxXBXd7oyqyR%2Fuploads%2FIlJW3zW4WpiJ3KF8RUNl%2Fexample_long.parquet?alt=media&token=6e889702-0d83-454f-b52d-601d7a4deb08>" %}

**Adding metadata**

**Dataset metadata** is used for global context (e.g., test ID, operator, or session info). This is extracted from the `schema.metadata` at the file level.

Implementation: Add key-value pairs to the global Parquet file metadata.

**Signal metadata** is only accepted when the dataset structure is "wide" (one signal per column). The plugin looks for the following keys within the `.metadata` field of each `Field` object. While any key-value pair is allowed and will be stored on your signal, the following keys are treated as "special" for automatic UI handling: `unit`, `desciption`.

Looking for an example? The `example_wide.parquet` dataset contains both dataset and signal metadata.

**Available options**

<table data-full-width="true"><thead><tr><th width="225.4666748046875">Option</th><th width="157.79998779296875">Default value</th><th>Details</th></tr></thead><tbody><tr><td><code>--shape</code></td><td><code>wide</code></td><td>Shape of the dataset, see above for more info. [<code>wide</code>/<code>long</code>]</td></tr><tr><td><code>--time-col</code></td><td></td><td>Name of the time column. If not set, "time" is used if present.</td></tr><tr><td><code>--time-factor</code></td><td>1</td><td>Factor to convert time to nanoseconds (only in case timestamps are not stored as dates).</td></tr><tr><td><code>--time-offset</code></td><td>0</td><td>Offset [ns] to add to time. Time [ns] = [time-col] * time-factor + time-offset</td></tr><tr><td><code>--chunksize</code></td><td>100k (<code>1e5</code>)</td><td>Number of records in each processed chunk. Large values may result in too much use of RAM and crashing</td></tr><tr><td><p><code>-s</code></p><p><code>--signal-col</code></p></td><td><code>["signal"]</code></td><td>Columns to use for signal names. (long only) If multiple values are provided, the names in these columns will be combined to make the signal name. </td></tr><tr><td><code>--value-col</code></td><td><code>value</code></td><td>Column to use for values. (long only)</td></tr><tr><td><p><code>--ordered-by-signal</code></p><p><code>--not-ordered-by-signal</code></p></td><td><code>--not-ordered-by-signal</code></td><td>Assume rows are ordered by signal, enabling per-signal sequential processing (improves performance for large datasets). (long only)</td></tr><tr><td><p><code>--use-index</code></p><p><code>--no-use-index</code></p></td><td><code>--no-use-index</code></td><td>Use the row index as relative time instead of a time column.</td></tr></tbody></table>
