Official repository of Trino, the distributed SQL query engine for big data, formerly known as PrestoSQL (https://trino.io)
💡 Use Cases
Trino最适合需要高性能、跨数据源SQL查询的大数据分析和交互式探索场景。
跨数据源统一查询
Problem: 开发者需要从多个异构数据源(如Hive、MySQL、Kafka、S3)中查询数据,但不想编写复杂的ETL流程或在不同系统间切换。
Solution: 使用Trino作为统一查询层,通过其丰富的连接器直接查询各种数据源,用标准SQL一次查询多个系统。
Example: 营销团队需要分析存储在Hive中的用户行为数据、MySQL中的订单数据以及S3中的日志数据,通过Trino可以编写一条SQL JOIN查询直接获取综合分析结果。
实时数据湖分析
Problem: 数据科学家需要快速分析存储在数据湖(如HDFS、S3)中的海量数据,但传统Hive查询速度慢,无法满足交互式分析需求。
Solution: 部署Trino作为高性能查询引擎,利用其内存计算和分布式架构,对数据湖中的Parquet、ORC等格式文件进行秒级查询。
Example: 分析师需要查询存储在S3上的10TB销售数据,使用Trino可以在几秒内完成复杂的聚合查询,而传统Hive可能需要数分钟。
BI工具统一接入
Problem: 企业使用Tableau、Superset等BI工具,但后端数据源分散,每个工具需要单独配置连接,维护成本高。
Solution: 将Trino作为统一的JDBC数据源,BI工具只需连接Trino即可访问所有底层数据源,简化架构和维护。
Example: 财务部门用Tableau查看MySQL中的财务数据,运营部门用Superset分析Hive中的运营指标,两者都通过Trino JDBC连接,无需分别配置。
数据仓库加速查询
Problem: 现有数据仓库(如Hive)查询性能不足,但迁移到商业数据仓库成本高昂,且需要保持现有数据存储格式。
Solution: 在现有Hive/Hadoop集群上部署Trino作为加速层,对相同数据提供10-100倍的查询性能提升,无需数据迁移。
Example: 电商公司的Hive查询报表需要30分钟才能完成,部署Trino后相同查询只需30秒,团队可以更频繁地进行数据探索。
📊 Project Info
- Language
- Java
- Stars
- ⭐ 12,888
- Forks
- 3,633
- Today
- +7
- Ranking
- #14
- Collection
- Language
- Trending Date
- June 2, 2026
- Last Push
- 6/2/2026
🏷️ Topics
Difficulty
中级
Est. Time
2-3天
Target Audience
有一定Java基础,对大数据技术感兴趣,希望了解分布式查询引擎工作原理的开发者、数据工程师或数据分析师。
🎯 What You'll Learn
能够理解Trino的基本架构,在本地成功构建并运行一个开发/测试版本的Trino服务器,并使用CLI执行简单的SQL查询。
📋 Prerequisites
Trino项目使用Java编写,理解Java语法、面向对象概念和基本的Maven项目结构是阅读和运行代码的基础。
Trino使用Maven进行构建和依赖管理,需要了解如何使用Maven命令(如clean, install)来编译项目。
Trino是一个SQL查询引擎,了解基本的SQL语法(如SELECT, FROM, WHERE)是使用和测试它的前提。
需要在终端执行构建命令、运行CLI等操作。
项目构建可能需要Docker环境(根据README),用于某些测试或依赖。
📚 Resources
Trino User Manual
官方用户手册,包含部署、配置、连接器使用、SQL语法等最全面的信息。
DEVELOPMENT 文档
项目内的DEVELOPMENT文件,包含开发流程、代码风格和插件实现指南,是参与贡献的必读材料。
CONTRIBUTING 文档
项目贡献指南,说明了提交代码的要求和流程。
Trino Slack / GitHub Discussions
遇到问题时,可以在这里向社区提问或搜索历史讨论。
🗺️ Learning Phases
环境准备与项目初探
检查并安装必要软件
根据README,确保你的系统(Mac OS X或Linux)满足要求:安装Java 25.0.1+(64位)、Docker,并确保SELinux等不影响源码目录写入。如果是Apple Silicon Mac,需安装Rosetta 2。
克隆项目到本地
使用Git将Trino项目克隆到本地:`git clone https://github.com/trinodb/trino.git`,然后进入项目根目录。
浏览项目结构
在IDE(推荐IntelliJ IDEA)中打开项目,或直接在文件系统中查看。重点了解核心模块如 `trino-main` (主服务器)、`trino-spi` (服务提供者接口)、`trino-cli` (命令行客户端)以及各个connector模块(如`trino-tpch`)。
首次构建项目
执行Maven构建
在项目根目录下,运行README中提供的命令:`./mvnw clean install -DskipTests`。这个命令会下载所有依赖并编译项目,跳过耗时的测试。
验证构建结果
构建成功后,可以在各模块的 `target` 目录下找到生成的JAR文件。例如,CLI可执行JAR的路径为 `client/trino-cli/target/trino-cli-*-executable.jar`。
在IDE中运行与体验
配置IDE项目
在IntelliJ IDEA中,确保项目SDK配置为JDK 25,项目语言级别设置为25。
运行测试服务器(最简单方式)
在IDE中找到并运行 `TpchQueryRunner` 类(通常在 `trino-tpch` 模块中)。这会在本地启动一个集成了TPCH连接器的Trino开发服务器。注意可能需要添加VM选项 `--add-modules jdk.incubator.vector`。
使用CLI连接并查询
在终端中,导航到 `client/trino-cli/target` 目录,运行 `java -jar trino-cli-*-executable.jar` 启动CLI。默认会连接到本地运行的 `TpchQueryRunner` 服务器。尝试执行README中的示例查询:`SELECT * FROM tpch.tiny.region;` 和 `SELECT * FROM system.runtime.nodes;`。
运行完整开发服务器
配置并运行DevelopmentServer
在IDE中创建一个运行配置:主类为 `io.trino.server.DevelopmentServer`;VM选项参考README或对应模块pom.xml中的 `air.test.jvm.additional-arguments` 属性(通常包含 `--add-modules jdk.incubator.vector`);工作目录设置为 `$MODULEDIR$`(自动指向 `trino-server-dev` 模块目录);使用 `trino-server-dev` 模块的类路径。然后运行此配置。
探索插件与Catalog配置
查看 `trino-server-dev` 模块下的 `config.properties` 文件,理解 `plugin.bundles` 如何指定插件。在 `testing/trino-server-dev/etc/catalog` 目录下查看或创建连接器的属性文件(如 `tpch.properties`)。尝试修改配置,重启服务器观察变化。
⚠️ Common Mistakes
❌ Java版本不匹配
✅ 严格使用Java 25.0.1+(64位)。使用 `java -version` 确认版本和位数,并在IDE中正确配置项目SDK。
❌ 构建时内存不足或超时
✅ 首次构建依赖下载量大且耗时,确保网络稳定。可以考虑为Maven设置更大的堆空间(如 `MAVEN_OPTS=-Xmx2g`)或在网络条件好时进行。
❌ 运行 `TpchQueryRunner` 或 `DevelopmentServer` 时缺少VM参数
✅ 务必添加 `--add-modules jdk.incubator.vector` 参数。其他必要参数请参考对应模块 `pom.xml` 中的 `air.test.jvm.additional-arguments` 属性。
❌ CLI连接服务器失败
✅ 首先确认服务器已成功启动(查看日志无错误)。确认CLI连接的地址和端口(默认 `localhost:8080`)与服务器监听地址一致。检查是否有防火墙或端口冲突。
❌ 修改配置后服务器行为未改变
✅ 确保修改的是正确的配置文件(`trino-server-dev` 模块下的配置文件)。修改后需要完全重启服务器,而不仅是重新运行main方法(在IDE中停止再启动)。
🚀 Next Steps
1. 深入阅读一个连接器(如`trino-tpch`或`trino-hive`)的源码,理解SPI接口如何被实现。 2. 尝试实现一个简单的自定义函数(UDF)或连接器插件。 3. 学习如何配置一个多节点的Trino集群进行测试。 4. 阅读查询执行计划,了解Trino如何解析、优化和执行SQL。 5. 关注项目GitHub的Issues和Pull Requests,尝试解决一个简单的Good First Issue。
