DynamoDB Streams: TrimmedDataAccessException

TL;DR — DynamoDB Streams mantiene el registrords durante 24 horas; Las records antiguas se recortan y se eliminan de la transmisión. Esta excepción significa que usted solicitó una posición que ha sido recortada: un punto de control con más de un día de antigüedad, generalmente de un consumidor que estaba caído o atrasado. No puedes recuperar esos records de la transmisión: reanuda desde TRIM_HORIZON (el registro superviviente más antiguo) y concilia la brecha con la tabla misma.

Qué significa

TrimmedDataAccessException: The data you are trying to access has been trimmed.

A diferencia de un iterador caducado — donde solo tu identificador de posición quedó obsoleto — los datos recortados se eliminan de verdad. Solicitar un iterador de shard en un SequenceNumber recortado, o leer un shard cuyos registros han envejecido, lanza esto. El stream es un búfer móvil de 24 horas, no un archivo.

Por qué ocurre

  • El consumidor estuvo caído más de 24 horas — una interrupción, un worker en pausa, un trigger deshabilitado olvidado — y su checkpoint apunta ahora a territorio recortado.
  • El retraso de procesamiento superó la retención — el consumidor se ejecuta, pero más lento que la tasa de escritura, y se desvió más de un día.
  • Un checkpoint almacenado obsoleto — reiniciar un consumidor antiguo con un SequenceNumber persistido hace semanas.
  • Leer un shard antiguo de extremo a extremo — recorrer el linaje de shards de un stream de larga duración y solicitar rangos anteriores a la retención.

Cómo solucionarlo

  1. Reanuda desde el registro disponible más antiguo y acepta el hueco:

    const {ShardIterator} = await streams.send(
      new GetShardIteratorCommand({
        StreamArn: streamArn,
        ShardId: shardId,
        ShardIteratorType: 'TRIM_HORIZON' // oldest untrimmed record
      })
    );

    Usa LATEST en su lugar si solo importa la actividad nueva.

  2. Reconcilia la ventana perdida desde la fuente de verdad — la tabla aún tiene el estado actual de cada Item. Un Scan/Query acotado sobre las claves afectadas (o una exportación para tablas grandes) reconstruye lo que los registros recortados te habrían dicho, menos las versiones intermedias.

  3. Alerta sobre el retraso del consumidor — monitoriza la antigüedad de los registros que estás procesando (o la métrica IteratorAge de Lambda) y avisa mucho antes de que se acerque a las 24 horas.

  4. ¿Necesitas más retención? Vierte el stream en un búfer duradero a medida que llegan los registros (p. ej. Kinesis Data Streams mediante patrones del adaptador de Kinesis, o persiste tú mismo los registros procesados) — DynamoDB Streams en sí no se puede extender más allá de las 24 horas.

  5. Reinicia el checkpoint tras la recuperación. Persiste el nuevo SequenceNumber obtenido desde TRIM_HORIZON para que el consumidor no reanude en la antigua posición recortada al arrancar.

En DynoTable

Tras un hueco por recorte, reconcilia el estado actual de los Items desde la tabla — ábrela con ⌘K y navega o filtra las claves que tu consumidor se perdió. DynoTable muestra los datos vivos de la tabla, con independencia de la ventana de 24 horas del stream.

Dimensiona la lectura de recuperación con la calculadora de precios. Copia el LatestStreamArn de la tabla desde el panel de metadatos antes de reiniciar el consumidor. Cambia de perfil con ⌘P; consulta Conectar con AWS e Instalación.

Fuentes

Errores relacionados

Referencias

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

Un cliente de escritorio rápido para DynamoDB que ejecuta el SQL real que DynamoDB no puede — JOINs, GROUP BY, agregaciones — con edición visual y un agente de IA con tus propias claves de Bedrock.

Prueba gratuita de 30 días, sin tarjeta — después, el plan Free sin límite de tiempo.