首页 > 解决方案 > DynamoDB - 避免数据覆盖,所有数据点的主分区键保持不变

问题描述

我正在将数据从存储在 s3 中的 csv 文件迁移到 DynamoDB 中的表。该代码似乎有效,但只有最后一个数据点发布在 DynamoDB 上。所有数据点的主分区键(序列)相同。不确定我是否在这里做错了什么,非常感谢任何帮助。

import  boto3
s3_client = boto3.client("s3")

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('scan_records')

def lambda_handler(event, context):
    bucket_name = event['Records'][0]['s3']['bucket']['name']
    s3_file_name = event['Records'][0]['s3']['object']['key']
    resp = s3_client.get_object(Bucket=bucket_name,Key=s3_file_name)
    data = resp['Body'].read().decode("utf-8")
    scan_time = data.split("\n")
    for scan in scan_time:
        print(scan)
        scan_data = scan.split(",")

    # Add it to dynamoDB

    try: 
         table.put_item(
         Item  = {
            'serial' : scan_data[0],
            'time' : scan_data[1],
        }
    )

    except Exception as e:
        print("End of File")

标签: pythonamazon-web-servicesamazon-s3amazon-dynamodbboto3

解决方案


在您的 dynamoDb 表中,您的主键对于表中的每个元素都必须是唯一的。因此,如果您的主键仅由对所有数据点都相同的分区键组成,那么您将始终覆盖相同的元素。* 您可以将使用另一个字段的排序键添加到表中,以便构成主键的分区键、排序键对是唯一的,从而将数据附加到表中。* 如果您无法拥有由数据点组成的唯一主键,您始终可以将 UUID 添加到主键以使其唯一。


推荐阅读