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

如何在Presto中筛选列内列表包含指定值的DataFrame数据?

问题原因

你编写的过滤语句不生效主要有两点原因:

  1. LIKE运算符默认是字符串精确匹配,不加通配符的情况下只有type值完全等于upload才会被命中,你存储的type内容包含其他字符,自然匹配不到
  2. 从你给出的查询结果来看,type列是数组类型,字符串匹配逻辑本身不适用于数组的元素包含判断,需要用数组专属的判断语法

不同SQL引擎的实现方案

大数据场景(Spark SQL、Presto/Trino、Hive)

使用内置的array_contains函数判断数组是否包含指定元素:

SELECT 
  value,
  type
FROM dt 
WHERE array_contains(type, 'upload')

PostgreSQL

支持两种写法实现数组包含判断:

-- 写法1:使用数组包含运算符@>
SELECT 
  value,
  type
FROM dt 
WHERE type @> ARRAY['upload']::varchar[];

-- 写法2:使用ANY关键字匹配
SELECT 
  value,
  type
FROM dt 
WHERE 'upload' = ANY(type);

MySQL 8.0+(type为JSON数组类型)

使用JSON_CONTAINS函数做JSON数组的元素判断:

SELECT 
  value,
  type
FROM dt 
WHERE JSON_CONTAINS(type, '"upload"');

特殊兼容方案(type为字符串格式存储的伪数组)

如果你的type列实际是存储为"[increase, upload]"这类字符串格式,没有使用原生数组类型,可以给LIKE加上通配符%做模糊匹配:

SELECT 
  value,
  type
FROM dt 
WHERE type LIKE '%upload%'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:54:03