如何将数据从 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的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS Glue 中转换其他列的数据类型时,某些列变为空
当我们使用 Glue 将数据从 DocumentDb 转储到 Redshift 时,从 Redshift 获取字符串而不是数组
如何编写 AWS Glue 脚本以将新数据插入 Redshift 表