如何在 Presto 的 varchar 字段数组中搜索文本?

How to search for text in an array of varchar field in Presto?

一个字段在 modeanlyatic 中被定义为 array(varchar)

我想搜索字段包含特定文本模式的记录,如 'ABCD'

如果我运行这个SQL:

select * from data_table 
where top_results like '%ABCD%'

它抛出这个错误:

Query failed (#20190730_021145_23663_dn9fj): line 2:7: Left side of LIKE expression must evaluate to a varchar (actual: array(varchar)

检测特定字符串是否存在的正确语法是什么?

使用filter(array(T), function(T, boolean)) -> array(T)

它 returns 包含函数 returns 为真的元素的数组。使用基数函数检查数组是否不为空:

SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%ABCD%'))>0 ;

Returns

true

检查另一个值:

SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%XXX%'))>0 ;

Returns

false

希望你明白了。

将其转换为json字符串,然后搜索字符串

json_format(cast(top_results as JSON))

select * from data_table 
where json_format(cast(top_results as JSON)) like '%ABCD%'