Presto如何使用

接下来我们讲解如何实际使用 Presto(这里的概念同样适用于其分支 Trino,这也是目前更主流的选择)。

使用 Presto 主要分为几个步骤:连接集群选择目录和模式编写 SQL 查询。下面我们详细展开。


第一步:连接 Presto 集群

要使用 Presto,你首先需要知道 Presto 集群的 Coordinator 节点的地址和端口。通常由运维团队或数据平台团队提供。

有多种方式可以连接:

  1. 命令行界面 (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: 你的用户名,用于权限识别。
  2. 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
    • 注意:对于 Trino,JDBC Driver 的类名为 io.trino.jdbc.TrinoDriver
  3. Web UI
    Presto Coordinator 通常会提供一个 Web 界面(端口通常是 8080),你可以在浏览器中访问它(如 http://presto-coordinator.example.com:8080)来监控集群状态、查看正在运行和已结束的查询。


第二步:理解核心概念:Catalog, Schema, Table

在编写 SQL 之前,必须理解 Presto 的三层结构,这关乎到你如何定位一张表。

  1. Catalog (--catalog):

    • 对应一个数据源。它通过一个特定的连接器(connector)定义了一个外部数据源的位置。
    • 示例hive (连接到一个 Hive 数据仓库),mysql (连接到一个 MySQL 服务器),tpch (TPCH 基准测试数据),jmx (Java 管理扩展数据),kafka (连接到一个 Kafka 集群)等。
  2. Schema (--schema):

    • 在传统数据库术语中,这类似于数据库。它是 Catalog 下的一个命名空间,包含了一系列表和视图。
    • 示例:在 hive catalog 下,可能有 default, log, ads 等 schema。在 mysql catalog 下,schema 就是 MySQL 中的数据库名,如 website_db
  3. 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

第四步:进阶使用和技巧

  1. 配置与优化

    • 普通用户通常不需要关心。但了解一些关键配置有助于写出高性能查询,例如处理大表 JOIN 时的distributed_joinspill相关配置。
  2. 资源组 (Resource Groups)

    • 大型集群中,管理员会设置资源组来隔离不同团队或用户的查询,防止一个人的慢查询拖垮整个集群。你可能会被分配到某个资源组。
  3. 查询语法

    • Presto/Trino 支持非常丰富的 SQL 语法和函数,包括窗口函数、Lambda 表达式、JSON 函数、地理空间函数等。务必查阅官方文档以充分利用其能力。

总结:使用流程

  1. 获取连接信息:从管理员那里获取 Coordinator 地址、端口,以及你有权限访问的 Catalog。
  2. 选择工具连接:使用 CLI、DBeaver、Tableau 或程序代码通过 JDBC 连接。
  3. 探索数据:使用 SHOWDESCRIBE 命令查看有哪些数据源、数据库和表。
  4. 编写查询:使用标准 SQL 进行查询。大胆尝试跨数据源的关联查询。
  5. 获取结果:执行查询,快速获取交互式分析结果。

对于初学者,最好的学习方式就是直接连接一个测试集群,然后运行 SHOW CATALOGS; 开始你的探索之旅

版本:presto-server-0.214.tar软件版本 presto-cli-0.214-executableCentOS71、presto的起因 hadoop ---hdfs----MR(java)-----hivehive底层原理用MR,速度比较慢,公司hadoop集群主要集中于晚上到凌晨,平日工作时间负载不是很高。但在工作时间内,公司业务人员有实时查询的需求,现在主要借助于hive提供业务人员的查询。hive是基于MR类的SQL查询工具,他会输入的查询SQL解析为MapReduce,能极大的降低使用大数据门槛,让一般的业务人员可以直接准对大数据进行查询,但是有一个利弊,它的查询基于MR,会让人等待比较着急,等待的时间可能是几个小时或者一天。 spark基于内存提高改良的hive,sql,现在factbook在hive上面开发一套利器,准对hive可以通过sql语句快速查询,presto。2、Facebook为何开发Presto  Facebook的2011的数据仓库存储在少量大型hadoopfs集群,Hive是FaceBook在几年前专门为Hadoop打造的一款数据仓库工具,在以前,facebook的科学家和分析师一直靠hive进行数据分析.但hive使用MR作为底层计算框架,是专为批处理设计的,但是随着数据的不断增多,使用hive进行一个简单的数据查询可能要花费分钟或者几个小时,显然不能满足查询需求,FaceBooke也调研了其他比hive更快的工具,但是他们需要在功能有限的条件下做简单操作,以至于无法操作Facebook庞大的数据要求。2012年开始研究自己的框架--presto,每日可以超过1pb查询,而且速度比较快,faceBook声称Presto的性能比hive要好上10倍或者100倍,presto和hive都是facebook开发的 Presto是一个开源的分布式SQL查询引擎,适用于交互式查询,数据量支持GB到PB字节。Presto的设计和编写完全是为了解决Facebook这样规模的商业数据仓库交互式分析和处理速度的问题Presto可以做什么 Presto支持在线数据查询,包括Hive kafka Cassandra关系数据库以及专门数据存储,一条Presto查询可以将多个数据源进行合并,可以跨越整个组织进行分析。Presto以分析师的需求作为目标,他们期望相应速度小于1秒到几分钟,Presto要么在使用速度的快的昂贵的商业方案,提高内存,要么是消耗大量的硬件进行快速查询。(128G 64G)本套课程教给如何在企业环境中使用Presto技术。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值