> ## Documentation Index
> Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Avro loading topic

> Configuration reference for `AvroTopicDescription` properties such as `file-pattern`, `schema-path`, `columns`, and `channels`, defined under the `dlc.avro.topics` namespace.

### Configuration properties

Properties for an Avro Loading Topic are defined by name in the `dlc.avro.topics` namespace,
and are picked up as configurations for the DLC.

| Key | Required | Type | Default | Description |
| - | :-: | - | :- | - |
| file-pattern | | `String` | | Path matcher. |
| schema-path | | `String` | | Path to schema. |
| columns | | `List<String>` | Columns will implicitly come from the store which is being published to. | The order of columns in the file. If a column name matches a datastore column, its parser will be implied. For columns that do not match a datastore column, a parser must be provided in the channel as a [Custom Field](../custom-field). Columns without a matching datastore column or parser are skipped. |
| channels | | `Set<Channel>` | A channel is created using the topic's name as the name of the target. | [Channels](../channel). |
| restrict-to-sources | | `Set<String> ` | | Sources *to* which the topic is restricted. See [source to topic matching](../../functional/source-to-topic-matching). |
| restrict-from-sources | | `Set<String> ` | | Sources *from* which the topic is restricted. See [source to topic matching](../../functional/source-to-topic-matching). |

#### YAML example

This configuration does not specify a target for the data.

<Note>
  If the topic is not named the same as the store, the target must be explicitly specified in the [channel](../channel) of the topic.
</Note>

* The target is implicitly the Atoti table named "Trades".
* The format comes from the schema file specified in the configuration.

```yaml theme={"languages":{"custom":["/engine/python-sdk/6.2/languages/pycon.tmLanguage.json"]}}
dlc:
  avro:
    topics:
      Trades:
        file-pattern: glob:trades*.avro
        schema-path: schemas/schema.avsc
```

### Java configuration

`AvroTopicDescription` Spring Beans are picked up as configurations for the DLC.

| Parameter | Required | Type | Default | Description |
| - | :-: | - | :- | - |
| name | Y | `String` | | Name of the topic. |
| filePattern | | `String` | | Path matcher. |
| schemaPath | | `String` | | Path to schema. |
| columns | | `List<String>` | Columns will implicitly come from the store which is being published to. | The order of columns in the file. If a column name matches a datastore column, its parser will be implied. For columns that do not match a datastore column, a parser must be provided in the channel as a [Custom Field](../custom-field). Columns without a matching datastore column or parser are skipped. |
| channels | | `Set<ChannelDescription>` | A channel is created using the topic's name as the name of the target | [Channel Descriptions](../channel) which belong to the topic. |
| restrictToSources | | `Set<String>` | | Sources *to* which the topic is restricted. See [source to topic matching](../../functional/source-to-topic-matching). |
| restrictFromSources | | `Set<String>` | | Sources *from* which the topic is restricted. See [source to topic matching](../../functional/source-to-topic-matching). |

#### Java example

This configuration does not specify a target for the data.

<Note>
  If the topic is not named the same as the store, the target must be explicitly specified in the [channel](../channel) of the topic.
</Note>

* The target is implicitly the Atoti table named "Trades".
* The format comes from the schema file specified in the configuration.

```java theme={"languages":{"custom":["/engine/python-sdk/6.2/languages/pycon.tmLanguage.json"]}}
@Bean
public AvroTopicDescription tradesTopic() {
    return AvroTopicDescription.builder("Trades", "glob:trades*.avro", "schemas/schema.avsc")
            .build();
}
```
