使用PartiQL的IN子句删除DynamoDB项时遇ValidationException错误求助
用PartiQL的IN子句删除DynamoDB表项时触发ValidationException错误的解决办法
问题描述
尝试通过PartiQL编辑器使用IN子句删除DynamoDB表中的项,执行的查询语句如下:
DELETE FROM "<TABLE_NAME_HERE>" WHERE <HASH_KEY_HERE> IN (Select <HASH_KEY_HERE> from "<TABLE_NAME_HERE>")
触发的错误信息:
ValidationException: IN operator must have a left hand argument of type Variable Reference and right hand argument of type Seq with at least one member
需求是无需编写SDK代码即可清理表中项,想知道是否能用PartiQL的IN子句实现该操作。
解决方案
DynamoDB的PartiQL不支持在IN子句中嵌套SELECT查询,这是因为PartiQL对IN的右操作数有严格要求——必须是明确的序列(Seq),也就是直接列出的具体值集合,而非子查询结果。
如果要不用SDK批量清理表项,可采用以下替代方式:
- 直接指定哈希键值集合:若知晓要删除的哈希键具体值,直接将其写在IN的序列中,示例:
注意序列至少要有一个成员,否则仍会触发类似错误。DELETE FROM "<TABLE_NAME_HERE>" WHERE <HASH_KEY_HERE> IN ('key1', 'key2', 'key3') - 批量提交单条DELETE语句:一次性提交多条用分号分隔的DELETE语句,每条针对一个哈希键值,示例:
DELETE FROM "<TABLE_NAME_HERE>" WHERE <HASH_KEY_HERE> = 'key1'; DELETE FROM "<TABLE_NAME_HERE>" WHERE <HASH_KEY_HERE> = 'key2'; DELETE FROM "<TABLE_NAME_HERE>" WHERE <HASH_KEY_HERE> = 'key3'; - 清空整张表的快捷方式:若目标是清空整张表,最直接的操作是在DynamoDB控制台删除表后重建;PartiQL本身没有类似
TRUNCATE TABLE的语句。
内容的提问来源于stack exchange,提问作者iamsuresh
相关产品推荐
相关产品推荐

