项目简介
DataSQRL是一个强大的开源框架,专注于通过声明性SQL定义来构建和自动化实时数据管道。它能够将复杂的SQL定义编译成高性能、可靠的数据流和数据服务,支持将数据管道部署到Docker、Kubernetes或云服务上。DataSQRL的一项核心能力是能够生成Model Context Protocol (MCP) 服务器,为大型语言模型(LLM)客户端提供标准化的数据访问工具、上下文信息和功能调用接口。
主要功能点
- 自动化数据管道: 使用简洁的SQL定义端到端的数据处理逻辑,涵盖数据摄取、转换、存储和数据服务,显著减少开发工作量。
- 生成MCP服务器: 自动将SQL定义的数据视图和业务逻辑转化为LLM可调用的工具(Tools)和可查询的资源(Resources),通过标准MCP协议与LLM客户端进行通信。
- 数据API生成: 支持生成灵活的GraphQL和RESTful API,用于前端应用开发或作为上下文检索增强生成(RAG)管道的后端。
- 数据产品创建: 能够将处理后的数据以结构化视图(例如Apache Iceberg表)的形式暴露,供数据分析师和科学家在各种数据分析工具中使用。
- 数据一致性与可靠性: 提供严格的数据一致性保证、事务处理和内置的测试框架,确保数据质量和生产级应用的稳定性。
- AI数据增强: 内置对向量嵌入、LLM补全和机器学习模型推理的支持,能够轻松集成AI能力到数据处理流程中。
- 多引擎支持: 运行时可利用Apache Kafka、Flink、Iceberg和PostgreSQL等成熟的开源技术。
安装步骤
DataSQRL主要是一个编译时工具,负责根据您的SQL脚本生成部署资产,并可用于运行本地开发服务器。以下是使用Docker启动DataSQRL MCP服务器的简明步骤:
-
安装Docker: 确保您的系统已安装Docker。如果尚未安装,请访问Docker官方网站获取安装指南。
-
创建SQL脚本文件: 在您的项目目录中创建一个 '.sqrl' 文件,例如 'usertokens.sqrl'。此文件将定义您要暴露给MCP服务器的数据和功能。
/*+no_query */ CREATE TABLE UserTokens ( userid BIGINT NOT NULL, tokens BIGINT NOT NULL, request_time TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp' ); /*+query_by_all(userid) */ TotalUserTokens := SELECT userid, sum(tokens) as total_tokens, count(tokens) as total_requests FROM UserTokens GROUP BY userid; UsageAlert := SUBSCRIBE SELECT * FROM UserTokens WHERE tokens > 100000; -
运行DataSQRL并启动MCP服务器: 打开终端或命令行工具,导航到包含 'usertokens.sqrl' 文件的目录,然后执行以下Docker命令:
docker run -it --rm -p 8888:8888 -p 8081:8081 -v $PWD:/build datasqrl/cmd run usertokens.sqrl- 温馨提示: 在Windows PowerShell中,请使用 '${PWD}' 替换 '$PWD'。
-
访问MCP服务器: 命令成功执行后,DataSQRL将启动一个MCP服务器和一个GraphQL API。
- MCP服务器的访问地址为:'http://localhost:8888/mcp/'
- GraphQL API的GraphiQL界面地址为:'http://localhost:8888/graphiql/' 您可以通过浏览器访问这些地址来查看服务状态和API文档。
-
终止服务器: 在终端中按下 'CTRL-C' 即可停止正在运行的DataSQRL管道和服务器。
-
编译部署资产 (可选): 如果您希望为生产环境生成部署文件(例如用于Kubernetes或云服务),可以运行以下命令:
docker run --rm -v $PWD:/build datasqrl/cmd compile usertokens.sqrl这将在您项目的 'build/deploy' 目录下生成Flink执行计划、Kafka主题定义、PostgreSQL数据库schema、MCP工具定义和GraphQL数据模型等文件。
服务器配置
MCP客户端需要配置DataSQRL启动的MCP服务器的相关信息,以便建立连接并调用其提供的上下文信息和工具。以下是MCP客户端配置DataSQRL MCP服务器的JSON格式示例及参数说明:
{ "server_name": "DataSQRL MCP Server (本地演示)", "command": "docker", "args": [ "run", "-it", "--rm", "-p", "8888:8888", "-p", "8081:8081", "-v", "${current_working_directory}:/build", "datasqrl/cmd", "run", "usertokens.sqrl" ], "endpoint": "http://localhost:8888/mcp/", "description": "此MCP服务器由DataSQRL框架启动,用于根据指定的SQL脚本(如usertokens.sqrl)提供LLM工具和数据上下文。它支持LLM通过JSON-RPC协议调用定义的函数和查询数据。需确保Docker已安装且当前工作目录下存在相应的SQRL脚本文件。", "auth_required": false, "protocols": ["http"] }
- 'server_name': 服务器的友好名称,方便用户识别。例如:"DataSQRL MCP Server (本地演示)"。
- 'command': 用于启动MCP服务器的外部命令。对于DataSQRL,通常是"docker"。
- 'args': 一个字符串数组,包含传递给 'command' 的所有参数。例如:
- '"run"': Docker命令,用于运行容器。
- '-it --rm': Docker运行选项,分配伪TTY,交互式运行并容器退出时自动删除。
- '-p 8888:8888 -p 8081:8081': 端口映射,将容器内部的8888和8081端口分别映射到宿主机的8888和8081端口。
- '-v "${current_working_directory}:/build"': 卷挂载,将MCP客户端的当前工作目录('$PWD' 或 '${current_working_directory}')挂载到Docker容器的 '/build' 目录,以便容器能够找到并执行 'usertokens.sqrl' 文件。
- '"datasqrl/cmd"': 指定要运行的Docker镜像名称。
- '"run"', '"usertokens.sqrl"': DataSQRL命令行工具的子命令和目标SQL脚本文件。
- 'endpoint': MCP服务器的完整访问URL,LLM客户端将向此地址发送请求。例如:"http://localhost:8888/mcp/"。
- 'description': 服务器功能的简要说明,帮助用户理解其用途和提供的能力。
- 'auth_required': 一个布尔值,指示此MCP服务器是否需要认证。DataSQRL支持JWT认证。
- 'protocols': 服务器支持的传输协议列表,例如 '["http"]'。
基本使用方法
一旦DataSQRL MCP服务器启动并运行,LLM客户端就可以通过发送JSON-RPC请求来调用其中定义的工具和查询数据。以 'usertokens.sqrl' 示例为例:
- 数据写入(调用工具): LLM客户端可以发送请求调用 'UserTokens' 工具,模拟用户令牌消费数据的写入。例如,可以向DataSQRL服务器发送一个JSON-RPC请求,包含新用户的 'userid'、'tokens' 和 'request_time'。
- 数据查询(调用工具): LLM客户端可以调用 'TotalUserTokens' 工具,查询特定用户的总令牌消耗和请求次数。客户端将发送一个包含 'userid' 参数的请求,服务器会返回该用户的聚合令牌使用情况。
- 实时通知(订阅): 如果LLM客户端支持SSE或WebSocket等订阅协议,'UsageAlert' 将作为实时数据源。当任何用户的令牌消耗量超过预设阈值(例如100000)时,MCP服务器会主动向订阅的客户端发送实时通知。
DataSQRL会自动根据您在SQL脚本中定义的逻辑,处理这些请求和通知,执行底层数据操作和查询,并将结果以标准化的JSON-RPC响应格式返回给LLM客户端,从而实现LLM与实时数据管道的无缝集成。
信息
分类
开发者工具