接下来我们讲解如何实际使用 Presto(这里的概念同样适用于其分支 Trino,这也是目前更主流的选择)。
使用 Presto 主要分为几个步骤:连接集群、选择目录和模式、编写 SQL 查询。下面我们详细展开。
第一步:连接 Presto 集群
要使用 Presto,你首先需要知道 Presto 集群的 Coordinator 节点的地址和端口。通常由运维团队或数据平台团队提供。
有多种方式可以连接:
-
命令行界面 (CLI):
这是最直接的方式。你需要先下载 Presto 的 CLI jar 文件。# 示例连接命令 ./presto-cli --server <coordinator-host>:<port> --catalog <default-catalog> --schema <default-schema> --user <your-name>--server: Coordinator 的主机名和端口(通常是 8080)。--catalog: 指定默认的目录(数据源),例如hive。--schema: 指定默认的模式(数据库),例如default。--user: 你的用户名,用于权限识别。
-
JDBC / ODBC 驱动:
这是最常用的方式,允许各种应用程序和 BI 工具(如 Tableau, DBeaver, Superset, Java/Python 程序)连接 Presto。- JDBC URL 格式:
jdbc:presto://<host>:<port>/<catalog>/<schema> - 示例(在 DBeaver 中新建连接):
- JDBC URL:
jdbc:presto://presto-coordinator.example.com:8080/hive/default - 驱动类:
com.facebook.presto.jdbc.PrestoDriver
- JDBC URL:
- 注意:对于 Trino,JDBC Driver 的类名为
io.trino.jdbc.TrinoDriver。
- JDBC URL 格式:
-
Web UI:
Presto Coordinator 通常会提供一个 Web 界面(端口通常是 8080),你可以在浏览器中访问它(如http://presto-coordinator.example.com:8080)来监控集群状态、查看正在运行和已结束的查询。
第二步:理解核心概念:Catalog, Schema, Table
在编写 SQL 之前,必须理解 Presto 的三层结构,这关乎到你如何定位一张表。
-
Catalog (
--catalog):- 对应一个数据源。它通过一个特定的连接器(connector)定义了一个外部数据源的位置。
- 示例:
hive(连接到一个 Hive 数据仓库),mysql(连接到一个 MySQL 服务器),tpch(TPCH 基准测试数据),jmx(Java 管理扩展数据),kafka(连接到一个 Kafka 集群)等。
-
Schema (
--schema):- 在传统数据库术语中,这类似于数据库。它是 Catalog 下的一个命名空间,包含了一系列表和视图。
- 示例:在
hivecatalog 下,可能有default,log,ads等 schema。在mysqlcatalog 下,schema 就是 MySQL 中的数据库名,如website_db。
-
Table:
- 就是大家熟知的表,存在于特定的 Schema 中。
完全限定表名:
要明确指定一张表,格式是:<catalog>.<schema>.<table_name>
示例:
hive.default.users: 查询 Hive 数据源中default数据库下的users表。mysql.website_db.orders: 查询 MySQL 数据源中website_db数据库下的orders表。
第三步:编写和运行 SQL 查询
连接成功后,你就可以像使用传统数据库一样编写标准 ANSI SQL 了。
1. 基本查询
-- 查询 hive.default 下的员工表
SELECT * FROM hive.default.employees WHERE department = 'Engineering';
2. 多数据源联邦查询 (这是 Presto/Trino 的精华)
假设你的用户数据在 MySQL 里,用户行为日志在 Hive 里,你想分析工程师们的行为。
SELECT
u.name,
u.department,
COUNT(l.action) as action_count
FROM
mysql.website_db.users u -- 从MySQL取用户信息
JOIN
hive.log.user_actions l -- 从Hive取行为日志
ON u.id = l.user_id
WHERE
u.department = 'Engineering'
AND l.event_date = CURRENT_DATE
GROUP BY
u.name, u.department
ORDER BY
action_count DESC;
这条 SQL 完美展示了 Presto 的价值: 它自动在后台从 MySQL 和 Hive 中获取数据,在内存中进行关联、聚合和计算,最终返回一个统一的结果。
3. 查看元信息(探索有哪些数据可用)
-- 查看所有可用的 Catalog(数据源)
SHOW CATALOGS;
-- 查看某个 Catalog(如 hive)下有哪些 Schema(数据库)
SHOW SCHEMAS FROM hive;
-- 查看某个 Schema(如 hive.default)下有哪些表
SHOW TABLES FROM hive.default;
-- 查看某张表(如 hive.default.employees)的结构
DESCRIBE hive.default.employees;
4. 创建视图
你可以将复杂的查询,特别是联邦查询,保存为视图,方便下次使用。视图元数据存储在 Presto 中。
CREATE VIEW hive.default.engineering_activity AS
SELECT ... -- 上面那条复杂的联邦查询SQL
第四步:进阶使用和技巧
-
配置与优化:
- 普通用户通常不需要关心。但了解一些关键配置有助于写出高性能查询,例如处理大表 JOIN 时的
distributed_join和spill相关配置。
- 普通用户通常不需要关心。但了解一些关键配置有助于写出高性能查询,例如处理大表 JOIN 时的
-
资源组 (Resource Groups):
- 大型集群中,管理员会设置资源组来隔离不同团队或用户的查询,防止一个人的慢查询拖垮整个集群。你可能会被分配到某个资源组。
-
查询语法:
- Presto/Trino 支持非常丰富的 SQL 语法和函数,包括窗口函数、Lambda 表达式、JSON 函数、地理空间函数等。务必查阅官方文档以充分利用其能力。
总结:使用流程
- 获取连接信息:从管理员那里获取 Coordinator 地址、端口,以及你有权限访问的 Catalog。
- 选择工具连接:使用 CLI、DBeaver、Tableau 或程序代码通过 JDBC 连接。
- 探索数据:使用
SHOW和DESCRIBE命令查看有哪些数据源、数据库和表。 - 编写查询:使用标准 SQL 进行查询。大胆尝试跨数据源的关联查询。
- 获取结果:执行查询,快速获取交互式分析结果。
对于初学者,最好的学习方式就是直接连接一个测试集群,然后运行 SHOW CATALOGS; 开始你的探索之旅。
1697

被折叠的 条评论
为什么被折叠?



