我有一个用例,其中我想从DynamoDB中获取数据并对数据进行一些转换。之后,我想创建3个csv文件(在同一数据上将进行3个转换)并将它们转储到3个不同的s3位置。 我的体系结构如下:
是否可以这样做?我似乎找不到任何有关它的文档。如果无法使用管道,是否还有其他服务可以帮助我解决用例?
这些转储将每天安排。我的其他考虑是使用aws lamda。但是据我了解,这是基于事件的触发而不是基于时间的调度,对吗?
答案 0 :(得分:0)
是的,可以但不能使用HiveActivity代替EMRActivity。如果您查看HiveActivity的数据管道文档,它会清楚说明其用途,而不适合您的用例:
在EMR群集上运行Hive查询。 HiveActivity使得设置Amazon EMR活动和基于来自 Amazon S3或Amazon RDS 的输入数据自动自动创建Hive表变得更加容易。您只需指定要在源数据上运行的HiveQL。根据HiveActivity对象中的输入字段,AWS Data Pipeline自动使用$ {input1},$ {input2}等创建Hive表。
下面是数据管道的外观。 UI中还有一个用于AWS Data Pipeline的内置模板Export DynamoDB table to S3
,可为您创建基本结构,然后您可以进行扩展/自定义以满足您的要求。
对于使用 Lambda 的下一个问题,当然可以将lambda配置为具有基于事件的触发或基于计划的触发,但是我不建议使用{{1 }}进行任何ETL操作,因为它们受时间限制 且通常的ETL超过了lambda时间限制。
AWS为ETL AWS Lambda
和AWS Data Pipeline
提供了针对ETL的特定优化功能产品,我始终建议您在两者之一中进行选择。如果您的ETL涉及不在AWS计算和存储服务中管理的数据源,或者上述两个选项无法满足任何特殊用例,那么我将考虑AWS Glue
。
答案 1 :(得分:0)
感谢您的回答。我已经忙了一段时间了。在您发布答案后,我做了一些挖掘工作。事实证明,我们也可以使用Hive活动将数据转储到不同的s3位置。
在这种情况下,数据管道就是这样。
但是我相信当您的输入源是DynamoDB表时,编写多个配置单元活动不是一个好主意,因为配置单元不会在内存中加载任何数据。它对实际表进行所有计算,这可能会降低表的性能。甚至文档也建议导出数据,以防您需要对同一数据进行多个查询。 Reference
输入一个Hive命令,该命令将Hive应用程序中的表映射到DynamoDB中的数据。该表用作对存储在Amazon DynamoDB中的数据的引用;数据不会存储在本地Hive中,并且使用此表进行的任何查询都将针对DynamoDB中的实时数据运行,从而在每次运行命令时都会消耗该表的读写容量。如果您希望对同一个数据集运行多个Hive命令,请考虑首先将其导出。
就我而言,我每天需要对同一数据执行不同类型的聚合。由于dynamoDB不支持聚合,因此我转向了使用Hive的数据管道。最后,我们最终使用了基于My-SQL的AWS Aurora。