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() 函数

Presto 与元数据库的集成

如何运行 Presto 查询查找行数组中元素的索引

Presto 数组包含来自另一列的值(超集 SQL 查询)

结构数组的 Presto 查询返回单个结构元素作为列而不是结构行

如何在 Presto 中交叉加入取消嵌套 JSON 数组