多模联邦查询网关:ABP + Trino/Presto 聚合跨源数据 🚀
📚 目录
- 多模联邦查询网关:ABP + Trino/Presto 聚合跨源数据 🚀
0. TL;DR 🧾
- 引擎:Trino 做联邦查询(多 Catalog 单点聚合);网关:ABP 做多租户身份穿透、列掩码/行过滤策略注入、配额与审计、路由(Trino 或源端直连只读)。
- 客户端协议:只用
POST /v1/statement提交;解析响应体nextUri循环 GET 拉取;需要取消则 DELETE nextUri;请求头使用标准X-Trino-*。 - 性能主轴:动态过滤(默认开启) + CBO(Join 重排/分发自动选择,广播上限可控)。
- 治理主轴:Resource Groups 分队列限流;FTE+Exchange 抗节点故障;Worker 优雅下线 保障维护期稳定。
1. 场景与边界 🎯
- 目标:统一查询入口,跨 PostgreSQL(维/主数据)、对象存储(ORC/Parquet on S3/MinIO,经 Hive/Iceberg 编目)、Kafka(事件流)与若干 OLAP 明细/汇总。
- 非目标:不讨论“单库一体化”(如纯 ClickHouse/DuckDB);本文聚焦联邦与网关治理。
2. 总体架构 🧩
-
ABP 网关(
Abp.FederatedQueryGateway)- 从
ICurrentTenant/ICurrentUser获取上下文 → 映射到X-Trino-User、X-Trino-Source、X-Trino-Client-Tags、X-Trino-Session(如join_reordering_strategy/join_distribution_type);必要时加X-Trino-Routing-Group对接 Trino Gateway。 - 安全:把租户/角色映射为 File-based/OPA 的列掩码与行过滤策略(引擎强制);应用层再做白名单/禁用昂贵模式。
- 审计/配额:事件监听(HTTP/MySQL/Kafka/OpenLineage)做“查询层”审计,ABP 聚合看板与熔断。
- 从
-
Trino 联邦层
- Coordinator + Workers,多 Catalog(Hive/Iceberg、Postgres、Kafka、JDBC…);Resource Groups 以
source/clientTags限流与排队。
- Coordinator + Workers,多 Catalog(Hive/Iceberg、Postgres、Kafka、JDBC…);Resource Groups 以
3. 权限与最小可见(引擎层强制)🔐
3.1 File-based Access Control
etc/access-control.properties:access-control.name=file+ JSON 规则(系统信息/对象级/列级规则),支持列掩码与行过滤;系统信息规则里可放行优雅下线所需写权限。
3.2 OPA Access Control
access-control.name=opa+opa.policy.*端点;OPA 返回列掩码表达式与行过滤谓词并由 Trino 强制应用。适合把 ABP 角色/租户映射为 Rego 决策。
选择建议:小团队优先 File-based(维护简单);需要统一策略/审计/合规时再上 OPA/Ranger。
4. 路由与优化策略(DF + CBO)⚡
-
动态过滤 DF(默认开启)
-
全局关闭:
enable-dynamic-filtering=false;会话关闭:enable_dynamic_filtering=false。 -
等待收集(按连接器配置):
- JDBC:
dynamic-filtering.wait-timeout - Hive:
hive.dynamic-filtering.wait-timeout - Iceberg:
iceberg.dynamic-filtering.wait-timeout
- JDBC:
-
作用:在“维表(小)↔ 明细(大)”Join 中,将维表键值作为运行时谓词,下推到扫描/分区裁剪,显著减少 IO 与网络。
-
-
CBO & Join 分发/重排
-
配置(
config.properties):optimizer.join-reordering-strategy=AUTOMATIC(会话:join_reordering_strategy)join-distribution-type=AUTOMATIC(会话:join_distribution_type)- 广播上限:
join-max-broadcast-table-size(会话:join_max_broadcast_table_size,默认 100MB)
-

最低0.47元/天 解锁文章
7150

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



