
最近,我一直在深度体验 Apache Doris 3.1 版本。坦白说,这已经很久没有一个版本能让我如此兴奋了。它不是那种常规的、小修小补的迭代,而是一次真正意义上的里程碑。
尤其是在 半结构化数据处理 和 湖仓一体 这两个方向上,Doris 3.1 几乎是带着重塑游戏规则的姿态来的。今天,我就想和大家深入聊聊,这个版本到底解决了哪些我们曾经头疼的难题,以及它为什么值得你立刻关注。
在 OLAP 领域,我们和 JSON 的关系一直很微妙。
很长一段时间里,我们都在做妥协。而 Doris 3.1 的 VARIANT 类型,可以说,是向这种妥协发起的总攻。
车联网、用户行为分析、IoT……这些场景的共同特点是超宽表,动辄成千上万个字段,而且大部分都非常稀疏。传统方案要么是元数据爆炸,要么是查询性能雪崩。
Doris 3.1 给出的答案是 稀疏列(Sparse Columns)。
你可以简单理解为:
好处是颠覆性的:
这就像给你的数据建了一个 智能停车场:
上游业务改个字段类型,下游查询就可能报错;想给某个关键路径建个索引,却发现只能给整个 JSON 列建,成本高、效果差。
Doris 3.1 的 模板化 Schema(Schema Template) 正是为了解决这个混乱中的秩序问题。
一句话总结:它让你在享受 JSON 灵活性的同时,能为关键路径套上一个“数据契约”。
-- 为 VARIANT 列 v 定义一个模板
-- 'content' 必须是 STRING 类型
-- 所有以 'pattern1_' 开头的字段,都必须是 STRING 类型
CREATETABLE tbl2 (
k BIGINT,
v VARIANT<
'content' : STRING,
'pattern1_*' : STRING
>,
-- 还能为不同路径,定制不同的索引策略
INDEX idx_content(v) USING INVERTED PROPERTIES("field_pattern"="content"),
INDEX idx_p1(v) USING INVERTED PROPERTIES("field_pattern"="pattern1_*", "parser"="english")
);
好处:
可以说,Doris 3.1 找到了半结构化数据处理的那个“甜点”: 在关键路径上追求极致性能与稳定,在长尾路径上保留充分灵活性。
过去,我们总觉得 OLAP 和搜索是两回事。但 Doris 3.1 正在模糊这条界限。
新版本不仅推出了 存储空间节省高达 20% 的倒排索引 v3 格式,更重要的是,它极大地丰富了分词能力。
新增:
举例:手机号前缀搜索(输入138,搜出所有以 138 开头的号码)。
-- 1. 创建一个 edge_ngram 分词器
CREATE INVERTED INDEX TOKENIZER edge_ngram_phone_tokenizer
PROPERTIES ( "type" = "edge_ngram", "min_gram" = "3", "max_gram" = "10" );
-- 2. 创建一个使用该分词器的分析器
CREATE INVERTED INDEX ANALYZER phone_prefix_analyzer
PROPERTIES ( "tokenizer" = "edge_ngram_phone_tokenizer" );
-- 3. 在建表时使用这个分析器
CREATETABLE customer_contacts (
idBIGINT,
phone TEXT,
INDEX idx_phone(phone) USING INVERTED
PROPERTIES("analyzer" = "phone_prefix_analyzer")
);
这样,电话号码 13891972631 会被切分为:138, 1389, 13891...
结果:前缀搜索难题迎刃而解。 这让 Doris 在日志检索、文本分析等场景下的能力大幅增强。
Doris 的湖仓一体能力一直在进化,而 3.1 则在好用和高效上迈出了一大步。
亮点:
这些细节功能,恰恰决定了它是否真的好用。
除了明星功能,3.1 在存储和查询性能上也做了大量优化:
如果说之前的版本,Doris 是在不断拓宽能力边界; 那么 3.1 版本,则是在几个核心战场上开启了深度攻坚。
如果你正在被超宽表、JSON 查询、湖仓性能等问题困扰,那么,Doris 3.1 绝对值得你立刻下载体验。
我相信,它会给你带来惊喜。