You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Druid执行SQL INSERT报405错误的排查与解决求助

Druid执行REPLACE INTO/INSERT类SQL返回405错误的排查与解决

问题现象

  • 可通过批量提交ingest spec正常导入示例数据
  • 执行Druid生成的REPLACE INTO语句或官方参考的INSERT类SQL时,均返回405 Method Not Allowed错误

示例数据:

{"time": "2023-05-02T00:47:00.496Z","cooperative": "ABCBT","factory": "BTS","area": "1","dev": "BP","phaseA": 1.111}

Druid生成的REPLACE INTO语句:

REPLACE INTO inline_data OVERWRITE ALL
WITH ext AS (SELECT *
FROM TABLE(
  EXTERN(
    '{"type":"inline","data":"{\"time\": \"2023-05-02T00:47:00.496Z\",\"cooperative\": \"ABCBT\",\"factory\": \"BTS\",\"area\": \"1\",\"dev\": \"BP\",\"phaseA\": 1.111}"}',
    '{"type":"json"}',
    '[{"name":"time","type":"string"},{"name":"cooperative","type":"string"},{"name":"factory","type":"string"},{"name":"area","type":"string"},{"name":"dev","type":"string"},{"name":"phaseA","type":"double"}]'
  )
))
SELECT
  TIME_PARSE("time") AS __time,
  cooperative,
  factory,
  area,
  dev,
  phaseA
FROM ext
PARTITIONED BY DAY

排查原因

  • 请求方法/接口路径错误:Druid的SQL写操作(如REPLACE/INSERT)必须通过/druid/v2/sql/task接口用POST请求执行,若误用查询接口/druid/v2/sql或用GET请求,会直接返回405。
  • 权限配置缺失:启用权限系统的情况下,当前用户若没有目标数据源的WRITE权限或CREATE_TASK权限,部分场景会返回405(而非明确的权限错误)。
  • 版本兼容性问题:0.20.x及更早的Druid版本对SQL写操作支持不完善,语法或接口规范与新版本不兼容,可能触发405。
  • SQL语法异常:嵌套JSON的转义错误等语法问题,可能导致接口误返回405(而非语法错误提示)。

解决方法

  • 使用正确的接口与请求方式
    执行写操作SQL时,向/druid/v2/sql/task发送POST请求,请求体格式如下:
    {
      "query": "你的REPLACE INTO/INSERT完整SQL语句"
    }
    
    注意:查询类SQL用/druid/v2/sql接口(GET/POST均可),但写操作只能用/druid/v2/sql/task的POST请求。
  • 检查并配置权限
    确认当前操作用户拥有目标数据源的WRITE权限,以及CREATE_TASK权限(若启用权限系统),联系管理员调整权限配置。
  • 升级Druid版本
    若使用旧版本,升级到0.21.x及以上稳定版本,新版本对SQL写操作的支持更完善,接口规范更统一。
  • 验证SQL语法
    检查SQL中的嵌套字符串转义是否正确,确保语法无错误,避免因语法问题触发异常返回。

内容的提问来源于stack exchange,提问作者Xavier Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:35:08