1

我正在尝试将 PartiQL 与 DynamoDB 一起使用来执行 SQL 查询,以检查设备是否处于非活动状态并包含错误。这是我正在使用的查询:

SELECT * 
FROM "table" 
WHERE "device"."active" = 0 AND "device"."error" IS NOT NULL

但是我注意到即使设备没有错误项,查询仍然会返回一行。如何查询仅包含错误项的设备?

有错误项

{
    "id": "value",
    "name": "value,
    "device": {
        "active": 0,
        "error": {
            "reason": "value"
        }
    }
}

无错误项

{
    "id": "value",
    "name": "value,
    "device": {
        "active": 0
    }
}
4

1 回答 1

0

您正在寻找IS NOT MISSING:) 那是过滤表达式运算符函数的 partiql 版本attribute_exists

给定一个具有主键 PK、排序键 SK 和以下数据的表:

PK SK 我的地图
1 {}
2 {“测试”: {}}
-- 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 - 否则,您的查询将是完整扫描。不过,也许这就是你想要的。只是需要注意的事情。

于 2021-09-03T10:40:44.087 回答