Ingesting Data
Learn how to ingest data into a Tilebox dataset.
You need to have write permission on the collection to be able to ingest data.
Check out the examples below for common scenarios of ingesting data into a collection.
Dataset schema
Tilebox Datasets are strongly typed. This means you can only ingest data that matches the schema of a dataset. The schema is defined during dataset creation time.
The examples on this page assume that you have access to a Timeseries dataset that has the following schema:
Once you’ve defined the schema and created a dataset, you can access it and create a collection to ingest data into.
Preparing data for ingestion
Ingestion can be done either in Python or Go.
Python
collection.ingest
supports a wide range of input types. Below is an example of using either a pandas.DataFrame
or an xarray.Dataset
as input.
pandas.DataFrame
A pandas.DataFrame is a representation of two-dimensional, potentially heterogeneous tabular data. It’s a powerful tool for working with structured data, and Tilebox supports it as input for ingest
.
The example below shows how to construct a pandas.DataFrame
from scratch, that matches the schema of the MyCustomDataset
dataset and can be ingested into it.
Once you have the data ready in this format, you can ingest
it into a collection.
You can now also head on over to the Tilebox Console and view the newly ingested data points there.
xarray.Dataset
xarray.Dataset
is the default format in which Tilebox Datasets returns data when
querying data from a collection.
Tilebox also supports it as input for ingestion. The example below shows how to construct an xarray.Dataset
from scratch, that matches the schema of the MyCustomDataset
dataset and can then be ingested into it.
To learn more about xarray.Dataset
, visit Tilebox dedicated Xarray documentation page.
Array fields manifest in xarray using an extra dimension, in this case n_sensor_history
. In case
of different array sizes for each data point, remaining values are filled up with a fill value, depending on the
dtype
of the array. For float64
this is np.nan
(not a number).
Don’t worry - when ingesting data into a Tilebox dataset, Tilebox will automatically skip those padding fill values
and not store them in the dataset.
Now that you have the xarray.Dataset
in the correct format, you can ingest it into the Tilebox dataset collection.
Go
Client.Datapoints.Ingest
supports ingestion of data points in the form of a slice of protobuf messages.
Protobuf
Protobuf is Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data.
More details on protobuf can be found in the protobuf section.
In the example below, v1.Modis
type has been generated using tilebox-generate as described in the protobuf section.
Copying or moving data
Since ingest
takes query
’s output as input, you can easily copy or move data from one collection to another.
Copying data like this also works across datasets in case the dataset schemas are compatible.
Automatic batching
Tilebox automatically batches the ingestion requests for you, so you don’t have to worry about the maximum request size.
Idempotency
Tilebox will auto-generate datapoint IDs based on the data of all its fields - except for the auto-generated
ingestion_time
, so ingesting the same data twice will result in the same ID being generated. By default, Tilebox
will silently skip any data points that are duplicates of existing ones in a collection. This behavior is especially
useful when implementing idempotent algorithms. That way, re-executions of certain ingestion tasks due to retries
or other reasons will never result in duplicate data points.
You can instead also request an error to be raised if any of the generated datapoint IDs already exist.
This can be done by setting the allow_existing
parameter to False
.
Ingestion from common file formats
Through the usage of xarray
and pandas
you can also easily ingest existing datasets available in file
formats, such as CSV, Parquet, Feather and more.
Check out the Ingestion from common file formats guide for examples of how to achieve this.