微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ClickHouse 中的枚举类型数组

如何解决ClickHouse 中的枚举类型数组

ClickHouse 21.4 中,我创建了一个包含枚举列数组的表:

CREATE TABLE test_array_enum (
    id String,fixation_at DateTime64(3,'UTC'),types Array(
        Enum(
            'FirsT_TYPE' = 1,'SECOND_TYPE' = 2,'THIRD_TYPE' = 3,'FOURTH_TYPE' = 4
        )
    )
)
ENGINE = ReplacingMergeTree
ORDER BY (fixation_at,id);

填写一些数据:

INSERT INTO test_array_enum (id,fixation_at,types) VALUES ('1',Now64(),[]),('2',['FirsT_TYPE']),('3',['SECOND_TYPE','THIRD_TYPE']),('4',['FOURTH_TYPE']);

我想按类型列过滤数据,查询返回0行:

SELECT *
FROM test_array_enum
WHERE hasAny(types,'THIRD_TYPE']);

它适用于 Int 值:

SELECT *
FROM test_array_enum
WHERE hasAny(types,[2,3]);

有没有办法通过枚举的字符串值过滤数据?

解决方法

如果有意义,您可以使用强制转换

SELECT *
FROM test_array_enum
WHERE hasAny(types,CAST(['SECOND_TYPE','THIRD_TYPE'],'Array(Enum(\'FIRST_TYPE\' = 1,\'SECOND_TYPE\' = 2,\'THIRD_TYPE\' = 3,\'FOURTH_TYPE\' = 4))'))
,

试试这个查询:

SELECT *
FROM test_array_enum
WHERE arrayFirstIndex(x -> x = 'SECOND_TYPE' OR x = 'THIRD_TYPE',types) > 0

/*
┌─id─┬─────────────fixation_at─┬─types────────────────────────┐
│ 3  │ 2021-07-08 02:11:21.238 │ ['SECOND_TYPE','THIRD_TYPE'] │
└────┴─────────────────────────┴──────────────────────────────┘
*/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。