Trino 是什么
Trino 是分布式的 MPP SQL 查询引擎,本身不存数据,而是通过 catalog 连接器把 Hive、Iceberg、MySQL、Kafka 等异构数据源接入同一套 SQL 语义。它把「查询」和「存储」拆开:数据仍留在原处,Trino 只做并行读取与计算,因此特别适合对湖上数据做交互式分析,也适合把仓库表与业务库临时 join 起来查问题。代价是每次查询都要现读现算,没有本地缓存兜底。
基本信息
| 定位 | 多数据源联邦查询,不存储数据 |
|---|---|
| catalog | hive / iceberg / mysql 等连接器命名空间 |
| 三层命名 | catalog.schema.table |
| 调用方式 | trino CLI、JDBC、BI 工具 |
| 配置位置 | 协调节点上的连接器配置文件,按 catalog 名称命名 |
| 适用场景 | 交互式探索、临时分析、跨源报表 |
CLI 查询示例
CLI 查询示例
trino --server http://trino-coordinator:8080 \
--catalog hive --schema dwd \
--execute "SELECT channel, count(*) FROM orders WHERE dt='2026-10-11' GROUP BY channel;"
trino --server http://trino-coordinator:8080 --catalog system --execute "SHOW CATALOGS;"
# 交互模式下的常用语句
# SHOW SCHEMAS FROM hive;
# EXPLAIN (TYPE DISTRIBUTED) SELECT ...; -- 看查询计划再决定是否全跑典型使用场景
- 湖上即席分析:对 Iceberg、Hive 表做交互式查询,不用等 Spark 作业排队
- 跨源关联:把数仓宽表与 MySQL 维表放在一条 SQL 里 join
- 报表查询:BI 工具通过 JDBC 连 Trino,避免直接压业务库
- 数据核查:临时抽查某个分区的行数与空值比例
- 轻量 ETL:把查询结果 CTAS 到目标表,替代部分小批量加工
- 配额管控:通过资源组给不同团队划分查询额度,避免个别大查询挤占集群
常用操作读法
| 操作 | 作用 | 注意 |
|---|---|---|
| SHOW CATALOGS | 列出已配置的数据源 | 表不可见时先查这里 |
| SHOW SCHEMAS | 列出库/命名空间 | 需要指定 catalog |
| EXPLAIN | 查看查询计划 | 先看是否发生全表扫描 |
| DESCRIBE | 查看表结构 | 确认分区列与类型 |
| 查询超时/内存报错 | 资源组或单查询上限触发 | 缩小范围或申请更大资源组 |
大基数组聚合、超宽 join 容易触发查询内存上限;注意拆分查询或调大资源组限制。
Trino 读取的是外部数据源的元数据与文件,表的统计信息不新鲜时优化器可能选错连接顺序;重要查询执行前先看 EXPLAIN 输出。