表名:人身份证 | 姓名 | 年龄 | 地点id_1 | 一个 | 23 | 新西兰id_2 | 乙 | 12 | 印度id_3 | C | 26 | 新加坡id_4 | D | 30 | 火鸡键:id -> hash 和 age->range问题 1我正在尝试执行一个查询:“从年龄 > 25 岁的人中选择 *”我可以让它工作查询,例如“从 id = id_1 和年龄 > 25 岁的人中选择年龄”,这不是我需要的,只是需要选择所有值。如果我不需要年龄作为范围索引,我应该如何修改我的查询参数以只返回匹配条件的记录列表:年龄 > 25?问题2当第 23 行或第 24-41 行被注释时,AWS 会抛出错误。:查询错误:ValidationException:必须在请求中指定 KeyConditions 或 KeyConditionExpression 参数。状态代码:400,请求 ID:[]是否需要 KeyConditions/KeyConditionsExpressions 参数?这是否意味着我无法在不属于索引的参数上查询表? func queryDynamo() { log.Println("Enter queryDynamo") svc := dynamodb.New(nil) params := &dynamodb.QueryInput{ TableName: aws.String("people"), // Required Limit: aws.Long(3), // IndexName: aws.String("localSecondaryIndex"), ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{ ":v_age": { // Required N: aws.String("25"), }, ":v_ID": { S: aws.String("NULL"), }, }, FilterExpression: aws.String("age >= :v_age"), // KeyConditionExpression: aws.String("id = :v_ID and age >= :v_age"), KeyConditions: map[string]*dynamodb.Condition{ "age": { // Required ComparisonOperator: aws.String("GT"), // Required AttributeValueList: []*dynamodb.AttributeValue{ { // Required N: aws.String("25"), }, // More values... }, },
1 回答
catspeake
TA贡献1111条经验 获得超0个赞
DynamoDB 是一个基于 NoSQL 的系统,因此如果不进行表扫描,您将无法根据非索引字段的条件检索所有记录。
表扫描将导致 DynamoDB 遍历表中的每条记录,对于大表来说,这在时间(速度慢)或金钱(预置读取 IOPS)方面都非常昂贵。
使用过滤器是正确的方法,如果您从查询切换到扫描,它将允许操作完成。查询必须始终指定哈希键。
不过有一句警告:如果您计划对在前端公开的不仅仅是几个(少于 100 个)项目的表使用扫描操作,您会对结果感到失望。如果这是响应时间无关紧要的某种类型的 cron 作业或后端报告任务,这是一种可接受的方法,但请注意不要耗尽所有 IOPS 并影响前端应用程序。
- 1 回答
- 0 关注
- 184 浏览
添加回答
举报
0/150
提交
取消