# Parquet File Writer

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

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

Parquet é um formato de arquivo em coluna projetado para armazenamento e recuperação de dados eficientes. Você pode obter mais informações [no site oficial](https://parquet.apache.org/).

## **Parâmetros**

Dê uma olhada nos parâmetros de configuração do conector. Parâmetros suportados por [expressões Double Braces](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/overview) 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>Parquet File Name</strong> <code>(DB)</code></td><td>Nome do arquivo Parquet a ser escrito.</td><td>file.parquet</td><td><em>String</em></td></tr><tr><td><strong>Avro File Name</strong> <code>(DB)</code></td><td><p>Nome do arquivo Avro que contém os dados a serem escritos no arquivo Parquet.</p><p>Aceita apenas arquivos Avro que possuam <em>schemas</em> com o tipo <code>RECORD</code> como tipo de dado raiz.</p></td><td>file.avro</td><td><em>String</em></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>Parquet File Name</strong>) já existir na execução vigente do pipeline.</p><p>Você pode escolher as seguintes opções:</p><p><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>Overwrite</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 pipeline com erro será interrompida. Do contrário, a execução do pipeline 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>Dictionary Encoding</strong></td><td>Define se o <em>dictionary encoding</em> para colunas deve ser habilitado.</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>Compression Codec</strong></td><td><p>O <em>codec</em> de compressão a ser utilizado ao comprimir o arquivo Parquet.</p><p>Opções:</p><ul><li><strong>Uncompressed</strong></li><li><strong>Snappy</strong></li><li><strong>GZIP</strong></li><li><strong>LZ4</strong></li><li><strong>LZ4 Raw</strong></li></ul></td><td><em>Uncompressed</em></td><td><em>String</em></td></tr><tr><td><strong>Row Group Size</strong></td><td>Define o tamanho de grupos de linhas (<em>row groups)</em> do arquivo Parquet.</td><td>134217728</td><td>Inteiro</td></tr><tr><td><strong>Page Size</strong></td><td>Define o tamanho de páginas (<em>pages)</em> do arquivo Parquet.</td><td>1048576</td><td>Inteiro</td></tr></tbody></table>

### **Aba Documentation**

<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>

## **Informações importantes**

O conector **Parquet File Writer** só pode gerar arquivos Parquet com base em arquivos Avro. Não é possível criá-los diretamente a partir de um *payload* JSON.

Apesar dessa limitação, a Digibee Integration Platform oferece uma maneira de gerar arquivos Avro por meio do conector **Avro File Writer**, além do fato de que o conector **Parquet File Writer** pode lidar com arquivos Avro gerados por outras fontes externas à plataforma.

Ao escrever arquivos Parquet através do conector **Parquet File Writer**, arquivos Avro contendo os tipos de dados `BINARY` e `FIXED` são ambos tratados como dados binários. Ao ler o arquivo gerado através do conector **Parquet File Reader**, os dados são apresentados no formato base64.

Você também deve observar que existem diferenças de performance ao escrever arquivos Parquet comprimidos e não comprimidos. Uma vez que a compressão exige um maior consumo de memória e processamento, é importante validar os limites que o *pipeline* irá suportar ao aplicá-la.

## **Exemplos de uso**

### **Arquivo Parquet não comprimido**

Escrevendo um arquivo Parquet não comprimido com base em um arquivo Avro:

* **Parquet File Name:** file.parquet
* **Avro File Name:** file.avro
* **File Exists Policy:** *Overwrite*
* **Compression Codec:** *Uncompressed*

**Exemplo de conteúdo de um arquivo Avro no formato JSON:**

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

```

**Saída:**

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

```

### **Arquivo Parquet comprimido**

Escrevendo um arquivo Parquet comprimido com base em um arquivo Avro:

* **Parquet File Name:** file.parquet
* **Avro File Name:** file.avro
* **File Exists Policy:** *Overwrite*
* **Compression Codec:** *Snappy*

**Exemplo de conteúdo de um arquivo Avro no formato JSON:**

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

```

**Saída:**

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

```

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

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

* **Parquet File Name:** file.parquet
* **Avro File Name:** file.avro
* **File Exists Policy:** *Fail*

**Saída:**

{% code overflow="wrap" %}

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

```

{% endcode %}
