具有多种类型的AWS DynamoDB索引属性

时间:2018-09-19 16:34:56

标签: database amazon-web-services aws-lambda amazon-dynamodb aws-sdk

我的桌子看起来像这样

account_id      email               deactivation_date           deleted_on
1               test1@test.com      2018-09-26T16:28:41.143Z    NULL
2               test2@test.com      2018-09-19T16:28:41.143Z    2018-09-19T16:28:41.143Z

我正在使用AWS CLI填充测试数据,如显示的那样,如果已删除,则delete_on字段将为null或具有字符串。

我正在使用cloudformation模板来构建索引,但是它一直失败。 我想在deactivation_date上放置一个索引,以便我可以查询 检索所有帐户

deactivation_date < tomorrow, and deleted_on is null

这是我的文件

  AttributeDefinitions:        
    - AttributeName: "account_id"
      AttributeType: "S"     
    - AttributeName: "email"
      AttributeType: "S"
    - AttributeName: "deactivation_date"
      AttributeType: "S"          
  KeySchema:
    -
      AttributeName: "account_id"
      KeyType: "HASH"
  GlobalSecondaryIndexes:     
    - IndexName: "email-index"
      KeySchema:
        - AttributeName: "email"
          KeyType: "HASH"
      Projection:
        ProjectionType: "ALL"
      ProvisionedThroughput:
        ReadCapacityUnits: !If [conditionIsProd, 10, 5]
        WriteCapacityUnits: !If [conditionIsProd, 10, 5]  
    - IndexName: "deactivation_date-index"
      KeySchema:
        - AttributeName: "deactivation_date"
          KeyType: "RANGE"
      Projection:
        ProjectionType: "ALL"
      ProvisionedThroughput:
        ReadCapacityUnits: !If [conditionIsProd, 10, 5]
        WriteCapacityUnits: !If [conditionIsProd, 10, 5]    

它一直在抱怨

无效的KeySchema:第一个KeySchemaElement不是HASH密钥类型(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;请求ID:xxxxxxx)

如果我将Deleted_on用作索引, 例如

- AttributeName: "deleted_on"
  AttributeType: "S"    

它会抱怨,因为我试图插入NULL,但是如果我这样做

- AttributeName: "deleted_on"
  AttributeType: NULL   

它也会抱怨我试图添加字符串。

我不确定执行此操作的正确方法

1 个答案:

答案 0 :(得分:0)

全局二级索引必须始终具有哈希键-您仅在定义范围键,这就是为什么您会收到“第一个KeySchemaElement不是哈希键类型”错误的原因。

第二,您不能在任何主键字段中输入null或空值。

无论如何,即使正确设置了哈希键和范围键,您也将无法运行想要的查询。原因是在执行DynamoDB查询时必须始终指定确切的哈希键。因此,“ deactivation_date <明天”将不起作用。

如果您可以提供有关此操作的更多信息,也许可以提供更好的表格设计