簡體   English   中英

DynamoDB - 避免數據覆蓋,所有數據點的主分區鍵保持不變

[英]DynamoDB - avoid data overwrite with primary partition key remaining the same for all data points

我正在將數據從 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")

在您的 dynamoDb 表中,您的主鍵對於表中的每個元素都必須是唯一的。 因此,如果您的主鍵僅由對所有數據點都相同的分區鍵組成,您將始終覆蓋相同的元素。 * 您可以將使用另一個字段的排序鍵添加到您的表中,以便組成主鍵的分區鍵、排序鍵對是唯一的,從而將數據附加到您的表中。 * 如果您無法從數據點組成唯一的主鍵,您可以隨時向主鍵添加 UUID 以使其唯一。

ConditionExpression='attribute_not_exists(serial) AND attribute_not_exists(time)',

在進行以下兩項更改后,問題得到解決,代碼工作正常。 1. 使用分區和排序鍵的組合檢查唯一條目 2. 在 csv 文件中逐行添加循環並將數據攝取到 DynamoDB。

如果有人覺得它有用,很高興分享代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM