DynamoDB 查询构建器
组装整个 Query 或 Scan 请求 —— 表、索引、键条件、筛选、投影、Limit、排序方向、一致性读取和分页 —— 并复制可运行的 AWS SDK v3、CLI 或 boto3 程序,或 PartiQL 语句。
从访问模式到可运行的请求
表达式很少是全部工作。生产环境的 Query 还要决定读哪个索引、每次请求评估多少项、排序键朝哪个方向遍历、读取是否必须强一致,以及响应带着 LastEvaluatedKey 回来时该怎么办。这些请求级参数位于表达式字符串之外 —— 复制粘贴的代码片段通常就是在这里出错。
这个构建器把请求当作工作单元。你在与我们的表达式构建器相同的类型化、保留字安全的模型之上组装键条件、筛选和投影,并在旁边设置请求选项。输出不是片段,而是可以直接运行的程序 —— import、客户端初始化、调用本身,以及在启用“获取所有页”时,把每一页结果都取完的 ExclusiveStartKey 循环。
生成的代码对每个目标都保持诚实。AWS CLI 会自动分页,所以它的 Limit 变成 --page-size,单次请求运行则加上 --no-paginate;PartiQL 拒绝那些属于 ExecuteStatement API 而非语句本身的参数;降序 Query 在可表达时会变成对排序键的 ORDER BY。
只需要表达式本身 —— 六种操作中任意一种的条件、筛选或更新表达式及其占位符映射? DynamoDB 表达式构建器正是为此而生。 还在两种读取操作之间做选择? Query 与 Scan 对比 拆解了各自适用的场景。
常见问题
这与 DynamoDB 表达式构建器有什么不同?
两者刻意分工。表达式构建器关注表达式语法 —— 覆盖全部六种操作的键条件、筛选条件、更新表达式和条件表达式,以及它们的 ExpressionAttributeNames/Values 映射 —— 并只输出命令本身。查询构建器关注完整的 Query 或 Scan 请求:表和索引、键条件、筛选、投影,再加上表达式工具不提供的请求级参数(Limit、排序方向、ConsistentRead、ExclusiveStartKey),并输出一个带客户端初始化和可选分页循环的可运行程序。
在 Query 或 Scan 中,Limit 到底限制的是什么?
Limit 限制的是 DynamoDB 每次请求评估的项数,而不是你收到的匹配项数。筛选在读取之后执行,所以带 Limit 25 和 FilterExpression 的 Query 可能返回不足 25 个项 —— 甚至一个都没有 —— 却仍然消耗其评估的全部读取容量,分页则从 LastEvaluatedKey 继续。在会自动分页的 AWS CLI 中,同一参数通过 --page-size 设置。
DynamoDB 分页(LastEvaluatedKey)是如何工作的?
还有更多数据的 Query 或 Scan 响应会包含 LastEvaluatedKey —— 即最后读取的那个项的主键。你在下一次请求中把它作为 ExclusiveStartKey 传回,如此往复,直到收到不带它的响应。开启“获取所有页”后,生成的 SDK v3 和 boto3 程序正是包含这个循环;除非你传入 --no-paginate,AWS CLI 会自行翻页。
什么时候可以使用强一致读取?
ConsistentRead 适用于基础表和本地二级索引,但不适用于全局二级索引 —— 对 GSI 发起并设置了 ConsistentRead 的 Query 会被拒绝。强一致读取消耗的读取容量也是最终一致读取的两倍。它是 API 参数,不属于 PartiQL 语句文本,所以 PartiQL 标签页会如实拒绝它。
我在这里输入的内容会被上传到任何地方吗?
不会。这是一个静态页面:请求的组装和代码的生成完全在你的浏览器中完成,表名、键值和筛选条件永远不会到达服务器。“复制链接”会把整个请求打包进 URL —— 分享该链接是你输入的内容离开页面的唯一途径,而这由你掌控。