检查行是否包含 DynamoDB 中的嵌套项目?

Sim*_*Rex 3 sql amazon-dynamodb partiql

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

SELECT * 
FROM "table" 
WHERE "device"."active" = 0 AND "device"."error" IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

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

有错误项目

{
    "id": "value",
    "name": "value,
    "device": {
        "active": 0,
        "error": {
            "reason": "value"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

无错误项目

{
    "id": "value",
    "name": "value,
    "device": {
        "active": 0
    }
}
Run Code Online (Sandbox Code Playgroud)

Aug*_*aas 5

您正在寻找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
Run Code Online (Sandbox Code Playgroud)
-- Returns just foo 2
SELECT * 
FROM "my-table"
WHERE "PK" = 'foo' AND "myMap"."test" IS NOT MISSING
Run Code Online (Sandbox Code Playgroud)

还要确保在 WHERE 子句中指定 PK - 否则,您的查询将是完整扫描。不过,也许这就是你想要的。只是需要注意一些事情。