1

Ich habe eine Dynamo-Tabelle, die abgeschrieben hat und ich muss es in eine andere Tabelle zusammenführen. Das Schema für die beiden Tabellen ist etwas anders, und daher muss ich an jedem Element etwas arbeiten, bevor ich Elemente in die überlebende Tabelle einfügen kann.Kann ich mit AWS DataPipeline DynamoDBs zusammenführen und Elemente vor jedem Einfügen bearbeiten?

Jetzt weiß ich, dass ich immer ein Lambda erstellen könnte, das einen Stapel dieser Datensätze in einen Kinesis-Stream schreibt, der von einem anderen Lambda überwacht wird, der die Datensätze in die überlebende Tabelle schreiben könnte, aber das scheint mir verdächtig. DataPipeline scheint eine bessere Lösung zu sein, aber ich bin mir nicht sicher, ob ich Elemente ändern kann, bevor sie in die neue Tabelle verschoben werden. Gleiches mit EMR.

Irgendwelche Vorschläge würden geschätzt.

Antwort

0

Datenpipeline verwendet in der Import/Export-Vorlage das Import/Export-Tool des DynamoDB-Connectors, um Inhalte von der Quelle zum Ziel zu kopieren. Siehe https://github.com/awslabs/emr-dynamodb-connector

Das Tool startet einfach die Hadoop-Implementierung, um Mapper/Reducers für Ihre Arbeit zu verwenden. Das Tool verfügt jedoch nicht über genügend Kontrolle, um Elemente zu ändern, noch über eine DynamoDB -> DynamoDB-ETL.

Da alle EMR-Cluster mit emr-dynamodb-connector-Bibliotheken ausgestattet sind, können Sie entweder HIVE/SPARK verwenden, um eigene DDLs und DMLs zu erstellen, um DynamoDB -> DynamoDB (dieselbe AWS-Region) zu kopieren. Wenn Sie die korrekten DML-Werte schreiben, können Sie sogar Daten zwischen zwei DynamoDB-Tabellen mit unterschiedlichen Schemas kopieren, indem Sie Ihre eigenen Klauseln verwenden. Sie können diese Skripts später so automatisieren, dass sie auf EMR-Ressourcen ausgeführt werden, die von Data-pipeline nach einem Zeitplan erstellt wurden.

Der presudo Code für hql zum anderen aus einer Tabelle kopieren kann so einfach sein wie:

CREATE EXTERNAL TABLE dynamodb_table (`ID` STRING,`DateTime` STRING) 
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
TBLPROPERTIES ("dynamodb.table.name" = "ddb-table-1", "dynamodb.column.mapping" = "ID:ID,DateTime:DateTime"); 

CREATE EXTERNAL TABLE dynamodb_table2 (`ID` STRING,`DateTime` STRING) 
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
TBLPROPERTIES ("dynamodb.table.name" = "ddb-table-2", "dynamodb.column.mapping" = "ID:ID,DateTime:DateTime"); 

INSERT OVERWRITE TABLE dynamodb_table SELECT * FROM dynamodb_table2; 

Hive DDL und DML können Syntax des hier: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML

auf einige Beispiele Verwenden von DynamoDB-Speicherroutinen für EMR:

http://docs.aws.amazon.com/emr/latest/ReleaseGuide/EMR_Hive_Commands.html http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.html

Verwandte Themen