You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Trino/Presto数组操作:移除元素、排序及生成哈希实现咨询

Trino/Presto 数组三步操作实现方案

你当前用的json_array_length是针对JSON格式字符串的长度计算函数,要完成过滤、排序、算哈希三个操作,建议先把JSON数组转成Trino/Presto原生的ARRAY类型处理,最后再做序列化算哈希,避免格式不一致问题。

各步骤对应函数说明

  • 移除匹配规则的元素:用filter()函数,传入数组和自定义匹配谓词即可,比如要移除所有值为"b"的元素,谓词写x -> x <> 'b',复杂规则直接修改谓词逻辑即可(比如移除空值写x -> x is not null、移除长度大于3的字符串写x -> length(x) <=3)
  • 数组重排序:用array_sort()函数,默认按元素自然顺序升序排列,需要自定义排序逻辑时也支持传入自定义比较函数
  • 生成哈希值:先把处理完成的数组用json_format()序列化为标准JSON字符串(保证序列化结果稳定,不会因为内部存储格式差异导致哈希结果不一致),再调用对应哈希函数即可,常用的有sha256()、md5(),按业务需求选择。

可直接运行的完整示例

针对你给出的JSON数组输入["b", "a", "b", "c"],完整SQL如下:

WITH source_data AS (
    -- 原始输入:你的JSON数组字符串
    SELECT '["b", "a", "b", "c"]' AS raw_json_arr
)
SELECT
    final_arr,
    -- 计算SHA256哈希,需要MD5的话直接把sha256替换为md5即可
    sha256(to_utf8(json_format(final_arr))) AS arr_sha256_hash
FROM (
    SELECT
        -- 第二步:过滤后排序
        array_sort(filtered_arr) AS final_arr
    FROM (
        SELECT
            -- 第一步:JSON转原生数组 + 过滤掉值为'b'的元素
            filter(
                cast(json_parse(raw_json_arr) AS array(varchar)),
                x -> x <> 'b'
            ) AS filtered_arr
        FROM source_data
    ) t
) t2;

运行后得到的final_arr结果为['a', 'c'],同时输出对应的稳定哈希值。
如果你的输入本身就是Trino/Presto原生的ARRAY类型字段,直接去掉cast(json_parse(xxx) as array(varchar))这层转换,把字段名直接传入filter()即可。

内容的提问来源于stack exchange,提问作者user10765213

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 21:51:38