如何将数据从 Glue 移动到 Dynamodb

Posted

技术标签:

【中文标题】如何将数据从 Glue 移动到 Dynamodb【英文标题】:How to move data from Glue to Dynamodb 【发布时间】:2018-08-10 08:08:53 【问题描述】:

我们正在为我们的一个仪表板应用程序设计一个大数据解决方案,并认真考虑将 Glue 用于我们的初始 ETL。目前 Glue 支持 JDBC 和 S3 作为目标,但我们的下游服务和组件将更好地与 dynamodb 配合使用。我们想知道最终将记录从 Glue 移动到 Dynamo 的最佳方法是什么。

我们是否应该先写入 S3,然后运行 ​​lambdas 将数据插入 Dynamo?这是最佳做法吗?要么 我们是否应该为 Dynamodb 使用第三方 JDBC 包装器并使用 Glue 直接写入 Dynamo(不确定这是否可能,听起来有点吓人)或者 我们应该做点别的吗?

非常感谢任何帮助。谢谢!

【问题讨论】:

【参考方案1】:

您可以将以下行添加到您的 Glue ETL 脚本中:

    glueContext.write_dynamic_frame.from_options(frame =DynamicFrame.fromDF(df, glueContext, "final_df"), connection_type = "dynamodb", connection_options = "tableName": "pceg_ae_test")

df 应该是 DynamicFrame 类型

【讨论】:

“AWS Glue 当前不支持写入 Amazon DynamoDB。” docs.aws.amazon.com/glue/latest/dg/… 通过阅读文档,我认为我不能直接写入 dynamodb,但我尝试了上面的脚本,它确实有效 嘿,我想更新一个条目,如果它已经存在于 dynamodb 中,我该如何实现呢?当已经存在具有相同主键的条目时,glueContext.write_dynamic_frame 失败。请帮忙 官方只有 Glue 版本 1 兼容 write on dynamodb【参考方案2】:

我可以使用 boto3 进行编写...绝对不是最好的加载方法,而是它的工作方法。 :)

dynamodb = boto3.resource('dynamodb','us-east-1') table = 
dynamodb.Table('BULK_DELIVERY')

print "Start testing"

for row in df1.rdd.collect():
    var1=row.sourceCid 
    print(var1) table.put_item( Item='SOURCECID': "".format(var1) )

print "End testing"

【讨论】:

【参考方案3】:

对于您的工作负载,Amaon 实际上建议使用 data pipelines。

它绕过胶水。所以它主要用于将 S3 文件加载到 Dynamo。但它可能会起作用。

【讨论】:

以上是关于如何将数据从 Glue 移动到 Dynamodb的主要内容,如果未能解决你的问题,请参考以下文章

我应该每次都运行 Glue 爬虫来获取最新数据吗?

在 AWS Glue 中转换其他列的数据类型时,某些列变为空

当我们使用 Glue 将数据从 DocumentDb 转储到 Redshift 时,从 Redshift 获取字符串而不是数组

如何编写 AWS Glue 脚本以将新数据插入 Redshift 表

将 Parquet 文件从 AWS Glue 加载到 Redshift

将 AWS Glue 作业迁移到 EC2