数据库OLAP大数据后端【免费下载链接】druidApache Druid: a high performance real-time analytics database.项目地址https://gitcode.com/gh_mirrors/druid6/druid点击查看免费下载导读本文基于 Apache Druid 官方文档整理druid-multi-stage-query扩展Druid 24.0 起引入中多阶段查询Multi-stage Query简称 MSQ任务引擎的完整已知问题清单覆盖任务运行时行为、SELECT/INSERT/REPLACE/EXTERN/WINDOW语句的限制并结合 extensions-core/multi-stage-query 模块源码解释每个限制的底层成因与对应的错误码、上下文参数帮助你在规划 SQL 批量摄取方案时提前规避坑点并在遇到报错时快速定位根因。背景MSQ 引擎与本文定位SQL-based ingestion 由 Apache Druid 内置的druid-multi-stage-query扩展提供它新增了一个可以运行 SQL 语句作为批处理任务的多阶段查询任务引擎。该引擎支持用INSERT、REPLACE语句批量装载数据并实验性地支持把SELECT查询作为批处理任务运行。关于如何选择批量摄取方法可参考ingestion methods 表关于加载扩展与权限要求使用EXTERN需要 EXTERNAL 资源的 READ 权限见 SQL-based ingestion 总览。MSQ 引擎引入了三个核心执行角色见 index.md 词汇表Controller类型为query_controller的索引服务任务每个查询有一个 controller 负责编排执行Worker类型为query_worker的任务实际执行查询每个查询可有多个 workerworker 内部利用处理线程池至多druid.processing.numThreads并行处理Stage / Partition / Shuffle执行阶段被跨 worker 并行化INSERT/REPLACE查询的最终阶段分区会直接成为 Druid 段segmentworker 之间按分区交换数据shuffle每个输出分区按聚类键排序。理解这些概念是消化下述已知问题的前提很多限制的本质是「controller 单点职责」「worker 本地临时存储」「stage 间 shuffle 数据规模」三者的边界约束。任务运行时的已知问题容错只实现了一半worker 可重启controller 不可MSQ 引擎的容错是部分实现的当 worker 被意外杀死时会被重新拉起relaunch而当controller 被意外杀死时不会被重新拉起。从源码看容错能力由上下文参数faultTolerance控制其定义与默认值位于 MultiStageQueryContext.javaCTX_FAULT_TOLERANCE faultTolerance默认false读取逻辑在isFaultToleranceEnabled()同文件 L200-L206。同时 reference.md 明确指出faultTolerance不能与显式设置为false的durableShuffleStorage同时使用启用 fault tolerance 前必须在服务器级别配置druid.msq.intermediate.storage.enabletrue的持久化存储。相关的重启次数限制也记录在 reference.md 的 Limits 表 中限制项值超限错误码单个 worker 的最大重启次数首次运行不计即最多运行 1 workerRelaunchLimit次2TooManyAttemptsForWorker整个作业跨所有 worker 的最大重启次数100TooManyAttemptsForJob实践建议controller 是查询编排的单点。对于长时间运行的批量摄取应尽量避免直接杀死 controller 任务如需取消请走/druid/indexer/v1/task/{taskId}/shutdownAPI对应Canceled错误码见 reference.md。worker 阶段输出占用本地磁盘可能撑爆druid.indexer.task.baseDirworker 任务的阶段输出存储在druid.indexer.task.baseDir指定的工作目录中。当某个 stage 产生大量输出数据时可能耗尽该目录所在磁盘的全部空间此时查询以UnknownError失败错误信息包含No space left on device对应错误码UnknownError的message字段见 reference.md。这与另一个限制相关联MSQ 引擎还有按 worker 的临时存储上限druid.indexer.task.tmpStorageBytesPerTask若配置的临时存储不足以启动某个 stage会返回NotEnoughTemporaryStorage错误错误详情字段suggestedMinimumStorage与configuredTemporaryStorage见 reference.md。实践建议为 Indexer / MiddleManager 规划druid.indexer.task.baseDir所在磁盘容量时把「中间 shuffle 数据 段生成临时文件」都算进去不能只按最终段大小估算遇到No space left on device时检查各 worker 节点磁盘清理历史任务遗留的临时文件若报错为NotEnoughTemporaryStorage按错误详情中的suggestedMinimumStorage调大druid.indexer.task.tmpStorageBytesPerTask。SELECT语句的已知问题GROUPING SETS未实现MSQ 引擎未实现GROUPING SETS。使用该特性的查询会返回QueryNotSupported错误。错误码的源码定义位于 QueryNotSupportedFault.java其CODE常量即QueryNotSupported属于BaseMSQFault的派生类型。在 reference.md 的错误码表 中对该错误的解释是QueryKit无法把给定的原生查询翻译成多阶段查询典型触发场景就是GROUPING SETS。规避思路改用多个GROUP BY查询再UNION ALL组合结果或改写为GROUP BY 常规聚合表达式。INSERT与REPLACE语句的已知问题不支持带列列表的 INSERT / REPLACE形如INSERT INTO tbl (a, b, c) SELECT ...的带列列表写法未实现。这是与标准 SQL 的一个重要差异规划查询时不要照搬传统数据库的写法。列按「名称」而非「位置」匹配INSERT ... SELECT和REPLACE ... SELECT在插入列时依据列名匹配这与 SQL 标准中「按位置插入列」的行为不同标准行为见 reference.md 的 INSERT 章节。实践建议在SELECT列表中显式使用AS为目标列赋名不要依赖 SELECT 子句中的列顺序。例如INSERT INTO target_table SELECT src.event_time AS __time, src.user_id AS user_id, src.event_type AS event_type FROM TABLE(EXTERN(...)) PARTITIONED BY DAY未覆盖 ingestion spec 的全部选项INSERT和REPLACE并不支持 ingestion spec 中的所有选项典型缺失项包括维度属性createBitmapIndex与multiValueHandling见 dimension 对象tuningConfig 属性indexSpec见 tuningConfig。不过请注意在上下文参数层面MSQ 提供了部分等效能力。例如 reference.md 的上下文参数表 中indexSpec可以作为MSQ 查询上下文参数INSERT/REPLACE传入用于段生成时的索引配置可传 JSON 字符串或对象包括前端编码front coding 配置segmentSortOrder可以控制段内行排序rowsPerSegment默认 3,000,000、rowsInMemory默认 100,000用于控制段生成时的内存与行数行为arrayIngestMode默认mvd建议array决定 ARRAY 类型值的存储方式。结论若某项原生 ingestion spec 能力在 MSQ 中找不到对应上下文参数说明该能力当前不受 SQL-based ingestion 支持需要评估改用原生批量摄取任务。EXTERN函数的已知问题不支持 schemaless无模式维度原生摄取中 inclusions / exclusions 提供的 schemaless 维度特性在 MSQ 中不可用。所有列及其类型必须通过EXTERN函数的signature参数显式声明。EXTERN的签名 JSON 形式见 reference.md 的 EXTERN 章节SELECT column FROM TABLE( EXTERN( Druid input source, -- 任意 Druid 输入源JSON 编码字符串 Druid input format, -- 任意 Druid 输入格式JSON 编码字符串 row signature -- JSON 编码的列描述符数组 ) )其中 signature 是列描述符数组每个描述符必须包含name和typetype 支持string、long、double、float用于把外部数据映射到 SQL 层。也可以使用带EXTEND子句的 SQL 风格写法如(timestamp VARCHAR, metricType VARCHAR, value BIGINT)。实践建议在摄取脚本中维护好外部文件的列清单与类型映射当输入 schema 变化时需同步更新 signature不能指望自动发现。匹配大量文件时可能耗尽 controller 内存EXTERN配合匹配大量文件的输入源时可能耗尽controller 任务的可用内存。这与 controller 承担全局编排、收集统计信息的设计有关文件数量越多controller 侧需要维护的元数据越多。实践建议将大文件集拆分为多个较小的EXTERN查询分批摄取关注 controller 任务所在进程的内存配置必要时提升其内存配额。EXTERN只用于外部文件访问 Druid 数据源请用FROMEXTERN引用的是外部文件。如果要访问 Druid 自身的 datasource例如做「库内转换」、基于现有表的INSERT ... SELECT应使用FROM datasource而不是EXTERN。详见 index.md 中关于 in-database transformation 的说明。WINDOW函数的已知问题MSQ 引擎对窗口函数有两项限制窗口内元素数量上限为 100,000。即单个窗口window中参与计算的行数不能超过 100,000 条。这与 MSQ 的 shuffle/帧frame设计相关——窗口计算需要把窗口内数据物化到内存中。上下文参数maxRowsMaterializedInWindow定义见 MultiStageQueryContext.java可用于控制窗口内物化的行数规模规避该限制时需在「窗口划分粒度」与「内存占用」之间权衡。为规避 MSQ 引擎中的leafOperators窗口函数在窗口 stage 之后会附加一个额外的 scan stage针对原生引擎存在非空leafOperator的场景。这意味着带窗口函数的查询在计划中会比普通查询多一个执行阶段可据此理解查询计划explain中多出的 stage这属于正常现象而非故障。配套参考错误码与限制速查本文涉及的已知问题最终都会落到 reference.md 的错误码表 与 Limits 表 上。与本文直接相关的条目汇总如下场景错误码关键字段 / 处置建议GROUPING SETSQueryNotSupported改写为多个GROUP BYUNION ALL磁盘空间耗尽UnknownError消息含 No space left on device扩容druid.indexer.task.baseDir所在磁盘临时存储不足NotEnoughTemporaryStorage调大druid.indexer.task.tmpStorageBytesPerTaskcontroller 被杀Canceled检查进程稳定性避免直接杀 controller空结果 INSERT/REPLACE当failOnEmptyInserttrueInsertCannotBeEmpty默认failOnEmptyInsertfalse空 INSERT 为 no-op建议阅读顺序先读概念页理解 MSQ 执行模型再结合参考手册查询语句语法、上下文参数与错误码最后回到本文核对各项已知限制示例页提供了可运行的实战查询。总结MSQ 引擎的已知问题可以归纳为四条主线编排层controller 无容错、大文件集撑爆 controller 内存、存储层worker 阶段输出占用druid.indexer.task.baseDir磁盘、临时存储上限、SQL 语义层无GROUPING SETS、无带列列表 INSERT/REPLACE、列按名称匹配、无 schemaless 维度、窗口上限 100,000、能力边界层ingestion spec 部分选项缺失。规划 SQL-based ingestion 时围绕这四条主线做容量预估、查询改写与错误码预案即可把已知问题对生产链路的影响降到最低。赞分享数据库OLAP大数据后端【免费下载链接】druidApache Druid: a high performance real-time analytics database.项目地址https://gitcode.com/gh_mirrors/druid6/druid点击查看免费下载相关推荐Apache Druid SQL-based Ingestion API 实战指南用 MSQ 任务引擎提交与运维 INSERT/REPLACE 任务Apache Druid SQL based Ingestion API 实战指南用 MSQ 任务引擎提交与运维 INSERT/REPLACE 任务 导读 本数据库OLAP大数据后端gVisor限制说明已知限制与不兼容特性gVisor限制说明已知限制与不兼容特性 概述 gVisor作为容器应用内核虽然提供了强大的安全隔离能力但在追求安全性的同时也存在一些已知的限制和不兼容特云原生容器运行时操作系统应用安全Apache Druid 多阶段查询MSQ任务引擎SQL 批量摄取完整指南Apache Druid 多阶段查询MSQ任务引擎SQL 批量摄取完整指南 本文围绕 Apache Druid 内置的 druid multi stage数据库OLAP大数据后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
TMS320F28377D Bootloader设计与实现:Flash分区与跳转实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:40:07
EMS低频控制板硬件设计核心要点与医疗级实现 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:40:00
RedwoodJS 部署指南:从 Serverless 到 Baremetal 的全目标部署体系解析 后端前端Web框架开发工具 【免费下载链接】redwood RedwoodGraphQL 项目地址: https://gitcode.com/gh_mirrors/re/redwood 点击查看 免费下载 Redwood 框架从设计之初就同时面向 serverless 与传统服务器两类基础设施,并为两者提供了统一的持续部署流程… · 2026/9/24 16:02:42
国家中小学智慧教育平台电子课本三步存为 PDF 国家中小学智慧教育平台电子课本三步存为 PDF 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目地址: https://gitcode.c… · 2026/9/24 16:02:36
Akka Streams 快速入门:从第一个 Source 到背压与物化值完整实战指南 Akka Streams 快速入门:从第一个 Source 到背压与物化值完整实战指南 【免费下载链接】akka-core A platform to build and run apps that are elastic, agile, and resilient. SDK, libraries, and hosted environments. 项目地址: https://gitcode.com/gh_mirro… · 2026/9/24 16:02:36
Relay 开发工作流:Relay Compiler 的配置、运行与产物生成实战指南 前端开发工具 【免费下载链接】relay Relay is a JavaScript framework for building data-driven React applications. 项目地址: https://gitcode.com/gh_mirrors/relay29/relay 点击查看 免费下载 本篇技术指南以 Relay 的"工作流(Workflow&… · 2026/9/24 16:02:36
shadcn-vue Scroll Area 组件实战:基于 reka-ui 的跨浏览器自定义滚动区 UI组件前端 【免费下载链接】shadcn-vue Vue port of shadcn-ui 项目地址: https://gitcode.com/gh_mirrors/sh/shadcn-vue 点击查看 免费下载 本指南以 shadcn-vue 仓库中 Scroll Area 官方文档 为骨架,深入讲解该组件的安装方式、结构组成与用法。Scr… · 2026/9/24 16:02:36
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44