Cuotas de formato de importación y validación - Amazon DynamoDB

Cuotas de formato de importación y validación

Cuotas de importación

La importación de DynamoDB desde Amazon S3 puede admitir hasta 50 trabajos de importación simultáneos con un tamaño total de objetos de origen de importación de 15 TB a la vez en las regiones us-east-1, us-west-2 y eu-west-1. En todas las demás regiones, se admiten hasta 50 tareas de importación simultáneas con un tamaño total de 1 TB. Cada trabajo de importación admite un máximo de 50 000 objetos de Amazon S3 en todas las regiones. Estas cuotas predeterminadas se aplican a todas las cuentas. Si cree que necesita revisar estas cuotas, contacte con su equipo de cuentas y se estudiará cada caso. Para obtener más información sobre los límites de DynamoDB, consulte Service Quotas.

Errores de validación

Durante el proceso de importación, DynamoDB puede encontrar errores al analizar los datos. Para cada error, DynamoDB emite un registro de CloudWatch y mantiene un recuento del número total de errores encontrados. Si el propio objeto de Amazon S3 tiene un formato incorrecto o si su contenido no puede formar un elemento de DynamoDB, podemos omitir el procesamiento de la parte restante del objeto.

nota

Si el origen de datos de Amazon S3 tiene varios elementos que comparten la misma clave, los elementos se sobrescribirán hasta que quede uno. Puede parecer que se hubiera importado un elemento y se hubieran ignorado los demás. Los elementos duplicados se sobrescribirán en orden aleatorio, no se contarán como errores y no se emitirán a los registros de CloudWatch.

Una vez finalizada la importación, podrá ver el recuento total de elementos importados, el recuento total de errores y el recuento total de elementos procesados. Para seguir resolviendo problemas, también puede verificar el tamaño total de los elementos importados y el tamaño total de los datos procesados.

Hay tres categorías de errores de importación: errores de validación de la API, errores de validación de datos y errores de configuración.

Errores de validación de la API

Los errores de validación de la API son errores en el nivel de elementos de la API de sincronización. Las causas más comunes son los problemas de permisos, la falta de parámetros necesarios y los errores de validación de los parámetros. Los detalles del motivo del error de la llamada a la API se encuentran en las excepciones generadas por la solicitud ImportTable.

Errores de validación de datos

Los errores de validación de datos pueden producirse en el nivel de elemento o en el de archivo. Durante la importación, los elementos se validan en función de las reglas de DynamoDB antes de importarlos a la tabla de destino. Cuando un elemento no supera la validación y no se importa, el trabajo de importación lo omite y continúa con el siguiente. Al final del trabajo, el estado de la importación se establece como FAILED (Error) con un FailureCode, un ItemValidationError y un FailureMessage que indica que algunos de los elementos no han superado las comprobaciones de validación y no se han importado. Consulte los registros de errores de CloudWatch para obtener más información.

Entre las causas más habituales de los errores de validación de datos se encuentran que los objetos no se puedan procesar, que los objetos estén en un formato incorrecto (la entrada especifica DYNAMODB_JSON pero el objeto no está en DYNAMODB_JSON) y que el esquema no coincida con las claves de la tabla de origen especificadas.

Errores de configuración

Los errores de configuración suelen ser errores de flujo de trabajo debidos a la validación de permisos. El flujo de trabajo de importación comprueba algunos permisos después de aceptar la solicitud. Si hay problemas para llamar a alguna de las dependencias requeridas como Amazon S3 o CloudWatch el proceso marca el estado de la importación como FAILED (Error). En failureCode y failureMessage se indica el motivo del error. Cuando sea aplicable, el mensaje de error también contiene el identificador de la solicitud que puede utilizar para investigar el motivo del error en CloudTrail.

Los errores de configuración más habituales son tener una URL incorrecta para el bucket de Amazon S3 y no tener permiso para acceder al bucket de Amazon S3, a CloudWatch Logs y a las claves AWS KMS utilizadas para descifrar el objeto de Amazon S3. Para obtener más información, consulte Uso y claves de datos.

Validación de objetos de Amazon S3 de origen

Para validar los objetos de S3 de origen, siga estos pasos.

  1. Valide el formato de datos y el tipo de compresión

    • Asegúrese de que todos los objetos de Amazon S3 coincidentes con el prefijo especificado tengan el mismo formato (DYNAMODB_JSON, DYNAMODB_ION, CSV)

    • Asegúrese de que todos los objetos de Amazon S3 coincidentes con el prefijo especificado se comprimen de la misma manera (GZIP, ZSTD, NONE)

      nota

      No es necesario que los objetos de Amazon S3 tengan la extensión correspondiente (.csv/.json/.ion/.gz/.zstd, etc.), ya que tiene prioridad el formato de entrada especificado en la llamada a ImportTable.

  2. Valide que los datos de importación se ajustan al esquema de tabla deseado

    • Asegúrese de que cada elemento de los datos de origen tiene la clave principal. La clave de clasificación es opcional para las importaciones.

    • Asegúrese de que el tipo de atributo asociado a la clave principal y a cualquier clave de clasificación coincida con el tipo de atributo de la tabla y del esquema GSI, tal como se especifica en los parámetros de creación de la tabla

Solución de problemas

Registros de CloudWatch

Para los trabajos de importación con error, se publican mensajes de error detallados en los registros de CloudWatch. Para acceder a estos registros, primero recupere ImportArn de la salida y describe-import mediante este comando:

aws dynamodb describe-import --import-arn arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658528578619-c4d4e311 }

Ejemplo de salida:

aws dynamodb describe-import --import-arn "arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658528578619-c4d4e311" { "ImportTableDescription": { "ImportArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658528578619-c4d4e311", "ImportStatus": "FAILED", "TableArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table", "TableId": "7b7ecc22-302f-4039-8ea9-8e7c3eb2bcb8", "ClientToken": "30f8891c-e478-47f4-af4a-67a5c3b595e3", "S3BucketSource": { "S3BucketOwner": "ACCOUNT", "S3Bucket": "my-import-source", "S3KeyPrefix": "import-test" }, "ErrorCount": 1, "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:ACCOUNT:log-group:/aws-dynamodb/imports:*", "InputFormat": "CSV", "InputCompressionType": "NONE", "TableCreationParameters": { "TableName": "target-table", "AttributeDefinitions": [ { "AttributeName": "pk", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "pk", "KeyType": "HASH" } ], "BillingMode": "PAY_PER_REQUEST" }, "StartTime": 1658528578.619, "EndTime": 1658528750.628, "ProcessedSizeBytes": 70, "ProcessedItemCount": 1, "ImportedItemCount": 0, "FailureCode": "ItemValidationError", "FailureMessage": "Some of the items failed validation checks and were not imported. Please check CloudWatch error logs for more details." } }

Recupere el grupo de registros y el ID de importación de la respuesta anterior y utilícelos para recuperar los registros de errores. El ID de importación es el último elemento de la ruta del campo ImportArn. El nombre del grupo de registros es /aws-dynamodb/imports. El nombre del flujo de registro de errores es import-id/error. Para este ejemplo, sería 01658528578619-c4d4e311/error.

Falta la clave pk en el elemento

Si el objeto S3 de origen no contiene la clave principal que se ha proporcionado como parámetro, se producirá un error en la importación. Por ejemplo, cuando se define la clave principal para la importación como el nombre de columna "pk".

aws dynamodb import-table —s3-bucket-source S3Bucket=my-import-source,S3KeyPrefix=import-test.csv \ —input-format CSV --table-creation-parameters '{"TableName":"target-table","KeySchema": \ [{"AttributeName":"pk","KeyType":"HASH"}],"AttributeDefinitions":[{"AttributeName":"pk","AttributeType":"S"}],"BillingMode":"PAY_PER_REQUEST"}'

Falta la columna "pk" en el objeto de origen import-test.csv que tiene el siguiente contenido:

title,artist,year_of_release The Dark Side of the Moon,Pink Floyd,1973

Se producirá un error en la importación debido a la falta de la clave principal en el origen de datos.

Registro de errores de CloudWatch de ejemplo:

aws logs get-log-events —log-group-name /aws-dynamodb/imports —log-stream-name 01658528578619-c4d4e311/error { "events": [ { "timestamp": 1658528745319, "message": "{\"itemS3Pointer\":{\"bucket\":\"my-import-source\",\"key\":\"import-test.csv\",\"itemIndex\":0},\"importArn\":\"arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658528578619-c4d4e311\",\"errorMessages\":[\"One or more parameter values were invalid: Missing the key pk in the item\"]}", "ingestionTime": 1658528745414 } ], "nextForwardToken": "f/36986426953797707963335499204463414460239026137054642176/s", "nextBackwardToken": "b/36986426953797707963335499204463414460239026137054642176/s" }

Este registro de errores indica que uno o más valores de los parámetros no eran válidos: falta la clave pk en el elemento. Como se ha producido un error en este trabajo de importación, la tabla "target-table" existe ahora y está vacía porque no se ha importado ningún elemento. Se ha procesado el primer elemento y el objeto no ha superado la validación de elementos.

Para solucionar el problema, elimine primero "target-table" si ya no es necesaria. A continuación, utilice un nombre de columna de clave principal que exista en el objeto de origen o actualice los datos de origen a:

pk,title,artist,year_of_release Albums::Rock::Classic::1973::AlbumId::ALB25,The Dark Side of the Moon,Pink Floyd,1973

La tabla de destino existe

Cuando inicie un trabajo de importación y reciba una respuesta como la siguiente:

An error occurred (ResourceInUseException) when calling the ImportTable operation: Table already exists: target-table

Para solucionar este error, tendrá que elegir un nombre de tabla que no exista ya y volver a intentar la importación.

El bucket especificado no existe

Si el bucket de origen no existe, se producirá un error en la importación y se registrarán los detalles del mensaje de error en CloudWatch.

Importación de descripción de ejemplo:

aws dynamodb —endpoint-url $ENDPOINT describe-import —import-arn "arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658530687105-e6035287" { "ImportTableDescription": { "ImportArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658530687105-e6035287", "ImportStatus": "FAILED", "TableArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table", "TableId": "e1215a82-b8d1-45a8-b2e2-14b9dd8eb99c", "ClientToken": "3048e16a-069b-47a6-9dfb-9c259fd2fb6f", "S3BucketSource": { "S3BucketOwner": "531234567890", "S3Bucket": "BUCKET_DOES_NOT_EXIST", "S3KeyPrefix": "import-test" }, "ErrorCount": 0, "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:ACCOUNT:log-group:/aws-dynamodb/imports:*", "InputFormat": "CSV", "InputCompressionType": "NONE", "TableCreationParameters": { "TableName": "target-table", "AttributeDefinitions": [ { "AttributeName": "pk", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "pk", "KeyType": "HASH" } ], "BillingMode": "PAY_PER_REQUEST" }, "StartTime": 1658530687.105, "EndTime": 1658530701.873, "ProcessedSizeBytes": 0, "ProcessedItemCount": 0, "ImportedItemCount": 0, "FailureCode": "S3NoSuchBucket", "FailureMessage": "The specified bucket does not exist (Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Request ID: Q4W6QYYFDWY6WAKH; S3 Extended Request ID: ObqSlLeIMJpQqHLRX2C5Sy7n+8g6iGPwy7ixg7eEeTuEkg/+chU/JF+RbliWytMlkUlUcuCLTrI=; Proxy: null)" } }

FailureCode es S3NoSuchBucket, con FailureMessag que contiene detalles como el ID de la solicitud y el servicio que ha generado el error. Dado que el error se ha detectado antes de importar los datos a la tabla, no se crea una nueva tabla de DynamoDB. En algunos casos, cuando estos errores se producen una vez iniciada la importación de datos, se retiene la tabla con datos parcialmente importados.

Para solucionar este error, asegúrese de que el bucket de Amazon S3 de origen existe y, a continuación, reinicie el proceso de importación.