python - 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")
解决方案
在您的 dynamoDb 表中,您的主键对于表中的每个元素都必须是唯一的。因此,如果您的主键仅由对所有数据点都相同的分区键组成,那么您将始终覆盖相同的元素。* 您可以将使用另一个字段的排序键添加到表中,以便构成主键的分区键、排序键对是唯一的,从而将数据附加到表中。* 如果您无法拥有由数据点组成的唯一主键,您始终可以将 UUID 添加到主键以使其唯一。
推荐阅读
- pdf - 将图形文本的内容流(由`q`和`Q`组成)转换为适当的内容流
- algorithm - 了解“Cow Id”编码竞赛解决方案
- azure - 我是复制数据库还是使用数据同步来创建和管理数据库以在 Azure 中进行测试
- sql - 聚合包含 13 亿条记录的表的最佳方法
- arrays - Rust ndarray 算术运算意外类型不匹配
- html - 不同位置的四个div标签中的第一个div标签
- python - 如何使用python制作矢量图形图像
- react-native - 如何使用 rn-fetch-blob 在 react-native 中上传文件?
- javascript - 如何销毁另一个函数javascript中的函数?
- asp.net-core - asp.net 核心 API 中的文件响应