# Avro File Writer

{% hint style="info" %}
O **Avro File Writer** é um conector exclusivo do Pipeline Engine v2.
{% endhint %}

O conector **Avro File Writer** permite que você escreva arquivos Avro com base em *schemas* Avro.

Avro é um *framework* para serialização de dados utilizado no ecossistema Hadoop Big Data, conhecido por seu suporte à evolução de *schema* e compactação. Para mais informações, [veja o site oficial](https://avro.apache.org/).

## **Parâmetros**

Dê uma olhada nos parâmetros de configuração do conector. Parâmetros suportados por [expressões Double Braces](/documentation/connectors-and-triggers/pt-br/double-braces/overview.md) estão marcados com `(DB)`.

### **Aba General**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>File Name</strong> <code>(DB)</code></td><td>Nome do arquivo Avro a ser escrito.</td><td>file.avro</td><td><em>String</em></td></tr><tr><td><strong>Data</strong> <code>(DB)</code></td><td><p>Dados a serem escritos no arquivo Avro.</p><p>Aceita apenas objetos e <em>arrays</em> de objetos JSON.</p></td><td>{{ message.data }}</td><td><em>String</em></td></tr><tr><td><strong>Schema</strong> <code>(DB)</code></td><td><p>O <em>schema</em> Avro a ser utilizado na escrita do arquivo.</p><p>Aceita apenas <em>schemas</em> com o tipo <code>RECORD</code> como tipo de dado raiz.</p></td><td>N/A</td><td><em>String</em></td></tr><tr><td><strong>Data From File</strong></td><td>Se o parâmetro estiver ativado, os dados a serem escritos no arquivo Avro devem ser informados através de outros arquivos Avro e não via <em>payload</em> JSON.</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>Files</strong></td><td><p>Define os arquivos Avro contendo os dados a serem escritos no arquivo Avro final.</p><p></p><p>Essa opção só está disponível quando <strong>Data From File</strong> estiver ativado.</p></td><td>N/A</td><td>Opções de <em>Data From File</em></td></tr><tr><td><strong>File Name</strong> <code>(DB)</code></td><td><p>Nome do arquivo Avro contendo os dados.</p><p></p><p>Essa opção só está disponível quando <strong>Data From File</strong> for habilitado.</p></td><td>N/A</td><td><em>String</em></td></tr><tr><td><strong>Infer Schema From File</strong></td><td>Se o parâmetro estiver ativado, o <em>schema</em> Avro será inferido do primeiro arquivo Avro definido no parâmetro <strong>Files</strong>.</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>File Exists Policy</strong></td><td><p>Define qual comportamento a ser seguido quando um arquivo de mesmo nome (<strong>File Name</strong>) já existir na execução vigente do <em>pipeline</em>.</p><p>Você pode escolher as seguintes opções: <strong>Append</strong> (o arquivo existente é complementado com os dados), <strong>Overwrite</strong> (sobrescreve o arquivo existente) ou <strong>Fail</strong> (a execução é interrompida com um erro se o arquivo já existir).</p></td><td><em>Append</em></td><td><em>String</em></td></tr><tr><td><strong>Fail On Error</strong></td><td>Se a opção estiver ativada, a execução do <em>pipeline</em> com erro será interrompida. Do contrário, a execução do <em>pipeline</em> continua, mas o resultado irá mostrar um valor falso para a propriedade <code>"success"</code>.</td><td><em>False</em></td><td>Booleano</td></tr></tbody></table>

### **Aba Advanced**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>Compression Codec</strong></td><td><p>O <em>codec</em> de compressão a ser utilizado ao comprimir o arquivo Avro.</p><p>Opções:</p><ul><li><strong>Uncompressed</strong></li><li><strong>DEFLATE</strong></li><li><strong>BZIP2</strong></li></ul></td><td><em>Uncompressed</em></td><td><em>String</em></td></tr><tr><td><strong>Compression Level</strong></td><td><p>O nível de compressão a ser aplicado ao comprimir o arquivo Avro. Opções: 1-9</p><p>Essa opção só está disponível quando <strong>Compression Codec</strong> for configurado como <strong>DEFLATE.</strong></p></td><td>1</td><td>Inteiro</td></tr></tbody></table>

### **Aba Documentação**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>Documentation</strong></td><td>Seção para documentar qualquer informação necessária sobre a configuração do conector e regras de negócio.</td><td>N/A</td><td><em>String</em></td></tr></tbody></table>

{% hint style="info" %}
Note que podem ocorrer diferenças de performance ao escrever arquivos Avro comprimidos e não comprimidos. Como a compressão exige um maior consumo de memória e processamento, é importante validar os limites que o *pipeline* irá suportar ao aplicá-la.
{% endhint %}

## **Exemplos de uso**

### **Arquivo a partir de um objeto JSON**

Escrevendo um arquivo Avro a partir de um objeto JSON como *payload*:

* **File Name:** file.avro
* **Data:** {{ message.data }}
* **Schema:** {{ message.schema }}
* **File Exists Policy:** *Overwrite*
* **Compression Codec:** *Uncompressed*

**Dados de exemplo:**

```
{
  "data": {
    "name": "Aquiles",
    "phoneNumbers": [
      "11 99999-9999",
      "11 93333-3333"
    ],
    "active": true,
    "address": "St. Example",
    "score": 71.3,
    "details": "Some details"
  }
}

```

**Schema de exemplo:**

```
{
  "schema": {
    "type": "record",
    "name": "Record",
    "fields": [
        {
            "name": "name",
            "type": "string"
        },
        {
            "name": "phoneNumbers",
            "type": {
                "type": "array",
                "items": "string"
            }
        },
        {
            "name": "active",
            "type": "boolean"
        },
        {
            "name": "address",
            "type": "string"
        },
        {
            "name": "score",
            "type": "double"
        },
        {
            "name": "details",
            "type": [
                "string",
                "null"
            ]
        }
    ]
  }
}

```

**Saída:**

```
{
  "success": true,
  "fileName": "file.avro"
}

```

### **Arquivo a partir de um array de objetos JSON**

Escrevendo um arquivo Avro a partir de um *array* de objetos JSON como *payload*:

* **File Name:** file.avro
* **Data:** {{ message.data }}
* **Schema:** {{ message.schema }}
* **File Exists Policy:** *Overwrite*

**Dados de exemplo:**

```
{
  "data": [ 
    {
      "name": "Aquiles",
      "phoneNumbers": [
        "11 99999-9999",
        "11 93333-3333"
      ],
      "active": true,
      "address": "St. Example",
      "score": 71.3,
      "details": "Some details"
    },
    {
      "name": "Vitor",
      "phoneNumbers": [
        "11 97777-7777"
      ],
      "active": false,
      "address": "St. Example 2",
      "score": 80.0,
      "details": null
    }
  ]
}

```

**Schema de exemplo:**

```
{
  "schema": {
    "type": "record",
    "name": "Record",
    "fields": [
        {
            "name": "name",
            "type": "string"
        },
        {
            "name": "phoneNumbers",
            "type": {
                "type": "array",
                "items": "string"
            }
        },
        {
            "name": "active",
            "type": "boolean"
        },
        {
            "name": "address",
            "type": "string"
        },
        {
            "name": "score",
            "type": "double"
        },
        {
            "name": "details",
            "type": [
                "string",
                "null"
            ]
        }
    ]
  }
}

```

**Saída:**

```
{
  "success": true,
  "fileName": "file.avro"
}

```

### **Arquivo Avro não comprimido**

Escrevendo um arquivo Avro não comprimido:

* **File Name:** file.avro
* **Data:** {{ message.data }}
* **Schema:** {{ message.schema }}
* **File Exists Policy:** *Overwrite*
* **Compression Codec:** *Uncompressed*

**Saída:**

```
{
  "success": true,
  "fileName": "file.avro"
}

```

### **Arquivo Avro comprimido**

Escrevendo um arquivo Avro comprimido:

* **File Name:** file.avro
* **Data:** {{ message.data }}
* **Schema:** {{ message.schema }}
* **File Exists Policy:** *Overwrite*
* **Compression Codec:** BZIP2

**Saída:**

```
{
  "success": true,
  "fileName": "file.avro"
}

```

### **File Exists Policy como Fail**

Escrevendo um arquivo Avro com o mesmo nome de um arquivo já existente no diretório de arquivos do *pipeline*:

* F**ile Name:** file.avro
* **Data:** {{ message.data }}
* **Schema:** {{ message.schema }}
* **File Exists Policy:** *Fail*

**Saída:**

{% code overflow="wrap" %}

```
{
  "success": false,
  "message": "Something went wrong while trying to execute the Avro Writer connector",
  "error": "com.digibee.pipelineengine.exception.PipelineEngineRuntimeException: Avro file file.avro already exists."
}

```

{% endcode %}

### **Escrevendo arquivo a partir de outro arquivo Avro - schema explícito**

Escrevendo um arquivo Avro com dados vindo de outro arquivo Avro ao invés de um *payload* JSON, usando uma configuração de *schema* explícita:

* **File Name:** file.avro
* **Data From File:** ativado
* **Files:**
  * **File Name:** {{ message.existingAvroFile }}
* **Schema:** {{ message.schema }}
* **File Exists Policy:** *Overwrite*

**Saída:**

```
{
  "success": true,
  "fileName": "file.avro"
}

```

### **Escrevendo arquivo a partir de outro arquivo Avro - inferindo schema**

Escrevendo um arquivo Avro com dados vindo de outro arquivo Avro ao invés de um *payload* JSON, inferindo o *schema* através do arquivo:

* **File Name:** file.avro
* **Data From File:** ativado
* **Files:**
  * **File Name:** {{ message.existingAvroFile }}
* **Infer Schema:** ativado
* **File Exists Policy:** *Overwrite*

**Saída:**

```
{
  "success": true,
  "fileName": "file.avro"
}

```


---

# 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.digibee.com/documentation/connectors-and-triggers/pt-br/connectors/files/avro-file-writer.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.
