

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Conversión del formato de los datos de entrada en Amazon Data Firehose
<a name="record-format-conversion"></a>

Amazon Data Firehose puede convertir el formato de los datos de entrada de JSON a [Apache Parquet](https://parquet.apache.org/) o [Apache ORC](https://orc.apache.org/) antes de almacenarlos en Amazon S3. Parquet y ORC son formatos de datos en columnas que ahorran espacio y permiten unas búsquedas más rápidas en comparación con los formatos orientados a filas como JSON. Si quieres convertir un formato de entrada distinto de JSON, como valores separados por comas (CSV) o texto estructurado, puedes transformarlo AWS Lambda primero a JSON. Para obtener más información, consulte [Transformación de los datos de origen en Amazon Data Firehose](data-transformation.md).

Puede convertir el formato de los datos incluso si agrega los registros antes de enviarlos a Amazon Data Firehose.

Amazon Data Firehose requiere los tres elementos siguientes para convertir el formato de los datos de los registros: 

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

Amazon Data Firehose requiere un deserializador para leer el JSON de los datos de entrada. Puede elegir uno de los siguientes dos tipos de deserializador:

Al combinar varios documentos JSON en el mismo registro, asegúrese de que la entrada siga presentándose en el formato JSON compatible. Una matriz de documentos JSON no es una entrada válida. 

Por ejemplo, esta es la entrada correcta: `{"a": 1}{"b": 1}`, y esta es la incorrecta: `[{"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)

### Elección del deserializador JSON
<a name="record-format-conversion-deserializers"></a>

Elija el JSON de [OpenX SerDe si el JSON](https://github.com/rcongiu/Hive-JSON-Serde) de entrada contiene marcas de tiempo en los siguientes formatos:
+  yyyy-MM-dd't'HH:mm:ss [.S] 'Z', donde la fracción puede tener hasta 9 dígitos; por ejemplo,. `2017-02-07T15:13:01.39256Z`
+  aaaa-[M]M-[d]d HH:mm:ss[.S], donde la fracción puede tener hasta 9 dígitos: por ejemplo, `2017-02-07 15:13:01.14`.
+  Segundos epoch: por ejemplo, `1518033528`.
+  Milisegundos epoch: por ejemplo, `1518033528123`.
+  Segundos epoch con número de punto flotante: por ejemplo, `1518033528.123`.

El OpenX JSON SerDe puede convertir puntos () en guiones bajos (`.`). `_` También puede convertir claves JSON a minúsculas antes de deserializarlas. [Para obtener más información sobre las opciones disponibles con este deserializador a través de Amazon Data Firehose, consulte Abrir. XJson SerDe](https://docs.aws.amazon.com/firehose/latest/APIReference/API_OpenXJsonSerDe.html)

Si no está seguro de qué deserializador elegir, utilice OpenX JSON SerDe, a menos que tenga marcas de tiempo que no admita.

[Si tiene marcas de tiempo en formatos distintos a los enumerados anteriormente, utilice el JSON de Apache Hive. SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-JSON) Si elige este deserializador, puede especificar los formatos de marca temporal que va a utilizar. Para ello, siga la sintaxis de los patrones de las cadenas de formato `DateTimeFormat` de Joda-Time. Para obtener más información, consulte [Clase DateTimeFormat](https://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html). 

También puede utilizar el valor especial `millis` para analizar las marcas temporales en milisegundos con formato de tiempo Unix. Si no especifica un formato, Amazon Data Firehose utiliza `java.sql.Timestamp::valueOf` de forma predeterminada.

El JSON de Hive SerDe no permite lo siguiente:
+ Puntos (`.`) en los nombres de las columnas.
+ Campos cuyo tipo sea `uniontype`.
+ Campos que tienen tipos numéricos en el esquema, pero que son cadenas en el JSON. Por ejemplo, si el esquema es (un int) y el JSON lo es`{"a":"123"}`, Hive SerDe muestra un error.

La colmena SerDe no convierte el JSON anidado en cadenas. Por ejemplo, si se tiene `{"a":{"inner":1}}`, no trata `{"inner":1}` como una cadena.

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

Amazon Data Firehose requiere un esquema para determinar cómo interpretar esos datos. Utilice [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) para crear un esquema en AWS Glue Data Catalog. Amazon Data Firehose hará referencia a ese esquema y lo usará para interpretar los datos de entrada. Puede utilizar el mismo esquema para configurar tanto Amazon Data Firehose como el software de análisis. Para obtener más información, consulte Cómo [rellenar el catálogo de datos de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html) en la *Guía para AWS Glue desarrolladores*.

**nota**  
El esquema creado en el catálogo AWS Glue de datos debe coincidir con la estructura de datos de entrada. De lo contrario, los datos convertidos no contendrán atributos que no estén especificados en el esquema. Si utiliza un JSON anidado, utilice un tipo STRUCT en el esquema que refleje la estructura de los datos JSON. Consulte [este ejemplo](https://docs.aws.amazon.com/athena/latest/ug/openx-json-serde.html#nested-json-serde-example) para ver cómo gestionar un JSON anidado con un tipo STRUCT. 

**importante**  
Para los tipos de datos que no especifican un límite de tamaño, existe un límite práctico de 32 MBs para todos los datos de una sola fila.  
Si especifica la longitud para `CHAR` o `VARCHAR`, Firehose trunca las cadenas a la longitud especificada cuando lee los datos de entrada. Si la cadena de datos subyacente es más larga, permanece sin cambios.

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

**Firehose requiere un serializador para convertir los datos al formato de almacenamiento en columnas de destino (Parquet u ORC)**: puede elegir entre uno de los dos tipos de serializadores. 
+ [ORC SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC)
+ [Parquet SerDe](https://cwiki.apache.org/confluence/display/Hive/Parquet)

### Elección del serializador
<a name="record-format-conversion-serializers"></a>

El serializador que elija depende de sus necesidades empresariales. [Para obtener más información sobre las dos opciones de serializador, consulte [ORC SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC) y Parquet. SerDe](https://cwiki.apache.org/confluence/display/Hive/Parquet)

# Habilitar la conversión del formato de registros
<a name="enable-record-format-conversion"></a>

Si habilitas la conversión de formatos de registro, no podrás configurar el destino de Amazon Data Firehose como Amazon OpenSearch Service, Amazon Redshift o Splunk. Una vez habilitada la conversión de formatos, Amazon S3 es el único destino que se puede utilizar para el flujo de Firehose. En la siguiente sección, se muestra cómo habilitar la conversión del formato de registros desde la consola y desde las operaciones de la API de Firehose. Para ver un ejemplo de cómo configurar la conversión de formatos de registro con CloudFormation, consulte [AWS::: DataFirehose](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#aws-resource-kinesisfirehose-deliverystream--examples). DeliveryStream

## Habilitar la conversión de formatos de registros desde la consola
<a name="record-format-conversion-using-console"></a>

Puede habilitar la conversión del formato de datos en la consola al crear o actualizar un flujo de Firehose. Una vez habilitada la conversión de formatos de datos, Amazon S3 es el único destino que se puede configurar para el flujo de Firehose. Además, la compresión de Amazon S3 se deshabilita al habilitar la conversión de formatos. Sin embargo, la compresión Snappy se realiza automáticamente como parte del proceso de conversión. El formato de trama de Snappy que Amazon Data Firehose utiliza en este caso es compatible con Hadoop. Esto significa que puede utilizar los resultados de la compresión de Snappy y ejecutar consultas con estos datos en Athena. [Para ver el formato de encuadre Snappy en el que se basa Hadoop, 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)

**Habilitación de la conversión del formato de datos de un flujo de datos de Firehose**

1. Inicie sesión en y abra la consola Amazon Data Firehose en. Consola de administración de AWS[https://console.aws.amazon.com/firehose/](https://console.aws.amazon.com/firehose/)

1. Elija un flujo de Firehose que desee actualizar o cree uno nuevo siguiendo los pasos descritos en [Tutorial: Crear un flujo de Firehose desde la consola](basic-create.md).

1. En **Convert record format (Convertir formato de registro)**, establezca **Record format conversion (Conversión del formato de registro)** en **Enabled (Habilitado)**.

1. Elija el formato de salida que desea utilizar. Para obtener más información acerca de las dos opciones, consulte [Apache Parquet](https://parquet.apache.org/) y [Apache ORC](https://orc.apache.org/).

1. Elija una AWS Glue tabla para especificar un esquema para sus registros fuente. Establezca la región, la base de datos, la tabla y la versión de la tabla.

## Gestión de la conversión de formatos de registro desde la API de Firehose
<a name="record-format-conversion-using-api"></a>

[Si desea que Amazon Data Firehose convierta el formato de los datos de entrada de JSON a Parquet u ORC, especifique el [DataFormatConversionConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DataFormatConversionConfiguration.html)elemento opcional en ExtendedS3 o en [ExtendedS3 DestinationConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html). DestinationUpdate](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationUpdate.html) Si lo especifica, se aplicarán las siguientes restricciones. [DataFormatConversionConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DataFormatConversionConfiguration.html)
+ En [BufferingHints](https://docs.aws.amazon.com/firehose/latest/APIReference/API_BufferingHints.html), no puede establecer un valor inferior `SizeInMBs` a 64 si habilita la conversión al formato de registro. Además, si la conversión de formato no está habilitada, el valor predeterminado es 5. El valor pasa a ser 128 cuando se habilita.
+ [Debe establecer `CompressionFormat` en [ExtendeDS3 DestinationConfiguration o en ExtendeDS3](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html) para. DestinationUpdate](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationUpdate.html) `UNCOMPRESSED` El valor predeterminado de `CompressionFormat` es `UNCOMPRESSED`. [Por lo tanto, también puede dejarlo sin especificar en ExtendedS3. DestinationConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html) Los datos se siguen comprimiendo como parte del proceso de serialización utilizando la compresión Snappy de forma predeterminada. El formato de trama de Snappy que Amazon Data Firehose utiliza en este caso es compatible con Hadoop. Esto significa que puede utilizar los resultados de la compresión de Snappy y ejecutar consultas con estos datos en Athena. [Para ver el formato de encuadre Snappy en el que se basa Hadoop, 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) Al configurar el serializador, puede elegir otros tipos de compresión.

# Gestión de errores en la conversión del formato de datos
<a name="record-format-conversion-error-handling"></a>

Cuando Amazon Data Firehose no puede analizar ni deserializar un registro (por ejemplo, cuando los datos no coinciden con el esquema), los escribe en Amazon S3 con un prefijo de error. Si esta operación de escritura falla, Amazon Data Firehose la reintenta para siempre y bloquea cualquier posible entrega posterior. Para cada registro con errores, Amazon Data Firehose escribe un documento JSON con el siguiente esquema:

```
{
  "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
  }
}
```