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

求助:使用Apache Drill在MySQL创建永久表遇“schema is immutable”错误

解决Apache Drill连接MySQL创建永久表时的"schema is immutable"错误

你遇到的这个"schema is immutable"错误,本质是因为默认情况下Drill的JDBC存储插件处于只读模式,不允许直接对底层MySQL数据库执行写操作(比如创建永久表)。下面是具体的解决步骤:

1. 修改JDBC存储插件配置,开启写权限

首先需要更新你的MySQL JDBC插件配置,添加支持写操作的参数。登录Drill的Web控制台(默认端口8047),进入Storage页面,找到你的MySQL插件,点击Update,将配置修改为如下内容:

{
  "type": "jdbc",
  "driver": "com.mysql.jdbc.Driver",
  "url": "jdbc:mysql://hostname:3306",
  "username": "root",
  "password": "",
  "enabled": true,
  "writable": true,
  "defaultSchema": "your_target_db_name"
}

注意:

  • 将your_target_db_name替换为你想要创建表的已存在的MySQL数据库名称(Drill无法自动创建数据库,必须提前在MySQL中建好)
  • 如果你的MySQL版本是8.0+,建议将驱动改为com.mysql.cj.jdbc.Driver,并在URL中添加时区参数,比如jdbc:mysql://hostname:3306?serverTimezone=UTC

2. 使用DDL语句创建永久表

配置更新后,你就可以直接在Drill中执行CREATE TABLE语句来创建MySQL的永久表了,示例如下:

方式一:直接定义表结构

CREATE TABLE mysql.your_target_db_name.your_permanent_table (
  id INT PRIMARY KEY,
  username VARCHAR(100) NOT NULL,
  join_date TIMESTAMP
)

方式二:通过CTAS创建(基于查询结果)

如果你想从现有数据源生成表,可以用CTAS语句,指定目标为MySQL的库表即可(不再是临时表):

CREATE TABLE mysql.your_target_db_name.user_summary AS
SELECT id, username, MAX(login_time) AS last_login
FROM mysql.your_target_db_name.user_logs
GROUP BY id, username

3. 必要的权限检查

确保你使用的MySQL用户(这里是root)拥有目标数据库的CREATE TABLE、INSERT等权限,否则即使Drill配置正确,MySQL也会拒绝执行写操作。

内容的提问来源于stack exchange,提问作者Shrinivas Deshmukh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:13:53