DC娱乐网

Doris SelectDB for AI 实战:从零搭建非结构化数据...

在过去一年,大模型能力的飞跃与推理成本的降低,使得 AI 不再是远期的概念,而成为企业当下必须拥抱的变革。几乎每一家企业

在过去一年,大模型能力的飞跃与推理成本的降低,使得 AI 不再是远期的概念,而成为企业当下必须拥抱的变革。几乎每一家企业都在积极探讨 AI、规划 AI 项目,寻找技术赋能业务的真实路径。在此背景下,Apache Doris 4.0 围绕 AI,系统性地引入并完善了一系列核心能力:

半结构化数据分析能力(Variant):轻松处理 JSON、XML 等灵活的数据类型智能索引能力升级:全文检索:内置 BM25 算法,支持高性能关键词搜索与相关性排序,应对精确匹配场景。向量检索: 集成 ANN 算法索引,支持高维向量相似性搜索,实现基于语义的匹配。混合检索与分析(Hybrid Search):可同时结合关键词、向量及结构化过滤进行查询,大幅提升召回率与准确度。AI 原生化:内置 AI Functions,可直接调用 Embedding 模型、大语言模型(LLM)等。面向 Agent 的 MCP 交互能力:支持与 AI Agent 便捷且高效协同,使其成为智能体可信赖的数据与工具中枢。

这些能力相互协作,共同推动 Apache Doris 从被动存储分析,转向主动智能数据分析服务与洞察生成。

正因如此,Doris 吸引了众多探寻“Data + AI”可能性的新用户涌入尝试,也促使大量存量用户基于 Doris 4.0 率先探索,将 AI 能力应用于具体业务。其典型场景包括:

用户画像与行为分析:融合用户的结构化行为数据(点击、购买)与非结构化反馈(评论、客服对话),通过 AI 理解情绪与意图,自动关联行为异动与根本原因,实现从“看到现象”到“解释原因”的闭环。智能风控与审计:在传统规则和指标风控基础上,引入交易备注、申诉文本等非结构化数据,通过语义分析识别潜在欺诈模式,将隐形的风险信号转化为可预警的规则。制造与 IoT 预测性维护:关联设备时序传感器数据与维修日志文本,通过混合检索快速匹配历史故障案例,实现故障根因的智能定位与预测性维护建议。产品反馈与洞察分析:汇聚来自论坛、工单、客服的分散用户反馈,通过 Doris + AI 将海量非结构化内容转化为可量化、可分析的产品洞察,驱动功能优化与决策。

SelectDB Cloud 和阿里云数据库 SelectDB 版均基于 Apache Doris 内核构建,全面继承了上述 Doris AI 能力。此外,两者均采用存算分离架构,支持弹性扩缩容,能够精准匹配业务流量波动,有效降低成本。同时,通过创建多个独立计算集群,可实现不同业务负载的隔离(如读写分离、离在线分析隔离),避免相互干扰,保障业务稳定性。

SelectDB Cloud(https://selectdb.com/cloud) 不绑定特定云厂商,可在阿里云、华为云、AWS 等多个云平台上以 SaaS 模式部署,并支持 BYOC(自带云)模式,充分满足数据合规与成本控制需求。阿里云瑶池数据库 SelectDB 版(https://www.aliyun.com/product/selectdb?utm_content=g_1000410296) 作为阿里云原生服务,与 VPC、RAM 权限、监控等云服务无缝集成,提供类似在用户 VPC 内部署的网络体验,让用户享受更便捷的云端管理能力。

无论是寻求多云部署的灵活性,还是希望深度集成阿里云生态,两者都能为企业构建“Data + AI”应用提供坚实、高效的数据底座。

场景实战:基于 SelectDB + AI 的产品反馈洞察系统那么,具体如何实现呢?在接下来的实战指南中,我们将以 SelectDB 产品经理的身份讲解。以“物化视图”这一功能为例,我们是如何借助 SelectDB + AI,搭建一个用于收集、整合与分析全域用户反馈的智能洞察系统。

用户对“物化视图”功能的反馈,常分散在论坛、工单等多个渠道,且大部分为非结构化数据,价值难以提炼。如果依赖人工阅读,效率低下。而利用 SelectDB + AI,我们可以构建一个自动化的智能洞察系统。

第一步:初始化

1. 新建 SelectDB Cloud 集群

前往 SelectDB 官网,选择专有仓库(SaaS)产品,该产品提供为期 14 天的免费试用:https://www.selectdb.com/download/cloud

根据页面引导新建 SelectDB Cloud 计算集群。

2. 创建表与原始数据同步

首先,在 SelectDB 中创建三张核心表,分别存储原始数据、向量化内容及 AI 解析结果。

A. 创建明细数据表

创建存储论坛数据的明细数据表,并对 content 字段添加了倒排索引,以支持全文检索和打分。

CREATE TABLE forum_questions (question_id BIGINT, --问题IDuser_id BIGINT, --提问用户IDtitle STRING, --标题content STRING, --用户提问和回复的内容INDEX idx_content (`content`) USING INVERTED PROPERTIES("lower_case" = "true", "parser" = "chinese", "support_phrase" = "true"))UNIQUE KEY(question_id)DISTRIBUTED BY HASH(question_id) BUCKETS 2PROPERTIES ("replication_num" = "1");

B. 创建向量表

创建存储论坛问答的向量表,并对 embedding 字段创建了 ANN 索引,以支持向量检索。

CREATE TABLE forum_question_embeddings (user_id BIGINT NOT NULL, -- 原问题所属用户question_id BIGINT NOT NULL, -- 原问题IDchunk_id BIGINT NOT NULL AUTO_INCREMENT, -- 文本切片 ID(每片对应一条向量)content_chunk STRING NOT NULL, -- 文本切片内容embedding array<float> NOT NULL, -- 1024维向量INDEX ann_index (embedding) USING ANN PROPERTIES("index_type"="hnsw","metric_type"="inner_product","dim"="1024","quantizer"="flat"))DUPLICATE KEY(user_id, question_id, chunk_id)DISTRIBUTED BY HASH(user_id) BUCKETS 2PROPERTIES ("replication_num" = "1");

C. 创建结果表

该表主要用于:对 AI 函数对论坛问答的原始数据进行解析提取之后,存储结果的表。由于不同分析需求以及 AI 函数对文本解析的灵活性,其中的 parsed_data 使用了 Schema Free 的 VARIANT 数据类型。

CREATE TABLE parsed_results (id BIGINT NOT NULL AUTO_INCREMENT, -- 主键IDfeedback_id BIGINT NOT NULL, -- 用户反馈ID(外键关联 forum_questions)parsed_data VARIANT NOT NULL -- 解析结果(任意 JSON 数据))UNIQUE KEY(id)DISTRIBUTED BY HASH(id) BUCKETS 2PROPERTIES ("replication_num" = "1");

3. AI 资源初始化

创建 Embedding 模型和大语言模型的资源,以便后续在 SQL 中使用。

CREATE RESOURCE"qwen-text-embedding-v4"PROPERTIES ('type' = 'ai','ai.provider_type' = 'QWen','ai.endpoint' = 'https://dashscope.aliyuncs.com/compatible-mode/v1','ai.model_name' = 'text-embedding-v4','ai.api_key' = 'xxx','ai.temperature' = '0.7','ai.max_token' = '1024','ai.max_retries' = '3','ai.retry_delay_second' = '1','ai.dimensions' = '1024');CREATE RESOURCE"glm-4-flash-250414"PROPERTIES ('type' = 'ai','ai.provider_type' = 'QWen','ai.endpoint' = 'https://dashscope.aliyuncs.com/compatible-mode/v1','ai.model_name' = 'qwen-flash','ai.api_key' = 'xxx','ai.temperature' = '0.7','ai.max_token' = '-1','ai.max_retries' = '3','ai.retry_delay_second' = '1');

第二步:数据处理

1. Chunking & Embedding

在本示例中,我们采用了简单的定长切分策略,以每 400 字为一个文本片段进行 Embedding 与向量存储。当前方案仅为演示,未来 SelectDB 将通过支持 Python UDF 实现更灵活、更贴合业务场景的 Chunking。

WITH raw AS (SELECTquestion_id,user_id,content,LENGTH(content) AS content_lenFROM forum_questions),t AS (SELECT 0 AS d UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9),num AS (SELECT(a.d * 100 + b.d * 10 + c.d + 1) AS nFROM t aCROSS JOIN t bCROSS JOIN t c),chunks AS (SELECTr.user_id,r.question_id,SUBSTRING(r.content, (n - 1) * 400 + 1, 400) AS content_chunkFROM raw rJOIN num ON (n - 1) * 400 + 1 <= r.content_len)INSERT INTO forum_question_embeddings (user_id, question_id, content_chunk, embedding)SELECTuser_id,question_id,content_chunk,EMBED("qwen-text-embedding-v4", content_chunk) AS embeddingFROM chunks;

2. 关键信息 AI 提取

利用 AI Function 提取用户反馈中的关键信息,并以 Variant 类型存储。

SET @extract_prompt = "你是一名专业的产品反馈分析助手。现提供一段来自用户的反馈文本(feedback_text),请从中提取与“物化视图(Materialized View, MV)”相关的关键信息,并以严格的 JSON 格式输出。 如果反馈文本与 MV 无关,或无法识别任何相关信息,则直接返回字符串 NULL。请从 feedback_text 中提取以下信息并生成 JSON:{\"used_external_source\": \"用户是否提到使用了哪些外部数据源,例如 MySQL、Oracle、Hive、Iceberg 等。如果未提及则为 null。\",\"transparent_rewrite\": \"是否使用或提到透明改写(true / false / null)。\",\"usage_scenario\": \"用户描述的使用场景。若无则为 null。\",\"problems_or_gaps\": \"用户认为 MV 不足或存在的问题。若无则为 null。\",\"other_insights\": \"任何与 MV 相关、对产品改进有价值的额外信息。若无则为 null。\"}要求: 1. 输出内容必须是纯 JSON,对象必须以 { 开头、以 } 结尾。2. 禁止输出任何 Markdown 代码块标记,如 json、、json、``` 等。3. 禁止输出任何额外文字、描述、解释、前缀或后缀。4. 不得在 JSON 外输出换行、空格或注释。";INSERT INTO parsed_results (feedback_id, parsed_data)SELECTquestion_id,AI_GENERATE('glm-4-flash-250414',concat(@extract_prompt ,'\nfeedback_text: ```' ,content, '```') ) AS extracted_infoFROM forum_questions where search('content:物化视图');

第三步:混合检索与分析

当数据准备就绪后,便可针对具体产品问题展开检索分析。

1. 示例 A:

我们将对该问题进行检索分析:物化视图功能中,用户最常使用哪些外部数据源,分别有多少用户反馈?

如下代码所示,直接对上一步中反馈结果的解析表进行聚合分析。

SELECT lower(CAST(c.used_external_source AS string)) AS used_external_source, COUNT(*)FROM (SELECTa.parsed_data.usage_scenario, a.parsed_data.transparent_rewrite, a.parsed_data.used_external_source AS used_external_source, a.parsed_data.problems_or_gaps, a.parsed_data.other_insights, b.contentFROM parsed_results aJOIN forum_questions b ON a.feedback_id = b.question_idWHERE a.parsed_data.used_external_source != ""AND a.parsed_data.used_external_source != "null") cGROUP BY lower(CAST(c.used_external_source AS string));

2. 示例 B:

我们将对该问题进行检索分析:有多少用户提到了数据时效性的痛点或需求,他们都使用了什么数据源?

为了回答这个问题,我们需要结合关键词匹配和语义搜索,检索出有“数据时效性的痛点或需求”的用户,然后对这些用户进行聚合分析,代码如下所示。

--向量检索文本SET @search_text="数据时效性差、 ETL 延迟、物化视图刷新不及时、数据不实时、实时查询不满足业务、报表延迟、同步滞后、时延高、更新慢、不能满足实时监控需求、数据落地慢、数据延时影响决策";--存储有"数据时效性的痛点或需求"的用户的临时表CREATE TEMPORARY TABLE retrieved_question_ids (question_id BIGINT)UNIQUE KEY(question_id)DISTRIBUTED BY HASH(question_id) BUCKETS 2PROPERTIES ("replication_num" = "1");insert into retrieved_question_ids(question_id)SELECT question_id --向量检索FROM forum_question_embeddings where inner_product_approximate( embedding,EMBED("qwen-text-embedding-v4", @search_text) ) > 0.5union ALLselect a.question_id from(SELECT question_id,score() as relevance --全文检索FROM forum_questionswhere content MATCH_ANY '时效性 实时 延迟 延时 更新不及时 刷新慢 滞后'ORDER BY relevance DESCLIMIT 100)a;SELECTlower(CAST(c.used_external_source AS STRING)) AS used_external_source,COUNT(DISTINCT c.question_id) AS feedback_cntFROM (SELECTa.feedback_id AS question_id,a.parsed_data.used_external_source AS used_external_sourceFROM parsed_results aJOIN retrieved_question_ids rON a.feedback_id = r.question_idWHERE a.parsed_data.used_external_source ISNOTNULLAND a.parsed_data.used_external_source != ""AND lower(a.parsed_data.used_external_source) != "null") cGROUP BY lower(CAST(c.used_external_source AS STRING))ORDER BY feedback_cnt DESC;

通过以上步骤,一个能够自动处理非结构化反馈、并支持智能问答式分析的洞察系统便搭建完成。这套方法不仅适用于产品反馈,也可平移到客服质检、舆情分析、风控线索挖掘等众多需要理解文本的领域。

当我们把目光从用户反馈扩展到更广泛的企业数据,我们发现,几乎所有成熟的业务分析系统,都天然伴随着大量非结构化数据。只是长期以来,这些数据并未被系统性纳入分析体系,更多停留在“可存储、不可分析”的状态。

我们所做的,正是通过 HSAP 能力在一个统一平台中融合实时分析、智能检索与 AI 推理能力,唤醒这些数据资产的价值。这并非简单地引入 AI,而是让企业已有的数据基础能够自然、平滑地智能化升级,让数据真正成为驱动业务决策的核心力量。

我们欢迎您基于文中的案例开始探索,让 SelectDB or Apache Doris 成为您业务智能化进程中统一、高效的数据基座。

智能网联汽车的数据挑战:“两个不可能三角”高频状态可见:实时可见 + 高频采样 + 高维状态,三者难以兼得。复杂语义可得:即时可得 + 超大规模 + 复杂结构,挖掘能力不足。四大技术创新:破解行业技术痛点

SelectDB 基于 Apache Doris 内核,针对汽车行业数据特点,推出四大核心能力:

基于 Index+Bitmap 的主键模型:实现⾼频实时更新与⾼效 OLAP 查询。做到⾼吞吐写⼊的同时,数据实时可⻅。Variant 数据类型:⽀持包含数组的复杂嵌套的JSON格式数据存储和查询,有效应对复杂结构数据的实时检索和分析。HSAP 混合搜索与分析:⽀持超⼤规模百亿量级数据的混合索引与分析。云原生弹性计算:存算分离架构,按需扩缩容,降低 TCO。

这些能力共同构成智能网联汽车的 “实时数据底座”,覆盖 自动驾驶、智能座舱、车联网数据分析、业务运营、工厂数据分析五大核心场景。

AI 原生化:让数据主动服务智能

在最新版本的 SelectDB 中,AI 能力已深度融入数据分析全流程。以 Variant 类型处理非结构化数据,内置 BM25 全文检索与 ANN 向量索引,并可直接调用大语言模型(LLM)进行语义理解——这意味着:

用户反馈洞察:将评论、工单、客服语音等非结构化数据,通过 SelectDB + AI 自动提取关键信息,量化用户痛点。智能座舱体验优化:融合语音交互文本与行为数据,实时分析用户情绪与意图。预测性维护:关联设备时序传感器与维修日志,通过混合检索快速匹配故障根因。

例如,在“产品反馈洞察”实战中,SelectDB 仅需几行 SQL 即可完成文本切片、向量化、AI 信息提取与混合检索,让数据从“可存”变为“可思考”。

行业落地价值:长安、零跑已先行

长安汽车

存储成本降低 3-5 倍实时写入与处理单日 百亿级 数据十亿级数据查询 秒级响应

零跑汽车

查询响应时间从 1.2s 降至 0.3s实现 秒级数据处理与分析