我可以在条件条件下使用json_array_length吗?

时间:2019-06-11 18:12:36

标签: sql presto amazon-athena

我有一个要查询的JSON字段:

字段json_data的示例数据点如下:

apples=
[{"CHAR_STARS":1,"CHAR_A1_LVL":1},
{"CHAR_STARS":1,"CHAR_A1_LVL":2}]

我可以用json_array_length(json_data['apples'])得到苹果的数量,在这种情况下,该数字返回2。

我只想计算CHAR_A1_LVL> 1的那些是什么?在这种情况下,它将返回1。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

假设您的JSON数据具有常规架构,则可以将其转换为array(row(char_stars bigint, char_a1_lvl bigint)),并使用filterlambda expression来选择符合所需条件的元素。

例如:

WITH data(x) AS (
    VALUES '[{"CHAR_STARS":1,"CHAR_A1_LVL":1}, {"CHAR_STARS":1,"CHAR_A1_LVL":2}]'
)
SELECT cardinality(
    filter(
        cast(json_parse(x) as array(row(char_stars bigint, char_a1_lvl bigint))),
        r -> r.char_a1_lvl > 1))
FROM data;