如何从Apache Superset向PrestoDB跨目录查询及配置SQLAlchemy URI
在Apache Superset中通过PrestoDB查询跨目录表的方法
刚好之前处理过类似的跨目录查询需求,我来一步步给你讲清楚怎么配置和操作:
1. 配置Superset连接PrestoDB的SQLAlchemy URI
首先你需要在Superset里创建一个PrestoDB的数据源,对应的SQLAlchemy URI格式如下:
presto://<username>:<password>@<presto-coordinator-host>:<port>/<default-catalog>/<default-schema>
- 参数说明:
<username>: 访问PrestoDB的用户名(如果无需密码,直接去掉:<password>部分即可)<presto-coordinator-host>: Presto协调器的主机地址或域名<port>: Presto协调器的端口,默认是8080<default-catalog>: 连接时默认使用的目录(比如hive或者mysql,这个只是默认值,完全不影响跨目录查询)<default-schema>: 默认使用的schema
举个实际示例:假设你的Presto协调器地址是presto-server:8080,用户名是superset_user,无密码,默认目录选hive,默认schema是default,那URI就是:
presto://superset_user@presto-server:8080/hive/default
2. 编写跨目录联合查询的SQL
在Superset的SQL Lab或者图表查询中,你只需要用<catalog>.<schema>.<table>的完整路径来引用不同目录下的表,就能实现跨MySQL和Hive的联合查询。
比如,要关联MySQL目录下sales schema的orders表,和Hive目录下warehouse schema的products表,SQL可以这么写:
SELECT o.order_id, p.product_name, o.quantity, o.order_date, p.price * o.quantity AS total_amount FROM mysql.sales.orders o INNER JOIN hive.warehouse.products p ON o.product_id = p.product_id WHERE o.order_date >= '2024-01-01' ORDER BY o.order_date DESC
3. 关键注意事项
- 确保你的PrestoDB已经正确配置了MySQL和Hive的连接器,并且这两个连接器状态正常(可以在Presto的Web UI里查看连接器状态)
- 确认Superset使用的Presto用户拥有访问这两个目录、对应schema和表的权限,否则会出现权限拒绝的错误
- 如果遇到查询性能问题,可以检查Presto的资源配置,或者给查询添加合理的过滤条件减少数据量
内容的提问来源于stack exchange,提问作者Casel Chen
相关产品推荐
相关产品推荐

