0

在 中搜索数组文本的正确 SQL 语法是crate database什么?

我的示例表是:

create table 
tasks(user string, entry array(object as (taskid string, eTime timestamp))).  

我尝试了以下给出语法错误的方法:

select * from program where any(entry['taskid']) ~* '.*cleanup.*';
4

1 回答 1

0

ANY 运算符的正确语法是:

SELECT * FROM tasks WHERE '.*cleanup.*' ~* ANY(entry['taskid']);

但是,PCRE目前不支持与ANY. 另一种选择是LIKE谓词,但它不区分大小写(如果它以通配符开头,可能会很慢);

所以最终,你可以...

...要么在带有分析器的列上使用全文索引(这可能不是最好的解决方案,因为我假设是一个单词并且您也想“按原样”使用它),entry['taskid']lowercasetaskid

...或将数组值拆分为单独的行,以便您拥有如下架构:

CREATE TABLE tasks (
  user string,
  entry OBJECT AS (
    taskid STRING,
    etime TIMESTAMP
  )
) ...

你可以使用

SELECT * FROM tasks WHERE entry['taskid'] ~* '.*cleanup.*';
于 2016-04-18T06:31:47.983 回答