求助:使用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
相关产品推荐
相关产品推荐

