我可以使用AWS DataPipeline在每次放置之前合并dynamoDB并编辑项目吗?

时间:2016-12-13 14:37:23

标签: amazon-web-services amazon-dynamodb emr amazon-data-pipeline

我有一个折旧的发电机表,我需要将它合并到另一个表中。这两个表的模式略有不同,因此我需要对每个项目进行一些小的工作才能将项目放入幸存的表中。

现在,我知道我总是可以创建一个lambda,将一批这些记录写入一个kinesis流,由另一个lambda监视,可以将记录放在幸存的表中,但这对我来说似乎很奇怪。 DataPipeline似乎是一个更好的解决方案,但我不确定在将项目移动到新表之前是否可以更改项目。与EMR相同。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

数据管道在其导入/导出模板中使用DynamoDB连接器的导入/导出工具将内容从源复制到目标。见https://github.com/awslabs/emr-dynamodb-connector

该工具只需启动Hadoop实现即可运行mappers / Reducers来完成您的工作。但是,该工具没有足够的控制来改变项目,也没有DynamoDB - > DynamoDB ETL。

但是,由于所有EMR集群都带有emr-dynamodb-connector库,您可以使用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;

Hive 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