DynamoDB Tutorial
Einführung
In diesem Artikel wird beschrieben, wie man mit folgenden Prozessoren eine Verbindung zu einer AWS DynamoDB Datenbank herstellen kann.
-
PutDynamoDB (bzw. PutDynamoDBRecord) um Daten in eine Tabelle einzutragen.
-
GetDynamoDB um Daten aus einer Tabelle abzurufen.
-
DeleteDynamoDB um Daten aus einer Tabelle zu löschen.
Voraussetzungen
Um die DynamoDB Prozessoren nutzen zu können braucht man allem voran eine bereits bestehende AWS DynamoDB Tabelle. Um eine Verbindung zu dieser herzustellen, müssen folgende Voraussetzungen gegeben oder bekannt sein:
-
den Namen/ die Adresse der DynamoDB Tabelle die angesteuert werden soll.
-
eine Form der Authentifizierung für AWS
-
Den Namen der Hash und Range Keys der Tabelle.
Authentifizierung
Für die Authentifizierung empfehlen wir die Nutzung des Services AWSCredentialsProviderControllerService.
Alternativ können die Authentifizierungsdaten auch direkt in den einzelnen Prozessoren angeben werden.
Auch wenn die Authentifizierung für die Prozessoren über den AWSCredentialsProviderControllerService läuft, muss in den Prozessoren immer der richtige Wert für die Property "Region" gegeben sein. |
Grundlegende Put und Get Operationen
In diesem Absatz wird die grundlegende Funktionsweise der PutDynamoDB- und GetDynamoDB-Prozessoren erklärt. Dafür betrachten wir folgendes kleines Beispiel.
DynamoDB ist eine NoSQL Datenbank. Daten werden hier mittels eines Primären (Hash Key) und eines sekundären (Range Key) Schlüssels gespeichert. |
Gegeben ist eine DynamoDB-Tabelle, in der Informationen über Nutzer gespeichert werden sollen. Die Tabelle hat einen Hash Key und einen Range Key:
-
Hash key:
User
-
Range Key:
Range
Nun möchten wir mittels des PutDynamoDB-Prozessors grundlegende Informationen über unsere Nutzer in die Tabelle eintragen. In diesem Beispiel nehmen wir an, dass die Informationen in Form eines JSON Objekts gegeben sind:
{
"name" : "Max",
"surname" : "Mustermann",
"email" : "max.muster@mustermail.com",
"phone": "+49 (0)123 456789"
}
Um diese Daten nun in der DynamoDB Tabelle zu speichern, setzen wir dieses Objekt als Content eines FlowFiles. Zusätzlich benötigt das FlowFile folgende attribute für Hash und Range Key:
-
dynamodb.item.hash.key.value
-
dynamodb.item.range.key.value
In diesem Beispiel verwenden wir für den Hash Key die E-Mail des Users und als Range key den string info
.
Hier sehen sie wie man ein entsprechendes FlowFile mittels eines GenerateFlowFile
Prozessors generiert werden kann.
Nun müssen wir noch den PutDynamoDB
Prozessor konfigurieren.
Dafür müssen wir zusätzlich zu den bereits bekannten Eigenschaften außerdem den Namen des Attributs angeben, unter dem die eingehenden Daten gespeichert werden sollen.
Dies geschieht mittels der Property Json Document Attribute
.
In diesem Beispiel nennen wir dieses Attribut einfach data
.
Sowohl PutDynamoDB als auch |
PutDynamoDB
Eine Konfiguration für einen PutDynamoDB
Prozessor könnte dann so aussehen:
Verwendet man nun diese Konfiguration wie folgt in einem Flow zusammen mit dem zuvor generierten FlowFile, werden die Daten in der Tabelle eingefügt (bzw. geändert, wenn sie bereits existieren).
Bei einem erfolgreichen ausführen wird das FlowFile ohne Änderung an die Success Relation weitergeleitet.
Nach dem Ausführen könnte die Tabelle wie folgt aussehen:
User | Range | data |
---|---|---|
info |
|
GetDynamoDB
Der GetDynamoDB-Prozessor funktioniert analog zum PutDynamoDB-Prozessor. Eine Konfiguration könnte wie folgt aussehen.
Wie zuvor werden Hash Key, Range Key und Attribut aus den (FlowFile-) Attributen eines eingehenden FlowFiles gelesen.
Sind die entsprechenden Daten in der Tabelle vorhanden, werden diese als Content in das FlowFile eingetragen und dieses and die Success Relation geleitet.
Falls die Daten nicht in der Tabelle zu finden sind, wird das FlowFile stattdessen an die not found
Relation weitergeleitet.
Die Property |
Daten aus der Datenbank löschen
Um Daten aus der Tabelle zu löschen, benutzt man den DeleteDynamoDB-Prozessor. Wie zuvor geben hier die Attribute eines eingehenden FlowFiles den Hash- und Range Key der zu löschenden Daten an. Hierbei werden alle Attribute der entsprechenden Daten gelöscht.
Die Konfiguration ist dabei analog zum GetDynamoDB-Prozessor.
Spezialfall PutDynamoDBRecord
Der PutDynamoDBRecord
Prozessor erlaubt es mehrere Daten (im Record Format) auf einmal in die Datenbank zu schreiben.
Dabei können Daten sowohl mit unterschiedlichen Range Keys als auch mit unterschiedlichen Attributen gleichzeitig geschrieben werden.
Die Daten müssen dafür in einem Format gegeben sein, das von einem Record Reader eingelesen werden kann, und müssen je nach Anwendung im richtigen Format gegeben sein.
Da Properties dieses Prozessors unterscheiden sich deutlich von den Konventionen der vorher erklärten Prozessoren, hierbei gilt.
-
Partition Key Field
ist der Name des Hash Keys der Tabelle. In unserem Fall alsoUser
. -
Sort Key Field
ist der Name des Range Keys der Tabelle. In unserem Fall alsoRange
.
Für beide Keys ist es möglich, diese dynamisch und mit unterschiedlichen Strategien zu bestimmen.
-
Der Hash Key kann entweder wie gehabt als FlowFile Attribut gegeben sein, als Feld aus dem eingehenden Record gelesen werden oder dynamisch aus einer UUID erzeugt werden.
-
Der Range Key kann entweder weggelassen werden (nur möglich bei Tabellen ohne Range Key), aus einem Feld im eingehenden Record gelesen werden oder mittels eines Counters erstellt werden.
Beispiel
Wir verwenden wie zuvor eine Tabelle mit:
-
Hash Key:
User
-
Range Key:
Range
In diesem Beispiel wollen wir für unseren Nutzer neben grundlegenden Informationen auch Zahlungsinformationen speichern. Wir haben also nicht nur ein, sondern 2 JSON Objekte, die wir speichern wollen. Damit wir diese mit dem PutDynamoDBRecord-Prozessor verwenden können müssen wir sie in das richtige Format bringen:
[
{
"Range" : "info",
"data" : {
"name" : "Max",
"surname" : "Mustermann",
"email" : "max.muster@mustermail.com",
"phone": "+49 (0)123 456789"
}
},
{
"Range" : "payment",
"paymentMethod" : "credit card",
"data" : {
"paymentMethod": "credit card",
"lastFourDigits": "5678",
"expirationDate": "12/28",
"billingZip": "54321"
}
}
]
Dies ist eine Liste mit 2 Records, die beide in die Tabelle eingetragen werden sollen.
Da beide Records denselben Hash Key haben, werden wir diesen mittels eines Attributes im FlowFile angegeben.
Dafür verwenden wir wieder das Attribut dynamodb.item.hash.key.value
und setzten den Wert auf die E-Mmail max.muster@mustermail.com
.
Der Range Key wird hier durch die Felder Range
in den Records angegeben und jedes weitere Record-Field wird als Attribut verwendet.
(Der Name dieses Feldes muss dem Namen der Sort Key Field
Property entsprechen)
In diesem Beispiel heißt das:
Der erste Record in der Liste wird in der Datenbank mit dem Hash Key max.muster@mustermail.com
und Range Key info
eingetragen und ein Attribut mit dem Namen data
haben.
Für den Zweiten Record mit dem Range Key payment
wird zusätzlich zu dem data
Attribut außerdem das Attribut paymentMethod
eingetragen.
Die entsprechende Konfiguration für den PutDynamoDBRecord-Prozessor: