2016-02-15 6 views
6

Könnte jemand mir bitte sagen, was ein gültiger Schlüssel Bedingung Ausdruck wäre. Ich versuche, eine Abfrage für eine einfache Tabelle namens MyKeyTable auszuführen. Es hat zwei "Spalten", nämlich Id und AnotherNumberThatICareAbout vom Typ Long.Was ist ein gültiger dynamodb key-condition-expression für den cli

würde Ich mag alle Werte sehen, die ich in setzen Also habe ich versucht.

aws dynamodb query --select ALL_ATTRIBUTES --table-name MyKeyTable 
--endpoint http://localhost:8000 
--key-condition-expression "WHAT DO I PUT IN HERE?" 

Welche Hash muss ich in setzen? Die Docs sind ein wenig lahm auf diesem Imho. Jede Hilfe wird geschätzt, auch wenn es nur ein Link zu einem guten Dokument ist.

Antwort

2

erstellen eine Datei mit Ihrem Schlüssel: test.json

{ 
    "yourHashKeyName": {"S": "abc"}, 
    "YourRangeKey": {"S": "xyz"} //optional 
} 

Run

aws dynamodb query --table-name "your table name" --key-conditions file://test.json 

verweisen: http://docs.aws.amazon.com/cli/latest/reference/dynamodb/query.html

die Tabelle

Zum Scannen
aws dynamodb scan --table-name "you table name" 

Keine Notwendigkeit, passieren alle Schlüssel, wie wir gesamte Tabelle zu scannen sind (Anmerkung: Es wird maximal 1 MB Daten erhalten)

siehe: http://docs.aws.amazon.com/cli/latest/reference/dynamodb/scan.html

+0

MyHashKey - Ihre Hash-Schlüsselwert wäre und hier habe ich als String als Referenz und "abc" genommen wird der Wert des Hash-Schlüssels –

+0

In Ihrer Frage haben Sie die Abfrage, warum ich das verwendet habe, ich werde meine Frage für den Scan auch –

+0

aktualisieren Dafür kann man Scan verwenden, habe ich die Antwort aktualisiert –

4

Hier ist ein Kommandozeilen-only Ansatz, den Sie ohne Zwischendateien verwenden können.

Zuerst Gebrauchswert Platzhalter Ihre Schlüsselbedingung Ausdruck zu konstruieren, zum Beispiel

--key-condition-expression "Id = :idValue" 

(Setzen Sie den Doppelpunkt-Präfix für Platzhalter nicht vergessen!)

Als nächstes konstruieren einen Ausdruck -attribute-values ​​Argument. Beachten Sie, dass ein JSON-Format erwartet wird. Das knifflige Bit, das ich immer versuche zu vergessen, ist, dass man nicht einfach 42 für eine Nummer oder "foo" für einen String einstecken kann. Sie müssen DynamoDb den Typ und den Wert mitteilen. Ref AWS docs für die vollständige Aufschlüsselung, wie Sie die Wertspezifikation formatieren können, die ziemlich komplex sein kann, wenn Sie es benötigen.

Für Windows können Sie Anführungszeichen darin durch Verdoppelung von ihnen, z.,

--expression-attribute-values "{"":idValue"":{""N"":""42""}}" 

Für MacOS/Linux, Apostroph um die JSON erforderlich:

--expression-attribute-values '{":idValue":{"N":"42"}}' 
+1

Danke dafür! Die Verwendung von einfachen Anführungszeichen um den JSON herum könnte es etwas einfacher machen zu lesen: '--expression-attribute-values ​​'{": idValue ": {" N ":" 42 "}}' –

+0

Hmm .. stimme definitiv zu besser lesbar, nur versucht es in Vorbereitung auf diese Antwort zu aktualisieren, und zumindest auf Windows mag es nicht - bricht nach dem ersten Doppelzitat –

+1

Oh bummer, das war auf OS X und Linux. –

Verwandte Themen