我的桌子看起来像这样
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
它也会抱怨我试图添加字符串。
我不确定执行此操作的正确方法
答案 0 :(得分:0)
全局二级索引必须始终具有哈希键-您仅在定义范围键,这就是为什么您会收到“第一个KeySchemaElement不是哈希键类型”错误的原因。
第二,您不能在任何主键字段中输入null或空值。
无论如何,即使正确设置了哈希键和范围键,您也将无法运行想要的查询。原因是在执行DynamoDB查询时必须始终指定确切的哈希键。因此,“ deactivation_date <明天”将不起作用。
如果您可以提供有关此操作的更多信息,也许可以提供更好的表格设计