Salta al contenuto

Come posso risolvere l'errore "provided key element does not match the schema" in DynamoDB?

3 minuti di lettura
0

Quando provo a eseguire una richiesta getItem per la mia tabella Amazon DynamoDB, ricevo il seguente errore: "provided key element does not match the schema".

Breve descrizione

L'errore può verificarsi per i motivi seguenti:

  • Hai specificato il tipo di dati errato per la chiave.
  • Hai denominato gli attributi in modo errato.
  • Hai specificato solo una parte di una chiave.
  • I dati vengono scritti nella tabella sbagliata.
  • È presente una chiave aggiuntiva non necessaria.
  • Esegui una richiesta GetItem per cercare di ottenere un intervallo di elementi anziché un singolo elemento.
  • La tabella ha una chiave primaria composita, esegui una richiesta GetItem e non specifichi la chiave di partizione e la chiave di ordinamento.
  • La tabella non ha una chiave di ordinamento, esegui una richiesta GetItem e specifichi solo una chiave di partizione.

Risoluzione

Rivedi Il tipo di dati della chiave primaria e della chiave di ordinamento

Affinché il comando GetItem abbia esito positivo, i dati primari e della chiave di ordinamento devono essere dello stesso tipo di dati dei dati della tabella DynamoDB. Nel seguente esempio di comando, la chiave di ordinamento Year ha un tipo di dati stringa (S):

aws dynamodb get-item --table-name Key-Element --key '{"EventID":{"S":"test-item01"}, "Year":{"S":"2024"}}'

Poiché la tabella utilizza un tipo di dati numerico (N), ricevi il seguente messaggio di errore:

"An error occurred (ValidationException) when calling the GetItem operation: The provided key element does not match the schema"

Esegui invece questo comando che utilizza il tipo di dati numerico:

aws dynamodb get-item --table-name Key-Element --key '{"EventID":{"S":"test-item01"}, "Year":{"N":"2024"}}'

Ottieni un output simile al seguente:

{
    "Item": {
        "EventID": {
            "S": "test-item01"
        },
        "Year": {
            "N": "2024"
        },
        "Works?": {
            "N": "1"
        }
    }
}

Scegli un'operazione in base al caso d'uso

Utilizza l'operazione BatchGetItem o GetItem

Quando recuperi i dati dalle tabelle DynamoDB, puoi utilizzare le operazioni Getitem o BatchGetitem. L'operazione GetItem recupera un record alla volta. La richiesta deve includere lo schema della chiave della tabella.

L'operazione BatchGetItem richiede che venga fornita la chiave di partizione per le tabelle che hanno solo una chiave di partizione. Per le tabelle che dispongono di una chiave primaria composita, devi fornire la chiave di partizione e la chiave di ordinamento quando utilizzi BatchGetItem.

Utilizza l'operazione Query

Per recuperare i dati quando non specifichi una chiave di ordinamento, utilizza l'operazione Query. Poiché Query consente di specificare solo la chiave di partizione quando recuperi i dati, utilizza questa operazione per le tabelle con una chiave primaria composita.

Utilizza l'API Scan di DynamoDB

Per cercare dati in base a un attributo non chiave, utilizza l'API Scan di DynamoDB. L'operazione Scan consente di utilizzare una proprietà FilterExpression per filtrare i dati in base a qualsiasi attributo senza necessità di specificare la chiave primaria.

Per utilizzare un attributo non chiave per cercare dati, opta per una ricerca nidificata all'interno di FilterExpression. Ad esempio, per cercare elementi con un attributo userId nell'attributo Data nidificato che corrisponde a un valore specifico, utilizza la seguente espressione:

"Data.userId": your_expression_values."

Importante: poiché l'operazione diScan esegue un'iterazione su tutti gli elementi per verificare se la condizione del filtro è soddisfatta, può comportare facilmente costi. Se devi utilizzare l'operazione Scan, aggiungi la paginazione quando esegui la scansione di tabelle di grandi dimensioni. L'API Scan restituisce solo fino a 1 MB di dati per chiamata. Usa la paginazione per scansionare solo i nuovi dati.

AWS UFFICIALEAggiornata un anno fa