Python(boto3 batch_writer)에서의 DynamoDB 배치 쓰기
Python에서 DynamoDB 항목을 대량으로 쓰는 관용적인 방법은 boto3의 batch_writer() 컨텍스트 매니저입니다: put과 delete를 버퍼링하고, 최대 25개씩 BatchWriteItem 호출로 보내며, 미처리 항목을 자동으로 재전송합니다 — 다른 언어에서는 모두 손으로 작성하는 그 재시도 루프입니다.
Code
import boto3
dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("Music")
songs = [
{"Artist": "Arturo Sandoval", "SongTitle": "Cubano Chant", "AlbumTitle": "Danzon", "Year": 1994},
{"Artist": "Arturo Sandoval", "SongTitle": "A Mis Abuelos", "AlbumTitle": "Danzon", "Year": 1994},
{"Artist": "Arturo Sandoval", "SongTitle": "Groovin' High", "AlbumTitle": "Swingin'", "Year": 1996},
]
with table.batch_writer() as batch:
for song in songs:
batch.put_item(Item=song)
batch.delete_item(Key={"Artist": "Ella Fitzgerald", "SongTitle": "Misty"})
print(f"Wrote {len(songs)} songs")Explanation
batch_writer()— boto3 문서에 따르면 이 핸들은 "버퍼링과 항목을 배치로 보내는 것을 자동으로 처리"하며, "미처리 항목도 자동으로 처리하고 필요에 따라 재전송"합니다.with블록을 나가면 아직 버퍼에 남은 것이 모두 플러시됩니다.- 평범한 Python 값 — 이것은 리소스 API입니다: DynamoDB JSON 없이 숫자를
int/Decimal로 사용합니다. 각put_item항목은 테이블의 전체 기본 키를 포함해야 하며,delete_item은 키만 받습니다. - 중복 키 — 원시
BatchWriteItem호출은 동일한 키에 대한 두 개의 쓰기를 거부합니다. 소스 데이터에 키가 반복될 수 있다면 라이터를table.batch_writer(overwrite_by_pkeys=["Artist", "SongTitle"])로 구성하세요 — 버퍼를 중복 제거해 키당 마지막 쓰기를 유지합니다. - 그 아래에는 동일한 서비스 한도가 적용됩니다: 요청당 25개 쓰기, 항목당 400 KB, 요청당 16 MB.
batch_writer는 청킹을 처리하지만, 항목별 상한을 없앨 수는 없습니다. - 업데이트 없음, 조건 없음 —
BatchWriteItem은UpdateItem이나ConditionExpression을 표현할 수 없습니다. 기존 키에 대한 put은 항목을 조용히 교체합니다. 전부 아니면 전무이거나 조건부 쓰기가 필요한가요? TransactWriteItems를 사용하세요. - 대신 저수준 클라이언트(
client.batch_write_item)를 사용하시나요? 그러면UnprocessedItems를 비우는 것은 여러분의 몫입니다 — Node.js 예제와 정확히 동일하게 지수 백오프로 반복하세요.
Do it visually
대량 로드 전에 항목을 확인하시나요? 항목 크기 계산기는 각 항목을 400 KB 상한에 대해 검증하며, DynamoDB Expression Builder는 후속 읽기와 쓰기를 위한 실행 가능한 boto3 코드를 복사해 줍니다.
GUI에서 항목을 대량으로 추가, 편집, 삭제하려면 — CSV/JSON 가져오기 포함 — DynoTable을 다운로드하세요.
Related examples
- DynamoDB BatchWriteItem in Node.js — batch_writer가 숨기는 수동 재시도 루프.
- DynamoDB BatchWriteItem with the AWS CLI — 셸에서 실행하는 동일한 배치 쓰기.
- DynamoDB PutItem in Python — 이것이 배치하는 단일 항목 쓰기.
- Batch operations in DynamoDB — 한도, 부분 실패, 그리고 배치가 이득이 되는 경우.
- "Too many items requested for the BatchWriteItem call" — 하나의 배치에 25개를 초과하는 put/delete 요청.
- "Provided list of item keys contains duplicates" — 하나의 배치에서 동일한 키를 건드리는 두 개의 요청.
References
- Amazon DynamoDB guide (batch_writer) — Boto3 documentation
- BatchWriteItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Last verified 2026-07-13 against the official AWS documentation linked above.