为何DynamoDB多过滤条件查询仍返回月度/周度混合数据?
问题描述
我通过Lambda函数查询DynamoDB表,希望根据传入的data_type(可选值monthly或weekly)筛选当月的月度/周度数据,但遇到异常:即使指定了data_type对应的type过滤条件,查询结果仍同时返回月度和周度数据。
DynamoDB表结构
- rate_id:存储值示例:
2024-11-summary(11月月度数据)、2024-11-week1(11月第一周周度数据) - type:枚举值
weekly或monthly,用于标识数据类型 - platform:平台标识,例如
Generic_Data_DF - 其他字段:部署频率、成功率等业务相关字段
问题场景
- 调用接口
https://<my-api-url>/dora-visualize?current_month=true&platform=Generic_Data_DF&data_type=monthly时,预期仅返回Generic_Data_DF平台下type=monthly的2024年11月数据,实际同时返回该平台的周度数据 - 调用接口
https://<my-api-url>/dora-visualize?platform=Generic_Data_DF&data_type=weekly时,预期仅返回周度数据,实际同时返回月度数据
可能的原因及排查方向
1. 过滤参数传递错误
- 检查Lambda函数中是否正确获取到
data_type参数,比如有没有拼写错误(比如把data_type写成datatype) - 确认参数值是否被意外修改,比如是否存在大小写转换错误(比如接口传
monthly,但代码里转成了Monthly,和表中存储的小写值不匹配)
2. DynamoDB查询条件逻辑错误
- 如果用
Scan操作:检查FilterExpression是否正确设置了type = :dataType的条件,有没有把逻辑运算符写错(比如误把AND写成OR,导致过滤条件失效) - 如果用
Query操作:注意type如果是非主键/排序键字段,必须放在FilterExpression中过滤,不能放到KeyConditionExpression里;同时确认没有其他逻辑覆盖了type的过滤规则
3. 索引配置问题
- 如果使用全局二级索引(GSI)查询:检查索引是否包含
type字段,或者索引的投影设置是否导致过滤条件无法生效 - 确认查询时指定的索引是否正确,有没有误用到不包含
type过滤逻辑的索引
4. 数据本身存在异常
- 抽查表中数据,确认部分周度/月度数据的
type字段值是否有误(比如周度数据的type被错写成monthly) - 检查是否存在
type字段为空、或值不符合weekly/monthly枚举的异常数据,这类数据可能会绕过过滤规则被返回
内容的提问来源于stack exchange,提问作者Rania
相关产品推荐
相关产品推荐

