3.1.4 VARIANT 类型在聚合模型上的疑问

Viewed 11

聚合表聚合了不同业务的指标,每个业务的检索字段是不一样的,于是想给聚合表的value列加上VARIANT类型字段,声明为REPLACE
但是按照官方文档说法,我想给子路径的一些字段加上布隆索引或倒排所以,却加不上去

index should only be used in columns of DUP_KEYS/UNIQUE_KEYS table or key columns of AGG_KEYS table. invalid index: idx_user_id

我没有明确的在文档中看到相关限制 不知道是否是我的写法不对?

CREATE TABLE IF NOT EXISTS agg_table(
    uid BIGINT NOT NULL,
    dt DATE NOT NULL,
    payload VARIANT<
        'user_id' : BIGINT,
        'event_type' : STRING,
        properties(
            'variant_max_subcolumns_count' = '2048'
        )
    > REPLACE,
    INDEX idx_user_id (payload) USING INVERTED PROPERTIES("field_pattern" = "user_id")
) AGGREGATE KEY(uid, dt)
DISTRIBUTED BY HASH(uid) BUCKETS 10
PROPERTIES (
    "replication_num" = "1"
);

索引必须建立在key列上这个原理是明白的
但是我的业务场景就是不同指标的检索字段可能不太一样
原本的做法是将json(最多十来个字段)打平成 keyValue&keyValue 的字符串放在key列上,然后对这个列建立倒排索引,查询时通过 match_all('keyValue')的方式进行
这种做法在生产中跑了一年多,大部分业务场景下的查询效率都是优异的,但是在一些场景下查询效率始终达不到预期,感觉就像是索引失效了一样,这种场景下使用like都比match快

现在将doris升级到了3.1.4,尝试用相同数据集测试VARIANT,查询效率有显著提升,就是之前的检索字段key列要换成这个VARIANT的value列,现在发现VARIANT列在聚合模型的value列上无法建立子路径索引...

大佬们针对我现有的业务场景有无更好的办法?

1 Answers

目前 AGG 模型不支持 Value 列上加 Inverted Index. 你这个场景只能在Unique 和 Duplicate 模型上做选择,至于其他聚合指标可以通过异步物化视图或者常规的ETL任务加工。

match_all 的性能不如 like 这个得分场景来看的。like可能在固定场景下也有一定的优势,您可以提供一个例子我们看看是否有优化空间。

您可以加我主页微信,可以把这个case发给我