使用PowerShell执行Invoke-DDBQuery查询DynamoDB记录时语法错误求助
问题修复方案
错误原因
你的分区键名account_id:list包含冒号,直接在KeyConditionExpression中使用时,DynamoDB会将冒号后的list误判为表达式占位符的一部分,触发语法解析错误。
修复代码
修改查询参数,通过ExpressionAttributeNames转义带特殊字符的属性名:
$Query = @{ TableName = "tableName" # 使用#ail作为属性名的占位符,替代原account_id:list KeyConditionExpression = "begins_with(#ail, :accountid) AND association_id = :aid" # 定义属性名映射,解决特殊字符解析问题 ExpressionAttributeNames = @{ '#ail' = 'account_id:list' } ExpressionAttributeValues = @{ ':accountid' = 'TEST' ':aid' = "test-xxxxx-xxxxx-xxxxx" } | ConvertTo-DDBItem } $Data = @() $Data = Invoke-DDBQuery @Query -IndexName "association_id" -Region "region" | ConvertFrom-DDBItem
额外注意事项
如果使用的association_id是全局二级索引(GSI),需确认索引结构:
- 若GSI的分区键为
association_id、排序键为account_id:list,当前查询逻辑合法,begins_with可作用于排序键实现前缀匹配。 - 若GSI的分区键不是
association_id,则需调整索引结构或查询条件,确保符合DynamoDB规则:查询必须包含分区键的精确匹配,排序键可使用比较操作。
内容的提问来源于stack exchange,提问作者Dhillli4u
相关产品推荐
相关产品推荐

