1

我有一個貶值的發電機表,我需要將它合併到另一個表。兩個表格的模式略有不同,因此我需要在每個項目上做一些小的工作,然後才能將項目放入尚存表格中。現在我可以在每次投入前使用AWS DataPipeline合併dynamoDB並編輯項目嗎?

,我知道,我總是可以創建一個寫一個批處理的這些記錄必須清楚交代另一拉姆達,可以把記錄尚存表看了室壁運動流的拉姆達,但這似乎缺憾給我。 DataPipeline似乎是一個更好的解決方案,但我不確定在移動到新表之前是否可以更改項目。與EMR一樣。

任何建議,將不勝感激。

回答

0

數據管道在其導入/導出模板中使用DynamoDB連接器的導入/導出工具將內容從源複製到目標。請參閱https://github.com/awslabs/emr-dynamodb-connector

該工具只是啓動Hadoop實現來運行mappers/Reducers來完成您的工作。但是,該工具沒有足夠的控制權來更改項目,也沒有DynamoDB - > DynamoDB ETL。

但是,由於所有EMR羣集都帶有emr-dynamodb連接器庫,您可以使用HIVE/SPARK編寫自己的DDL和DML來複制DynamoDB - > DynamoDB(相同的AWS區域)。如果您編寫的DML是正確的,那麼您甚至可以使用自己的子句在具有不同模式的兩個DynamoDB表之間複製數據。您可以稍後自動化這些腳本以按計劃在由Data-pipeline創建的EMR資源上運行。

的HQL從一個表複製到另一個可以是簡單的presudo代碼:

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; 

蜂房DDL的和DML語法的可以在這裏找到: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML

一些例子上在EMR上使用DynamoDB存儲處理程序:

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

相關問題