

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Conversão do formato de dados de entrada no Amazon Data Firehose
<a name="record-format-conversion"></a>

O Amazon Data Firehose pode converter o formato dos dados de entrada de JSON para [Apache Parquet](https://parquet.apache.org/) ou [Apache ORC](https://orc.apache.org/) antes de armazenar os dados no Amazon S3. Parquet e ORC são formatos de dados em colunas que economizam espaço e permitem consultas mais rápidas do que com os formatos orientados a linhas, como JSON. Se você quiser converter um formato de entrada diferente de JSON, como valores separados por vírgula (CSV) ou texto estruturado, você pode usá-lo AWS Lambda para transformá-lo em JSON primeiro. Para obter mais informações, consulte [Transformação de dados da fonte no Amazon Data Firehose](data-transformation.md).

É possível converter o formato dos dados mesmo de agregar seus registros antes de enviá-los para o Amazon Data Firehose.

O Amazon Data Firehose exige estes três elementos para converter o formato de dados de registros: 

## Deserializer
<a name="record-format-conversion-deserializer"></a>

O Amazon Data Firehose exige um desserializador para ler o JSON dos seus dados de entrada. Escolha um dos dois tipos a seguir de desserializador.

Ao combinar vários documentos JSON no mesmo registro, certifique-se de que sua entrada ainda seja apresentada no formato JSON compatível. Uma matriz de documentos JSON não é uma entrada válida. 

Por exemplo, esta é a entrada correta: `{"a": 1}{"b": 1}`; e esta é a entrada incorreta: `[{"a":1}, {"a":2}]`.
+ [Apache Hive JSON SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-JSON)
+ [OpenX JSON SerDe](https://github.com/rcongiu/Hive-JSON-Serde)

### Escolha do desserializador JSON
<a name="record-format-conversion-deserializers"></a>

Escolha o [OpenX JSON SerDe se o JSON](https://github.com/rcongiu/Hive-JSON-Serde) de entrada contiver carimbos de data e hora nos seguintes formatos:
+  yyyy-MM-dd'T'hh:mm:ss [.S] 'Z', onde a fração pode ter até 9 dígitos — por exemplo,. `2017-02-07T15:13:01.39256Z`
+  yyyy-[M]M-[d]d HH:mm:ss[.S], em que a fração pode ter até 9 dígitos, por exemplo, `2017-02-07 15:13:01.14`.
+  Segundos a partir do ponto zero, por exemplo, `1518033528`.
+  Milissegundos a partir do ponto zero, por exemplo, `1518033528123`.
+  Segundos a partir do ponto zero com ponto flutuante, por exemplo, `1518033528.123`.

O OpenX JSON SerDe pode converter pontos (`.`) em sublinhados (). `_` Ele também pode converter chaves JSON para minúsculas antes de desserializá-las. [Para obter mais informações sobre as opções que estão disponíveis com esse desserializador por meio do Amazon Data Firehose, consulte Open. XJson SerDe](https://docs.aws.amazon.com/firehose/latest/APIReference/API_OpenXJsonSerDe.html)

Se você não tiver certeza de qual desserializador escolher, use o OpenX JSON SerDe, a menos que tenha carimbos de data e hora que ele não suporta.

Se você tiver carimbos de data e hora em formatos diferentes dos listados anteriormente, use o [Apache Hive JSON](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-JSON). SerDe Ao escolher esse desserializador, será possível especificar os formatos de carimbo de data/hora a serem usados. Para fazer isso, siga a sintaxe do padrão de string do formato Joda Time `DateTimeFormat`. Para obter mais informações, consulte [Classe DateTimeFormat](https://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html). 

Você também pode usar o valor especial `millis` para analisar o time stamp em milissegundos de epoch. Se você não especificar um formato, o Amazon Data Firehose usará `java.sql.Timestamp::valueOf` por padrão.

O JSON do Hive SerDe não permite o seguinte:
+ Pontos (`.`) em nomes de coluna.
+ Campos cujo tipo é `uniontype`.
+ Campos que têm tipos numéricos no esquema, mas que são strings no JSON. Por exemplo, se o esquema for (um int) e o JSON for`{"a":"123"}`, o Hive apresentará um erro SerDe .

O Hive SerDe não converte JSON aninhado em strings. Por exemplo, se você tiver `{"a":{"inner":1}}`, ele não tratará `{"inner":1}` como uma string.

## Schema
<a name="record-format-conversion-schema"></a>

O Amazon Data Firehose exige um esquema para determinar como interpretar esses dados. Use o [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) para criar um esquema no AWS Glue Data Catalog. Em seguida, o Amazon Data Firehose referencia esse esquema e usa-o para interpretar os dados de entrada. É possível usar o mesmo esquema para configurar o Amazon Data Firehose o software de análise. Para obter mais informações, consulte [Preenchendo o catálogo de dados do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html) no *Guia do AWS Glue desenvolvedor*.

**nota**  
O esquema criado no Catálogo de AWS Glue Dados deve corresponder à estrutura de dados de entrada. Caso contrário, os dados convertidos não conterão atributos que não estejam especificados no esquema. Se você usar JSON aninhado, use um tipo STRUCT no esquema que espelha a estrutura dos dados JSON. Veja [este exemplo](https://docs.aws.amazon.com/athena/latest/ug/openx-json-serde.html#nested-json-serde-example) para saber como lidar com JSON aninhado com um tipo STRUCT. 

**Importante**  
Para tipos de dados que não especificam um limite de tamanho, há um limite prático de 32 MBs para todos os dados em uma única linha.  
Se você especificar o comprimento como `CHAR` ou `VARCHAR`, o Firehose truncará as cadeias de caracteres no comprimento especificado ao ler os dados de entrada. Se a string de dados subjacente for mais longa, ela permanecerá inalterada.

## Serializer
<a name="record-format-conversion-serializer"></a>

**O Firehose exige um serializador para converter dados para o formato de armazenamento em colunas de destino (Parquet ou ORC)**: escolha um dentre os dois tipos de serializadores a seguir. 
+ [ORC SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC)
+ [Parquet SerDe](https://cwiki.apache.org/confluence/display/Hive/Parquet)

### Escolha do serializador
<a name="record-format-conversion-serializers"></a>

O serializador que você escolhe depende de suas necessidades de negócios. [Para saber mais sobre as duas opções de serializador, consulte [ORC SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC) e Parquet. SerDe](https://cwiki.apache.org/confluence/display/Hive/Parquet)

# Habilitar a conversão de formato do registro
<a name="enable-record-format-conversion"></a>

Se você habilitar a conversão do formato de registro, não poderá definir o destino do Amazon Data Firehose como Amazon OpenSearch Service, Amazon Redshift ou Splunk. Com a conversão de formato habilitada, o Amazon S3 é o único destino que pode ser usado para o fluxo do Firehose. A seção a seguir mostra como ativar a conversão do formato de registro nas operações do console e da API do Firehose. Para obter um exemplo de como configurar a conversão do formato de registro com CloudFormation, consulte [AWS::DataFirehose:: DeliveryStream](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#aws-resource-kinesisfirehose-deliverystream--examples).

## Habilitação da conversão de formato do registro a partir do console
<a name="record-format-conversion-using-console"></a>

É possível habilitar a conversão de formato de dados no console ao criar ou atualizar um fluxo do Firehose. Com a conversão de formato de dados habilitada, o Amazon S3 é o único destino que pode ser configurado para o fluxo do Firehose. Além disso, a compactação do Amazon S3 será desabilitada quando você habilitar a conversão de formato. No entanto, a compactação Snappy ocorre automaticamente como parte do processo de conversão. OK formato de enquadramento para o Snappy que o Amazon Data Firehose usa nesse caso é compatível com o Hadoop. Isso significa que é possível usar os resultados da compactação Snappy e executar consultas nesses dados no Athena. [Para o formato de enquadramento Snappy no qual o Hadoop se baseia, consulte .java. BlockCompressorStream](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java)

**Para ativar a conversão de formato de dados para um fluxo de dados do Firehose**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon Data Firehose em. [https://console.aws.amazon.com/firehose/](https://console.aws.amazon.com/firehose/)

1. Selecione um fluxo do Firehose para atualizar ou crie um novo fluxo do Firehose seguindo as etapas em [Tutorial: Criação de um fluxo do Firehose a partir do console](basic-create.md).

1. Em **Convert record format (Converter formato do registro)**, defina **Record format conversion (Conversão de formato do registro)** como **Enabled (Habilitado)**.

1. Selecione o formato de saída que você deseja. Para obter mais informações sobre as duas opções, consulte [Apache Parquet](https://parquet.apache.org/) e [Apache ORC](https://orc.apache.org/).

1. Escolha uma AWS Glue tabela para especificar um esquema para seus registros de origem. Defina a região, o banco de dados, a tabela e a versão da tabela.

## Gerenciamento da conversão do formato de registro da API do Firehose
<a name="record-format-conversion-using-api"></a>

[https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html) Se você especificar [DataFormatConversionConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DataFormatConversionConfiguration.html), as seguintes restrições se aplicam.
+ Em [BufferingHints](https://docs.aws.amazon.com/firehose/latest/APIReference/API_BufferingHints.html), você não pode `SizeInMBs` definir um valor menor que 64 se você habilitar a conversão do formato de registro. Além disso, quando a conversão de formato não está ativada, o valor padrão é 5. O valor se torna 128 quando você a habilita.
+ [Você deve definir `CompressionFormat` em [ExtendedS3 DestinationConfiguration ou em ExtendedS3](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html) como. DestinationUpdate](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationUpdate.html) `UNCOMPRESSED` O valor padrão para `CompressionFormat` é `UNCOMPRESSED`. Portanto, você também pode deixá-lo não especificado em [DestinationConfigurationExtendedS3](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html). Os dados ainda são compactados como parte do processo de serialização, usando a compactação Snappy, por padrão. OK formato de enquadramento para o Snappy que o Amazon Data Firehose usa nesse caso é compatível com o Hadoop. Isso significa que é possível usar os resultados da compactação Snappy e executar consultas nesses dados no Athena. [Para o formato de enquadramento Snappy no qual o Hadoop se baseia, consulte .java. BlockCompressorStream](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java) Quando você configurar o serializador, será possível escolher outros tipos de compactação.

# Tratamento de erros para conversão de formato de dados
<a name="record-format-conversion-error-handling"></a>

Quando o Amazon Data Firehose não pode analisar ou desserializar um registro (por exemplo, quando os dados não correspondem ao esquema), ele o grava no Amazon S3 com um prefixo de erro. Se essa gravação falhar, o Amazon Data Firehose fará novas tentativas indefinidamente, bloqueando qualquer outra entrega. Para cada registro com falha, o Amazon Data Firehose grava um documento JSON com esquema a seguir:

```
{
  "attemptsMade": long,
  "arrivalTimestamp": long,
  "ErrorCode": string,
  "ErrorMessage": string,
  "attemptEndingTimestamp": long,
  "rawData": string,
  "sequenceNumber": string,
  "subSequenceNumber": long,
  "dataCatalogTable": {
    "catalogId": string,
    "databaseName": string,
    "tableName": string,
    "region": string,
    "versionId": string,
    "catalogArn": string
  }
}
```