He creado un flujo de datos de Kinesis y estoy ingresando registros que tienen un formato como este:
{ "ufo": 5, "unicorn": 7, "something else": 9, }Estoy tratando de escribir una transformación lambda que transformará el registro anterior e insertará tres registros en Redshift. El esquema de la tabla Redshift es así:
CREATE TABLE my_table( timestamp DATETIME, name TEXT, count INT ) SORTKEY(timestamp);Entonces, en esencia, a partir de un solo registro de Kinesis, necesito producir tres filas en Redshift.
La documentación de la transformación lambda no explica si lo que estoy tratando de lograr es posible. Ya intenté envolver toda la carga útil dentro de la matriz antes de codificar, pero esto da como resultado un error de procesamiento al final de Redshift. También traté de devolver varios registros con la misma identificación de registro; esto también da como resultado un error.
Encontré este fragmento de documentación que muestra que se pueden almacenar varios objetos JSON en un solo archivo JSON alimentado por el comando COPY. Según la documentación, puede haber más de un objeto JSON dentro del archivo y solo se deben colocar caracteres blancos entre los objetos JSON.
Así que dejé caer objetos como este:
{"timestamp": "2020/07/17 00:00:00", "name": "ufo", "count": 5} {"timestamp": "2020/07/17 00:00:00", "name": "unicorn", "count": 7} {"timestamp": "2020/07/17 00:00:00", "name": "something else", "count": 9}Es bastante confuso depurar esto ya que AWS está reintentando los registros fallidos: agregué una nueva línea entre los objetos (que es lo que se sugiere en la documentación) y al principio pensé que estaba recibiendo errores, pero los errores eran por reintentos anteriores.