【问题标题】:Using GROUP BY in AWS QLDB / Partiql在 AWS QLDB / Partiql 中使用 GROUP BY
【发布时间】:2020-07-09 14:56:51
【问题描述】:

我的 AWS QLDB 表中有下表:

INSERT INTO Testing << {
    'MyId': 1,
    'MyList': [ 'Item1', 'Item2', 'Item3']
},
{
    'MyId': 2,
    'MyList': [ 'Item2', 'Item3', 'Item4']
},
{
    'MyId': 3,
    'MyList': [ 'Item4', 'Item5', 'Item6']
}
>>

我需要能够获取包含项目列表(不是来自另一个表)的所有文档,我正在使用以下查询:

SELECT *
FROM Testing AS t,
     t.MyList AS l
WHERE l IN ('Item1', 'Item2', 'Item4')

但是,这给出了以下输出

+------+---------------------------+---------+
| MyId | MyList                    | _3      |
+------+---------------------------+---------+
| 3    | ["Item4","Item5","Item6"] | "Item4" |
+------+---------------------------+---------+
| 1    | ["Item1","Item2","Item3"] | "Item1" |
+------+---------------------------+---------+
| 1    | ["Item1","Item2","Item3"] | "Item2" |
+------+---------------------------+---------+
| 2    | ["Item2","Item3","Item4"] | "Item2" |
+------+---------------------------+---------+
| 2    | ["Item2","Item3","Item4"] | "Item4" |
+------+---------------------------+---------+

我希望能够获得三个不同的行。它会根据我在尝试使用DISTINCT 时遇到的错误显示,QLDB 不支持它,但我也更喜欢在我的SELECT 中使用*,所以我正在尝试使用GROUP BY

SELECT *
FROM Testing AS t,
     t.MyList AS l
WHERE l IN ('Item1', 'Item2', 'Item4')
GROUP BY t.MyId

但这会产生以下错误:

启动查询错误
语义错误:在行、列:没有名为“$__partiql__group_by_1_item_0”的变量;没有名为“$__partiql__group_by_1_item_0”的变量(服务:AmazonQLDBSession;状态代码:400;错误代码:BadRequestException;请求 ID:65vrQHytqHdEL3o9Ym9Xn4)

【问题讨论】:

    标签: group-by where-in amazon-qldb partiql


    【解决方案1】:

    DISTINCTGROUP BY 目前在 QLDB 中均不受支持,如 the SELECT reference. 的省略所示,不幸的是,在这种情况下,错误消息具有误导性。

    假设您的 MyId 列本身是唯一的,您可以通过检查列表中是否包含每个项目来过滤列表来表达您想要的内容,例如:

    SELECT *
    FROM Testing AS t
    WHERE 'Item1' IN t.MyList OR 'Item2' IN t.MyList OR 'Item3' IN t.MyList
    

    如果您想进一步过滤生成的列表,您可以添加一个嵌套的SELECT 与您的原始过滤器as described here

    SELECT t.MyId, (SELECT VALUE l FROM t.MyList WHERE l IN ('Item1', 'Item2', 'Item3'))
    FROM Testing AS t
    WHERE 'Item1' IN t.MyList OR 'Item2' IN t.MyList OR 'Item3' IN t.MyList
    

    虽然这有点尴尬,但您可能无论如何都不想做 GROUP BY,因为这将分组整个数据集(需要完整的聚合),当 items 为每个 t包含在其中。

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 2015-04-14
      • 2018-01-13
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 2022-06-23
      相关资源
      最近更新 更多