2017-05-04 5 views
1

In meinem Cloudformation-Skript erstelle ich eine Dynamo-DB-Tabelle (Datasets) mit zwei Schlüsseln - nennen wir sie CatalogId und DatasetId. Sie sind beide URIs, die außerhalb meiner Kontrolle liegen, aber es genügt zu sagen, dass sie zusammen eine eindeutige ID bilden.Ungültiges KeySchema: Das zweite KeySchemaElement ist kein RANGE-Schlüsseltyp

Ich habe beide HASH-Schlüssel im primären KeySchema/Index gemacht. Als ich das tat, gab CF mir den folgenden Fehler:

Invalid KeySchema: The second KeySchemaElement is not a RANGE key type 

Was mache ich falsch?

Antwort

1

Die Antwort ist, dass nur einer der Schlüssel ein HASH-Schlüssel im Primärindex sein kann. Der zweite Schlüssel muss vom RANGE-Typ sein, auch wenn Sie niemals einen Vergleich mit> oder < planen. Ich würde es lieben, wenn jemand näher erläutern könnte, warum ich nicht zwei HASH-Schlüssel haben kann. Warum verknüpft Dynamo nicht einfach die beiden Schlüssel intern und erstellt einen Primärschlüssel?

2

Wie Sie erwähnt haben, hat DynamoDB diese Option nicht. Er erwartet, dass der Client als String verkettet wird, und speichert diesen Wert in einem Feld (d. H. Hash-Schlüssel im obigen Fall).

Falls Sie diese Attribute noch als separate Felder benötigen, können Sie diese als Nicht-Schlüsselattribute einzeln speichern.

Q: Are composite attribute indexes possible?

No. But you can concatenate attributes into a string and use this as a key.

Beispiel: -

  1. Vor- und Nachname als zusammengesetzte Schlüssel
  2. Concatenate Vor- und Nachnamen und zu speichern, die als Hash-Schlüssel
  3. Speichern der erste Name als nicht Schlüsselattribut
  4. Speichern Sie den Nachnamen als Nicht-Schlüsselattribut

Ich weiß, es ist wenig überflüssig. Dies ist nur ein Workaround, um die Dinge klar zu halten.

Verwandte Themen