Presto 数组包含一个喜欢某种模式的元素
Posted
技术标签:
【中文标题】Presto 数组包含一个喜欢某种模式的元素【英文标题】:Presto array contains an element that likes some pattern 【发布时间】:2018-11-18 21:15:41 【问题描述】:例如,我的表中的一列是一个数组,我想检查该列是否包含包含子字符串“denied”的元素(因此“denied at 12:00 pm”、“denied by admin”等元素将都算,我相信我将不得不使用“喜欢”来识别模式)。如何为此编写sql?
【问题讨论】:
请添加样本数据和预期结果 【参考方案1】:使用 presto 的array functions:
filter()
,返回满足给定条件的元素
cardinality()
,返回数组的大小:
像这样:
where cardinality(filter(myArray, x -> x like '%denied%')) > 0
【讨论】:
您可以reduce(myArray, false, (a, x -> a OR x like '%denied%'))
避免为每一行复制一个数组。【参考方案2】:
见数组运算符docs here
contains(array_column,'denied')
【讨论】:
这没有回答问题。根据文档,CONTAINS
运算符仅查找完全匹配。【参考方案3】:
在较新版本的 PrestoSQL (now known as Trino) 中,您可以使用 any_match
函数:
WHERE any_match(column, e -> e like '%denied%')
【讨论】:
以上是关于Presto 数组包含一个喜欢某种模式的元素的主要内容,如果未能解决你的问题,请参考以下文章
等效于 hive 中 Presto 的 transform() 函数