Existe uma API Python para enviar solicitações de obtenção em lote ao AWS DynamoDB?
O pacoteboto3
- Wrapper oficial da Amazon para API AWS para python - oferece ótimo suporte para o upload de itens para o DynamoDB em massa. Se parece com isso:
db = boto3.resource("dynamodb", region_name = "my_region").Table("my_table")
with db.batch_writer() as batch:
for item in my_items:
batch.put_item(Item = item)
Aquimy_items
é uma lista de dicionários Python, cada um dos quais deve ter a (s) chave (s) primária (s) da tabela. A situação não é perfeita - por exemplo, não há mecanismo de segurança para impedir que você exceda seus limites de taxa de transferência - mas ainda é muito bom.
No entanto, não parece haver nenhuma contrapartida para a leitura do banco de dados. O mais próximo que posso encontrar éDynamoDB.Client.batch_get_item()
, mas aqui a API é extremamente complicada. Veja como é a solicitação de dois itens:
db_client = boto3.client("dynamodb", "my_region")
db_client.batch_get_item(
RequestItems = {
"my_table": {
"Keys": [
{"my_primary_key": {"S": "my_key1"}},
{"my_primary_key": {"S": "my_key2"}}
]
}
}
)
Isso pode ser tolerável, mas a resposta tem o mesmo problema: todos os valores são dicionários cujas chaves são tipos de dados ("S"
para corda,"N"
para número,"M"
para mapeamento etc.) e é mais do que um pouco chato ter que analisar tudo. Então, minhas perguntas são:
Existe algum nativoboto3
suporte para leitura em lote do DynamoDb, semelhante aobatch_writer
função acima?
Falhando naquilo,
Fazboto3
fornecer qualquer maneira integrada de desserializar automaticamente as respostas aoDynamoDB.Client.batch_get_item()
função?
Também vou adicionar que a funçãoboto3.resource("dynamodb").Table().get_item()
tem o que eu consideraria a API "correta", pois nenhuma análise de tipo é necessária para entradas ou saídas. Portanto, parece que isso é algum tipo de supervisão dos desenvolvedores, e suponho que estou procurando uma solução alternativa.