ablog

不器用で落着きのない技術者のメモ

AWS Glue で Amazon DynamoDB に読み書きする

AWS Glue の Spark ジョブで Amazon DynamoDB のテーブルから別のテーブルにデータをコピーしてみた。

手順

DynamoDB のテーブルを作成する
  • src_table
    • プライマリキー: key
    • 3件ほどItemを追加する
  • dst_table
    • プライマリキー: key
    • テーブルは空のままにしておく
Glue Spark ジョブを作成する
  • Glue Spark ジョブを作成、以下以外はデフォルト。
    • ジョブ名: ddb2ddb_job
    • Type: Spark
    • Spark 2.4, Python 3 (Glue Version 2.0)
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ["JOB_NAME"])
glue_context= GlueContext(SparkContext.getOrCreate())
job = Job(glue_context)
job.init(args["JOB_NAME"], args)

dyf = glue_context.create_dynamic_frame.from_options(
    connection_type="dynamodb",
    connection_options={
        "dynamodb.input.tableName": "src_table",
        "dynamodb.throughput.read.percent": "1.0",
        "dynamodb.splits": "100"
    }
)

print(dyf.getNumPartitions())

glue_context.write_dynamic_frame_from_options(
    frame=dyf,
    connection_type="dynamodb",
    connection_options={
        "dynamodb.output.tableName": "dst_table",
        "dynamodb.throughput.write.percent": "1.0"
    }
)

job.commit()

結果

Glue ジョブを実行すると、src_table のデータを dst_table にコピーできた。

  • コピー元テーブル

  • コピー先テーブル