# Import Data

There are multiple options for importing data into Pinot. These guides are ready-made examples that show you step-by-step instructions for importing records into Pinot, supported by our [plugin architecture](https://docs.pinot.apache.org/release-0.12.1/developers/plugin-architecture).

These guides are meant to get you up and running with imported data as quick as possible. Pinot supports multiple file input formats without needing to change anything other than the file name. Each example imports a ready-made dataset so you can see how things work without needing to bring your own dataset.

## Pinot Batch Ingestion

{% content-ref url="data-import/batch-ingestion/spark" %}
[spark](https://docs.pinot.apache.org/release-0.12.1/basics/data-import/batch-ingestion/spark)
{% endcontent-ref %}

{% content-ref url="data-import/batch-ingestion/hadoop" %}
[hadoop](https://docs.pinot.apache.org/release-0.12.1/basics/data-import/batch-ingestion/hadoop)
{% endcontent-ref %}

## Pinot Stream Ingestion

This guide will show you how to import data using stream ingestion from Apache Kafka topics.

{% content-ref url="data-import/pinot-stream-ingestion/import-from-apache-kafka" %}
[import-from-apache-kafka](https://docs.pinot.apache.org/release-0.12.1/basics/data-import/pinot-stream-ingestion/import-from-apache-kafka)
{% endcontent-ref %}

This guide will show you how to import data using stream ingestion with upsert.

{% content-ref url="data-import/upsert" %}
[upsert](https://docs.pinot.apache.org/release-0.12.1/basics/data-import/upsert)
{% endcontent-ref %}

This guide will show you how to import data using stream ingestion with deduplication.

{% content-ref url="data-import/dedup" %}
[dedup](https://docs.pinot.apache.org/release-0.12.1/basics/data-import/dedup)
{% endcontent-ref %}

This guide will show you how to import data using stream ingestion with CLP.

{% content-ref url="data-import/clp" %}
[clp](https://docs.pinot.apache.org/release-0.12.1/basics/data-import/clp)
{% endcontent-ref %}

## Pinot File Systems

By default, Pinot does not come with a storage layer, so all the data sent, won't be stored in case of system crash. In order to persistently store the generated segments, you will need to change controller and server configs to add a deep storage. Checkout [File systems](https://docs.pinot.apache.org/release-0.12.1/basics/data-import/pinot-file-system) for all the info and related configs.

These guides will show you how to import data as well as persist it in the file systems.

{% content-ref url="data-import/pinot-file-system/amazon-s3" %}
[amazon-s3](https://docs.pinot.apache.org/release-0.12.1/basics/data-import/pinot-file-system/amazon-s3)
{% endcontent-ref %}

{% content-ref url="data-import/pinot-file-system/import-from-adls-azure" %}
[import-from-adls-azure](https://docs.pinot.apache.org/release-0.12.1/basics/data-import/pinot-file-system/import-from-adls-azure)
{% endcontent-ref %}

{% content-ref url="data-import/pinot-file-system/import-from-gcp" %}
[import-from-gcp](https://docs.pinot.apache.org/release-0.12.1/basics/data-import/pinot-file-system/import-from-gcp)
{% endcontent-ref %}

{% content-ref url="data-import/pinot-file-system/import-from-hdfs" %}
[import-from-hdfs](https://docs.pinot.apache.org/release-0.12.1/basics/data-import/pinot-file-system/import-from-hdfs)
{% endcontent-ref %}

## Pinot Input Formats

These guides will show you how to import data from a Pinot supported input format.

{% content-ref url="data-import/pinot-input-formats" %}
[pinot-input-formats](https://docs.pinot.apache.org/release-0.12.1/basics/data-import/pinot-input-formats)
{% endcontent-ref %}

This guide will show you how to handle the complex type in the ingested data, such as map and array.

{% content-ref url="data-import/complex-type" %}
[complex-type](https://docs.pinot.apache.org/release-0.12.1/basics/data-import/complex-type)
{% endcontent-ref %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.pinot.apache.org/release-0.12.1/basics/data-import.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
