Cómo convertir el formato de registro de entrada en Firehose - Amazon Data Firehose

Amazon Data Firehose se conocía anteriormente como Amazon Kinesis Data Firehose

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.

Cómo convertir el formato de registro de entrada en Firehose

Amazon Data Firehose puede convertir el formato de los datos de entrada de JSON a Apache Parquet o Apache ORC antes de almacenar los datos 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 desea convertir un formato de entrada distinto de JSON, como valores separados por comas (CSV) o texto estructurado, puede transformarlo primero AWS Lambda a JSON. Para obtener más información, consulte Transformación de datos en Amazon Data Firehose.

Requisitos de la conversión del formato de registro

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

  • Un deserializador para leer el JSON de los datos de entrada: puede elegir uno de los dos tipos de deserializadores: Apache Hive JSON u OpenX JSON. SerDe SerDe

    nota

    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}{"a":2}

    Y esta es la entrada incorrecta: [{"a":1}, {"a":2}]

  • Un esquema para determinar cómo interpretar esos datos: utilice AWS Glue para crear un esquema en AWS Glue Data Catalog. A continuación, Amazon Data Firehose hace referencia a ese esquema y lo utiliza para interpretar los datos de entrada. Puede usar el mismo esquema para configurar Amazon Data Firehose y su software de análisis. Para obtener más información, consulte Rellenar el catálogo de datos de AWS Glue 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 para ver cómo gestionar un JSON anidado con un tipo STRUCT.

  • Un serializador para convertir los datos al formato de almacenamiento en columnas de destino (Parquet u ORC) : puede elegir uno de los dos tipos de serializadores: ORC o Parquet. SerDe SerDe

importante

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. Con la conversión de formato habilitada, Amazon S3 es el único destino que puede usar para su transmisión de Firehose.

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

Elección del deserializador JSON

Elija el JSON de OpenX SerDe si el JSON de entrada contiene marcas de tiempo en los siguientes formatos:

  • aaaa-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 OpenX. JsonSerDe

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

También puede utilizar el valor especial millis para analizar las marcas temporales en milisegundos con formato de tiempo Unix. Si no especificas ningún formato, Amazon Data Firehose lo utilizará de forma predeterminadajava.sql.Timestamp::valueOf.

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.

Elección del serializador

El serializador que elija depende de sus necesidades empresariales. Para obtener más información sobre las dos opciones del serializador, consulte ORC y Parquet. SerDe SerDe

Conversión del formato de registro de entrada (consola)

Puedes habilitar la conversión de formatos de datos en la consola al crear o actualizar una transmisión de Firehose. Con la conversión de formatos de datos habilitada, Amazon S3 es el único destino que puede configurar para la transmisión 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 encuadre para 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

Para habilitar la conversión de formato de datos para una transmisión Firehose de datos
  1. Inicie sesión en la AWS Management Console consola Amazon Data Firehose y ábrala en https://console.aws.amazon.com/firehose/.

  2. Elige una transmisión de Firehose para actualizarla o crea una nueva transmisión de Firehose siguiendo los pasos que se indican. Creación de una transmisión de Firehose

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

  4. Elija el formato de salida que desea utilizar. Para obtener más información acerca de las dos opciones, consulte Apache Parquet y Apache ORC.

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

Conversión del formato de registro de entrada (API)

Si desea que Amazon Data Firehose convierta el formato de los datos de entrada de JSON a Parquet u ORC, especifique el DataFormatConversionConfigurationelemento opcional en ExtendedS3 o en ExtendedS3 DestinationConfiguration. DestinationUpdate Si lo especifica, se aplicarán las siguientes restricciones: DataFormatConversionConfiguration

Control de errores de la conversión del formato de registro

Cuando Amazon Data Firehose no puede analizar o deserializar un registro (por ejemplo, cuando los datos no coinciden con el esquema), lo escribe en Amazon S3 con un prefijo de error. Si se produce un error en la escritura, Amazon Data Firehose lo volverá a intentar para siempre, lo que bloqueará la entrega posterior. Para cada registro fallido, Amazon Data Firehose escribe un documento JSON con el siguiente esquema:

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

Ejemplo de conversión del formato de registros

Para ver un ejemplo de cómo configurar la conversión de formatos de registro con AWS CloudFormation, consulte AWS::DataFirehose: DeliveryStream.