DynamoDB中单个哈希键的多个范围键

时间:2017-07-19 13:23:57

标签: python python-3.x amazon-web-services amazon-dynamodb boto3

我有以下项目,不同的公司名称和记录(记录数约为110K):

Items=[{"Company":"ABCD","Frequency":"Annual","Date":"2016-03-31"},
       {"Company":"ABCD","Frequency":"Quarterly","Date":"2016-03-31"},
       {"Company":"ABCD","Frequency":"Quarterly","Date":"2016-06-31"},
       {"Company":"ABCD","Frequency":"Quarterly","Date":"2016-09-31"}
       {"Company":"ABCD","Frequency":"Quarterly","Date":"2016-12-31"}.......]

我的密钥架构是:

table = dynamodb.create_table(
TableName='table',
KeySchema=[
    {'AttributeName':'Company','KeyType':'HASH'},{'AttributeName': 'Date','KeyType': 'RANGE'}
],
AttributeDefinitions=[
    {'AttributeName':'Company','AttributeType':'S'},{'AttributeName':'Date','AttributeType':'S'}
],
ProvisionedThroughput={
        'ReadCapacityUnits': 100,
        'WriteCapacityUnits': 100
    }
)

我的要求是:

  • 我需要将所有行(如上所述)插入dynamoDB(不覆盖
  • 我知道我可以添加另一列作为ID(UUID或GUID)作为Range键以避免覆盖。
  • 但是我是否有可能将Date属性作为范围键(我可以使用日期范围查询)。谢谢提前。

1 个答案:

答案 0 :(得分:0)

您可以使用ConditionExpression检查现有值。只有满足条件,API操作才会成功。

如果不满足条件,您应该ConditionalCheckFailedException

ConditionExpression : "Company <> :companyVal AND #Date <> :dateVal",
ExpressionAttributeNames : {
    '#Date' : 'Date'
},
ExpressionAttributeValues : {
    ":yearVal" : companyVal,
    ":dateVal" : dateVal
}

主键: -

  

主键唯一标识表中的每个项目。首要的   key可以是简单的(分区键)或复合的(分区键和排序)   键)。

在基本情况下,公司和日期的组合必须是唯一的。它不能有重复的值。