<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>OLAP on Chang Luo</title>
		<link>https://www.luochang.ink/tags/olap/</link>
		<description>Recent content in OLAP on Chang Luo</description>
		<generator>Hugo</generator>
		<language>zh-CN</language>
		
		
		
		
			<lastBuildDate>Sat, 06 Sep 2025 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://www.luochang.ink/tags/olap/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>阿里发布新版 Quick BI，聊聊 ChatBI 的底层架构、交互设计和云计算生态</title>
				<link>https://www.luochang.ink/posts/quick_bi_intro/</link>
				<pubDate>Sat, 06 Sep 2025 00:00:00 +0000</pubDate>
				<guid>https://www.luochang.ink/posts/quick_bi_intro/</guid>
				<description>&lt;p&gt;8月28日，阿里云发布了数据分析工具 &lt;a href=&#34;https://cn.aliyun.com/product/quick-bi&#34;&gt;Quick BI&lt;/a&gt; 的全新版本。它是大模型应用在 BI 行业的最新实践。Quick BI 在云计算基础设施之上，搭建了一个 ChatBI 应用。阿里为这个应用起了一个拟人化的名字：智能小Q。智能小Q允许用户以对话的形式探索数据。无需写 SQL，只需与小Q对话，即可获得想要的统计信息。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.luochang.ink/img/quick-bi-func.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;智能小Q其实是一个多智能体系统（multi-agent system），包含多个 Agent：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;报告 Agent&lt;/li&gt;&#xA;&lt;li&gt;问数 Agent&lt;/li&gt;&#xA;&lt;li&gt;搭建 Agent&lt;/li&gt;&#xA;&lt;li&gt;解读 Agent&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这些 Agent 均由领域大模型驱动。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; 领域大模型经过 SFT、RL 微调，可将业务知识迁移泛化到同类任务中，从而在特定领域获得更优表现。此外，领域大模型的参数量小、推理速度快，也是优势之一。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;一智能小q能做什么&#34;&gt;一、智能小Q能做什么？&lt;/h3&gt;&#xA;&lt;p&gt;下面介绍智能小Q的两种模式：问数和解读。&lt;/p&gt;&#xA;&lt;h4 id=&#34;1问数界面&#34;&gt;1）问数界面&lt;/h4&gt;&#xA;&lt;p&gt;当用户提问：“店日均杯量是多少？”小Q可以找到数据并可视化，这就是“问数”。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.luochang.ink/img/quick-bi-vis.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;2解读界面&#34;&gt;2）解读界面&lt;/h4&gt;&#xA;&lt;p&gt;解读界面允许用户筛选面板中的数据，并基于筛选后的数据向小Q提问。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.luochang.ink/img/quick-bi-context.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;将「筛选后的数据」作为上下文向小Q提问有什么优势？&lt;/p&gt;&#xA;&lt;p&gt;一方面，直接引用数据源意味着大模型无需去猜你想分析哪张表，节省了宝贵的 token；另一方面，直接引用提问涉及的数据范围，有助于大模型关注到真正有用的线索，避免大模型因为找不到重点，变得泛泛而谈。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在与智能体的对话中，明确引用所指对象是好文明！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;二拆解-quick-bi-技术路径&#34;&gt;二、拆解 Quick BI 技术路径&lt;/h3&gt;&#xA;&lt;p&gt;Quick BI 的底层架构是 &lt;strong&gt;Agent + 数据库&lt;/strong&gt;。只要有这两个核心模块，你也能做出简易的 ChatBI，这一点在我的开源项目 &lt;a href=&#34;https://github.com/luochang212/clickhouse-chatbi&#34;&gt;luochang212/clickhouse-chatbi&lt;/a&gt; 中亦有记载。其中，Agent 对 Quick BI 的实现尤为关键。&lt;/p&gt;&#xA;&lt;p&gt;先来盘一盘 Agent 框架有哪些能力？&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;能力&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;技术&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;代表&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;偏向&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;路由&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Router&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;ChatGPT&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;模型&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;检索&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;RAG&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;LlamaIndex&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;工程&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;状态&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Session&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Google ADK&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;工程&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;记忆&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Memory&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Letta&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;工程&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;交互&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;ReActChat&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Qwen Agent&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;模型&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;工具&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;MCP&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Claude&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;工程&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;规划&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Supervisor&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;LangGraph&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;工程&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;安全&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Guardrails&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;OpenAI Agents&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;工程&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;em&gt;* 上面的「代表」不是 SOTA 的意思，只是我第一个想到的例子&lt;/em&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>耶是 ClickHouse！我们有救了！！</title>
				<link>https://www.luochang.ink/posts/chat_to_clickhouse/</link>
				<pubDate>Sat, 26 Jul 2025 00:00:00 +0000</pubDate>
				<guid>https://www.luochang.ink/posts/chat_to_clickhouse/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;本来我懒得装，但是 MySQL 太慢了，遭不住，咱还是把 ClickHouse 装起来吧。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;GitHub 项目地址：&lt;a href=&#34;https://github.com/luochang212/chat-to-clickhouse&#34; target=&#34;_blank&#34;&gt;chat-to-clickhouse&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;在&lt;a href=&#34;https://luochang212.github.io/posts/agent_project/&#34;&gt;《Agent 实战：智能路由、任务拆解和链路工程》&lt;/a&gt;一文中，我实现了一个简单的 ChatBI，它能查询 MySQL 数据库。对于小批量数据量，MySQL 尚可应付，但是当数据量来到千万量级时，一次 MySQL 查询将消耗数秒甚至数十秒，这么长的等待时间是用户难以忍受的。而且 Agent 还有一个技术问题，它的 NL2SQL 尚未做到 one-shot，也就是说，在拿到最终结果前，它也许需要多次试错，这将进一步拉长查询时间。&lt;/p&gt;&#xA;&lt;p&gt;如何无痛解决查询效率低下的问题呢？很简单，只需要换数据库就可以做到。这便引入今天的主角：ClickHouse。&lt;/p&gt;&#xA;&lt;h3 id=&#34;一分析利器&#34;&gt;一、分析利器&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/ClickHouse/ClickHouse&#34;&gt;ClickHouse&lt;/a&gt; 是 Yandex 旗下的一款开源的列式存储数据库，专为 &lt;strong&gt;联机分析处理&lt;/strong&gt; (OLAP) 场景设计。在做数据分析时，它比传统数据库快几倍到几十倍。分析场景的核心需求是「聚合计算」，即 &lt;code&gt;GROUP BY&lt;/code&gt; 子句下的 &lt;code&gt;SUM&lt;/code&gt;, &lt;code&gt;AVG&lt;/code&gt;, &lt;code&gt;COUNT&lt;/code&gt; 操作，这些正是 ClickHouse 的强项。&lt;/p&gt;&#xA;&lt;p&gt;为什么它的聚合计算如此之快呢？因为它具有如下特性：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;列式存储&lt;/strong&gt;：顾名思义，列存的数据是按列存储的。这种存储方式可以减少无效 I/O，因为列存可以只读取查询中涉及的列。而非行存那样，读取整行后再丢掉不需要的列&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;并行计算&lt;/strong&gt;：列存的另一个优势是数据更容易切分。单列数据的连续性和同构性更强，无需考虑与其他列的关联，因此可以更方便地按维度（如时间区间、数值分段）拆分并分配到不同节点。当然，这种设计的代价是使得插入操作变得更加昂贵&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;物化视图&lt;/strong&gt;：物化视图可以把高频分析的结果提前算好存在表里，后续查询直接读结果，无需重新计算&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;二安装过程&#34;&gt;二、安装过程&lt;/h3&gt;&#xA;&lt;p&gt;用 &lt;a href=&#34;https://hub.docker.com/r/clickhouse/clickhouse-server/&#34;&gt;Docker&lt;/a&gt; 安装，过程相对简单。工业界在集群上装，比咱们这个复杂不少。&lt;/p&gt;&#xA;&lt;h4 id=&#34;1-配置-docker-镜像源&#34;&gt;1. 配置 Docker 镜像源&lt;/h4&gt;&#xA;&lt;p&gt;中国大陆地区下载镜像，需要配置镜像源。&lt;/p&gt;&#xA;&lt;p&gt;对于 Linux 系统，需要在 &lt;code&gt;/etc/docker/daemon.json&lt;/code&gt; 文件中配置镜像源（如下）。&lt;code&gt;Windows&lt;/code&gt; 和 &lt;code&gt;MacOS&lt;/code&gt; 系统更方便一点，可以直接在 &lt;code&gt;Docker Desktop&lt;/code&gt; 的 &lt;code&gt;Settings -&amp;gt; Docker Engine&lt;/code&gt; 页面修改 &lt;code&gt;daemon.json&lt;/code&gt; 文件。&lt;/p&gt;&#xA;&lt;p&gt;在 &lt;code&gt;daemon.json&lt;/code&gt; 文件中，添加镜像源字段 &lt;code&gt;registry-mirrors&lt;/code&gt;：&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
