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

Posted

技术标签:

【中文标题】我可以使用 AWS Data Pipeline 在每次放置之前合并 dynamoDB 和编辑项目吗?【英文标题】:Can I use AWS DataPipeline to merge dynamoDBs and edit items before each put? 【发布时间】:2016-12-13 14:37:22 【问题描述】:

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

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

任何建议将不胜感激。

【问题讨论】:

【参考方案1】:

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

该工具只需启动 Hadoop 实现以运行映射器/缩减器来完成您的工作。但是,该工具没有足够的控制权来更改项目,也没有 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

【讨论】:

以上是关于我可以使用 AWS Data Pipeline 在每次放置之前合并 dynamoDB 和编辑项目吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Data Pipeline 在 AWS 中进行批处理文件

AWS Data Pipeline 无法验证 S3 访问 [权限警告]

在 AWS Data Pipeline 中创建聚合表

什么是 AWS Data Pipeline

AWS Data Pipeline 在 emr 活动步骤部分中转义逗号

AWS Data Pipeline DynamoDB 到 S3 到 Redshift,包括 JsonPaths