检查行是否包含 DynamoDB 中的嵌套项?
Check if row contains a nested item in DynamoDB?
我正在尝试将 PartiQL 与 DynamoDB 结合使用来执行 SQL 查询以检查设备是否处于非活动状态并包含错误。这是我正在使用的查询:
SELECT *
FROM "table"
WHERE "device"."active" = 0 AND "device"."error" IS NOT NULL
但是我注意到,即使设备没有错误项,查询仍然 returns 一行。如何查询只包含错误项的设备?
有错误项
{
"id": "value",
"name": "value,
"device": {
"active": 0,
"error": {
"reason": "value"
}
}
}
没有错误项
{
"id": "value",
"name": "value,
"device": {
"active": 0
}
}
您正在寻找 IS NOT MISSING
:) 那是过滤表达式运算符函数 attribute_exists
.
的 partiql 版本
给定 table 主键 PK、排序键 SK 和以下数据:
PK
SK
myMap
foo
1
{}
foo
2
{"test": {}}
-- Returns both foo 1 and foo 2
SELECT *
FROM "my-table"
WHERE "PK" = 'foo' AND "myMap"."test" IS NOT NULL
-- Returns just foo 2
SELECT *
FROM "my-table"
WHERE "PK" = 'foo' AND "myMap"."test" IS NOT MISSING
还要确保我的示例在 WHERE 子句中指定了 PK - 否则,您的查询将是一个完整的扫描。不过,也许这就是你想要的。只是需要注意的事情。
我正在尝试将 PartiQL 与 DynamoDB 结合使用来执行 SQL 查询以检查设备是否处于非活动状态并包含错误。这是我正在使用的查询:
SELECT *
FROM "table"
WHERE "device"."active" = 0 AND "device"."error" IS NOT NULL
但是我注意到,即使设备没有错误项,查询仍然 returns 一行。如何查询只包含错误项的设备?
有错误项
{
"id": "value",
"name": "value,
"device": {
"active": 0,
"error": {
"reason": "value"
}
}
}
没有错误项
{
"id": "value",
"name": "value,
"device": {
"active": 0
}
}
您正在寻找 IS NOT MISSING
:) 那是过滤表达式运算符函数 attribute_exists
.
给定 table 主键 PK、排序键 SK 和以下数据:
PK | SK | myMap |
---|---|---|
foo | 1 | {} |
foo | 2 | {"test": {}} |
-- Returns both foo 1 and foo 2
SELECT *
FROM "my-table"
WHERE "PK" = 'foo' AND "myMap"."test" IS NOT NULL
-- Returns just foo 2
SELECT *
FROM "my-table"
WHERE "PK" = 'foo' AND "myMap"."test" IS NOT MISSING
还要确保我的示例在 WHERE 子句中指定了 PK - 否则,您的查询将是一个完整的扫描。不过,也许这就是你想要的。只是需要注意的事情。