doris 根据文件夹id,一条sql语句获取到它本身及所有子文件、孙文件
取决于 Apache Doris 的版本。Apache Doris 是基于 MySQL 协议开发的 MPP 架构 OLAP 数据库。它的 SQL 兼容性在近年来提升很快但递归查询的支持情况如下1. 核心结论Doris 2.0 及以上版本支持。可以使用WITH RECURSIVE语法与 MySQL 8.0 类似。Doris 1.x 版本不支持。旧版本不支持递归 CTE。方案一使用递归 CTE (适用于 Doris 2.0)如果你的 Doris 集群版本较新建议 2.0.0 以上语法与 MySQL 8.0 完全一致。前提表结构为邻接表模型id,parent_id。WITH RECURSIVE FolderTree AS ( -- 1. 锚点查询起始文件夹 SELECT id, parent_id, name, 0 AS depth FROM folders WHERE id 100 -- 替换为你的文件夹 ID UNION ALL -- 2. 递归查询子节点 SELECT f.id, f.parent_id, f.name, ft.depth 1 FROM folders f INNER JOIN FolderTree ft ON f.parent_id ft.id ) SELECT * FROM FolderTree;注意事项版本检查在执行前请确认SHOW VERSION;确保是 2.0。性能警告Doris 是OLAP分析型数据库擅长海量数据聚合不擅长这种点查 递归的 OLTP事务型场景。如果文件夹层级非常深例如超过 100 层或数据量极大递归查询可能会导致 FE前端节点负载过高或查询超时。递归深度限制Doris 内部可能有递归深度限制如果层级过深可能会报错。方案二路径枚举法 (推荐用于 Doris)这是在 Doris 中更推荐的方案。由于 Doris 的设计初衷是加速分析查询避免在查询时进行复杂的递归计算是最佳实践。通过在写入时维护好path字段查询时只需一次简单的LIKE匹配性能远好于递归 CTE。1. 表结构建议增加一个path字段存储从根到当前节点的所有 ID 路径。CREATE TABLE folders ( id BIGINT, parent_id BIGINT, name VARCHAR(255), path VARCHAR(2048), -- 例如,1,5,100, INDEX idx_path (path) -- Doris 支持前缀索引或倒排索引优化 LIKE ) ENGINEOLAP DUPLICATE KEY(id) DISTRIBUTED BY HASH(id) BUCKETS 10;2. 数据示例根节点 (ID 1):path ,1,子节点 (ID 5):path ,1,5,孙节点 (ID 100):path ,1,5,100,3. 查询语句假设你要查 ID 为100的文件夹及其所有子孙。首先你需要知道100的path是,1,5,100,。-- 方法 A: 如果你已知该节点的路径 SELECT * FROM folders WHERE path LIKE ,1,5,100,%; -- 方法 B: 如果你只知道 ID不知道路径可以结合子查询 (依然是一条 SQL) SELECT * FROM folders WHERE path LIKE ( SELECT CONCAT(path, %) FROM folders WHERE id 100 );为什么在 Doris 中推荐方案二性能极高LIKE prefix%可以利用索引避免递归计算开销。兼容性好支持所有 Doris 版本包括 1.x。符合 OLAP 特性将计算复杂度从“读时”转移到了“写时”插入/更新文件夹时维护 path更适合 Doris 的批量写入和快速查询模型。总结建议场景推荐方案原因Doris 2.0 且层级浅WITH RECURSIVE语法标准无需改表结构适合临时查询。生产环境 / 高频查询路径枚举 (path字段)最推荐。查询性能最好不依赖版本避免递归带来的 FE 压力。Doris 1.x路径枚举 (path字段)唯一可行的一条 SQL 方案。特别提醒文件/文件夹的层级关系通常属于元数据Metadata数据量相对较小但关系复杂。如果这是核心业务元数据通常建议存放在MySQL / PostgreSQL中。如果存放在Doris中通常是为了配合文件的其他业务数据如文件大小、创建时间、日志等进行联合分析。如果是这种情况方案二路径枚举是绝对的首选。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2428647.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!