如何使用 AWS Glue 将数据从 Amazon S3 复制到 DDB

问题描述 投票:0回答:2

我正在关注 AWS 文档,了解如何将 DDB 表从一个账户转移到另一个账户。有两个步骤:

  1. 将 DDB 表导出到 Amazon S3
  2. 使用 Glue 作业从 Amazon S3 存储桶读取文件并将其写入目标 DynamoDB 表

我能够迈出第一步。不幸的是,说明没有说明如何执行第二步。我已经使用过 Glue 几次,但是控制台 UI 对用户非常不友好,我不知道如何实现它。

有人可以解释一下如何将数据从S3导入到DDB吗?

amazon-web-services aws-glue
2个回答
0
投票

您可以使用 Glue studio 生成脚本。

  1. 登录AWS

  2. 转到胶水

  3. 前往胶水工作室

  4. 设置源,基本上指向S3 然后使用类似下面的内容,这是一个 dynamo 数据库,其中 pk 和 sk 作为复合主键

这只是映射到 Dataframe 并将其写入 DynamoDB

      ApplyMapping_node2 = ApplyMapping.apply( 
        frame=S3bucket_node1, 
        mappings=[ 
        ("Item.pk.S", "string", "Item.pk.S", "string"), 
        ("Item.sk.S", "string", "Item.sk.S", "string") 
        ], 
          transformation_ctx="ApplyMapping_node2"  
        )
            
      S3bucket_node3 = glueContext.write_dynamic_frame.from_options( 
        frame=ApplyMapping_node2, 
        connection_type="dynamodb", 
        connection_options={"dynamodb.output.tableName": "my-target-table"}
       }


0
投票

我刚刚使用 AWS Glue 来实现此目的。您需要为 Glue 服务创建一个新的 IAM 角色,它应该有权访问 S3 和 DynamoDB。

  1. 将源 dynamo 表数据导出到 S3 存储桶
  2. 转到 AWS Glue 并创建一个新作业。
  3. 将源设置为您的 S3 存储桶并设置数据目录的路径(例如 s3:/your-bucket-name/AWSDynamoDB/01234562352725-cb24aab6/data/)
  4. 创建具有以下结构的自定义转换脚本:
def MyTransform(glueContext, dfc) -> DynamicFrameCollection:
    S3bucket_node = dfc["AmazonS3_node123456789"]
    
    ApplyMapping_node2 = ApplyMapping.apply( 
        frame=S3bucket_node, 
        mappings=[ 
            ("Item.digest.S", "string", "digest", "string"),
            ("Item.locale.S", "string", "locale", "string"),
            ("Item.value.S", "string", "value", "string"),
            ("Item.translation.S", "string", "translation", "string"),
            ("Item.created_at.S", "string", "created_at", "string"),
        ], 
          transformation_ctx="ApplyMapping_node2"  
        )
        
            
    S3bucket_node3 = glueContext.write_dynamic_frame.from_options( 
        frame=ApplyMapping_node2, 
        connection_type="dynamodb", 
        connection_options={"dynamodb.output.tableName": "<destination-dynamo-tablename>"}
       )
    
    return DynamicFrameCollection({"S3bucket_node3": S3bucket_node3}, glueContext)

将“AmazonS3_node123456789”替换为您的 S3 节点 ID(您可以在脚本中找到您的 ID)并将映射列表替换为您的表字段。另外,不要忘记将“destination-dynamo-tablename”替换为您的 dynamo 表名称。

© www.soinside.com 2019 - 2024. All rights reserved.