
ms2data/malloy-publisher!构建状态
Publisher 是 Malloy 数据语言的开源语义模型服务器。它允许您定义一次语义模型,并在任何地方使用它们。
Malloy 是一种开源的数据建模语言。它允许您定义丰富的语义数据模型——指定数据背后的含义、关系和上下文。
Malloy模型编码可信的业务逻辑(例如收入、活跃用户、流失率),让您可以根据业务而非原始SQL查询数据。这些模型是版本控制的、可组合的,并且可跨环境移植。
您可以使用 VS Code扩展 开发Malloy模型,该扩展提供了编写模型、运行查询和构建仪表板的便捷环境。
Publisher 通过简洁的API提供Malloy模型服务,为工具、应用程序和代理提供一致、可解释且AI就绪的数据访问。
Publisher围绕熟悉且经过验证的工作流设计:
这反映了DBT和Looker等工具普及的建模者→分析师流程——现在为AI时代重新构想,并基于完全开放的基础设施构建。
如果数据背后的含义不明确,您就无法信任答案。
无论您是构建仪表板、部署AI代理还是启用临时分析,每种体验都依赖于对"MRR"、"LTV"或"活跃用户"等术语的共同理解。没有这个基础,洞察就是不一致的——或者是危险的错误。
Publisher通过将语义模型转换为可重用的数据API解决了这个问题。通过将Malloy的表达性建模语言与开源服务器和无代码数据分析UI相结合,Publisher使语义层对每个人都可访问、可治理和可扩展。
每个Publisher体验都始于语义模型——用 Malloy 编写并通过Publisher服务器提供。您可以使用 Malloy VS Code扩展 创建自己的模型,或使用 malloy-samples 存储库中的示例模型之一,该存储库作为子模块包含在此 repo 中。
要使您的语义模型生效,您可以在本地运行Publisher服务器,并使用浏览器中的Publisher应用浏览您的模型。该应用提供了强大的无代码界面,用于探索和查询模型。
有关如何设置、构建和配置Publisher服务器的说明,请参见:
Publisher的默认服务器配置提供 malloy-samples。服务器运行后,您可以通过以下地址访问应用:
一旦您的模型被提供,它就成为各种数据体验的基础——无代码分析、笔记本、AI代理等。以下部分展示了这些体验在实践中的工作方式:
模型发布后,分析师可以在Explorer中打开它,这是内置在Publisher应用中的可视化查询构建器。Explorer允许分析师:
🎥 演示视频: 观看Explorer实际操作 →
📖 文档: Explorer文档 →
使用Malloy笔记本(.malloynb文件)直接从语义模型创建可共享的、代码优先的仪表板。这些仪表板与模型一起版本化,可以包含文本、图表和可重用视图——全部通过Publisher呈现。
🎥 演示视频: 笔记本演练 →
📖 文档: Malloy笔记本 →
Publisher通过模型上下文协议(MCP) 公开您的语义模型,使AI代理能够:
这使Claude、Cursor或自定义代理等工具能够使用您的定义生成准确、可解释的查询——而非猜测。
🎥 演示视频: MCP + AI代理演练 →
📖 文档: AI代理与MCP指南 →
使用 Publisher SDK,您可以构建丰富的数据应用程序——无需重建查询引擎或重写业务逻辑。Publisher应用本身就是基于此SDK构建的,您可以对其进行改造以:
🎥 演示视频: 使用SDK构建应用 →
📖 文档: 嵌入式数据应用指南 →
Publisher很快将支持SQL兼容接口(例如Postgres有线协议),允许您连接遗留BI工具,如:
这些工具将能够直接查询您的语义模型——获得一致性并减少重复逻辑,而无需改变团队的工作方式。
📖 文档(早期草稿): 传统BI仪表板 →
Publisher由三个主要组件组成:Publisher服务器(API和后端,现在包括MCP支持)、Publisher SDK(UI组件)和Publisher应用(参考数据应用实现)。
下图说明了Publisher组件的组成以及它可以支持的工具和应用程序。
1. Publisher服务器(packages/server/)
核心后端: 这是Publisher的核心。它是一个服务器应用程序,负责加载和管理Malloy包,这些包封装了您的语义模型。
Malloy集成: 它利用Malloy运行时解析.malloy文件,理解其中定义的丰富语义模型(包括关系、计算和业务上下文),并将Malloy查询编译为SQL以在目标数据库(BigQuery、***、Trino、DuckDB、Postgres、MySQL)上执行。
API层: Publisher服务器公开两个主要API接口:
api-doc.yaml 中定义。2025-03-26 规范修订版。包括提供资源元数据和带有建议的详细错误消息。Malloy包格式: Publisher服务器基于Malloy包格式加载语义模型、笔记本和转换。此格式旨在与标准开发实践无缝集成。
.malloy文件。.malloynb文件(Malloy笔记本),用于临时分析、探索和类似仪表板的演示。publisher.json清单文件。publisher.json): 包含有关包的元数据。目前,它支持name、version和description字段。随着Publisher的发展,此架构将显著扩展,以更好地支持依赖管理、版本控制和与包/容器注册表的集成,进一步加强治理模型。2. Publisher SDK(packages/sdk/)
3. Publisher应用(packages/app/)
如果您只想运行Publisher而不修改代码,可以直接通过bunx或npx运行:
shnpx @malloy-publisher/server --port 4000 --server_root /path/to/malloy_packages
要运行指向Malloy示例的服务器:
shgit clone [***] npx @malloy-publisher/server --port 4000 --server_root .
或者,您可以在本地启动容器或使用Docker自托管。
安装Docker后,在包含您数据的新文件夹中,创建一个名为publisher.config.json的文件,内容如下:
json{ "frozenConfig": false, "projects": { "malloy-samples": "/publisher/malloy-samples" } }
该文件将告诉publisher在哪里查找Malloy示例,您可以将其克隆到新文件夹中:
shgit clone [***]
然后运行以下命令,将新克隆的示例与Docker容器链接:
shdocker run -p 4000:4000 \ -v ./publisher.config.json:/publisher/publisher.config.json \ -v ./malloy-samples:/publisher/malloy-samples \ publisher
然后,在浏览器中打开http://localhost:4000继续设置。
您可以通过附加额外的卷并在配置文件中引用它们来添加更多自己的项目。
按照以下步骤构建Publisher组件并在本地运行服务器。此项目使用 bun 作为JavaScript运行时和包管理器。
1. 初始化和更新Git子模块:
Publisher存储库使用Git子模块包含示例Malloy模型(当前是malloy-samples的分支)。这些示例用于测试和演示Publisher的功能。
首先,初始化已注册的子模块:
bashgit submodule init
然后,更新子模块以获取其内容:
bashgit submodule update
2. 安装依赖项:
使用bun安装所有必要的项目依赖项(包括服务器、SDK和应用的依赖项):
bashbun install
3. 构建项目:
将所有包(服务器、SDK、应用)的TypeScript代码编译为JavaScript:
bashbun run build:server-deploy
4. 启动Publisher服务器:
运行编译后的服务器代码。默认情况下,这将在端口4000上启动REST API服务器,在端口4040上启动MCP服务器。服务器将加载在子模块中找到的Malloy包。
bashbun run start
启动后,您通常可以在 http://localhost:4000 访问Publisher应用(如果运行),在 http://localhost:4040



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务