DorisSQL语句优化

有没有大神帮忙优化下这个SQL,或者说看看写的对不对

CREATE TABLE dl_digital_purchase.qrtz_blob_triggers  (

  sched_name varchar(120) NOT NULL COMMENT '调度名称',

  trigger_name varchar(200) NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键',

  trigger_group varchar(200) NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键',

  blob_data VARBINARY NULL COMMENT '存放持久化Trigger对象'

)  

UNIQUE KEY(sched_name, trigger_name, trigger_group)

CONSTRAINT FOREIGN qrtz_blob_triggers_ibfk_1 KEY (sched_name, trigger_name, trigger_group) REFERENCES qrtz_triggers (sched_name, trigger_name, trigger_group) ON DELETE RESTRICT ON UPDATE RESTRICT

COMMENT  '代码生成业务表' 

DISTRIBUTED BY HASH(sched_name, trigger_name, trigger_group) BUCKETS 1

PROPERTIES ("replication_allocation" = "tag.location.default: 1")

FineReport 落雨知清晨i 发布于 2024-10-12 09:16
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
用户k6280494Lv6资深互助
发布于2024-10-12 09:39(编辑于 2024-10-12 10:18)

sql复制代码

CREATE TABLE dl_digital_purchase.qrtz_blob_triggers (
sched_name VARCHAR(120) NOT NULL COMMENT '调度名称',
trigger_name VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表中trigger_name的外键',
trigger_group VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表中trigger_group的外键',
blob_data VARBINARY(MAX) NULL COMMENT '存放持久化Trigger对象',
-- Doris 不支持传统的 FOREIGN KEY 约束,因此这部分需要移除或采用其他方式保证数据完整性  
-- CONSTRAINT FOREIGN qrtz_blob_triggers_ibfk_1 KEY (sched_name, trigger_name, trigger_group)  
--   REFERENCES qrtz_triggers (sched_name, trigger_name, trigger_group)  
--   ON DELETE RESTRICT ON UPDATE RESTRICT  
-- Doris 支持 UNIQUE KEY,但通常用于排序键(Sort Key)或聚合键(Aggregation Key)  
-- 在此处,如果作为唯一性约束,可以保留,但注意它也会影响数据的物理存储  
UNIQUE KEY(sched_name, trigger_name, trigger_group) COMMENT '唯一键约束',
-- Doris 表的 COMMENT 应该放在整个表的最后,而不是在 UNIQUE KEY 后面  
COMMENT '代码生成业务表,用于存储持久化触发器对象',
-- Doris 的分布式特性设置  
DISTRIBUTED BY HASH(sched_name, trigger_name, trigger_group) BUCKETS 1,
-- Doris 的表属性设置  
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
)
)
-- Doris 不需要指定 ENGINE,因为它是一个分布式数据库,不依赖于单一的存储引擎  
-- ENGINE=InnoDB 等是 MySQL 特有的语法  
;

注意事项:

  1. FOREIGN KEY 约束:DorisDB 目前不支持传统的 FOREIGN KEY 约束。如果您需要保证数据完整性,您可能需要在应用层或通过其他机制(如触发器或存储过程,尽管 Doris 也不直接支持触发器)来实现。

  2. UNIQUE KEY:在 Doris 中,UNIQUE KEY 通常用作排序键(Sort Key)或聚合键(Aggregation Key),它会影响数据的物理存储和查询性能。如果仅需要唯一性约束而不关心排序或聚合,请确保了解这种设计对数据存储和查询的影响。

  3. COMMENT 位置:在 Doris 中,表的 COMMENT 应该放在整个表的定义之后。

  4. DISTRIBUTED BY 和 PROPERTIES:这些是 Doris 特有的语法,用于定义表的分布式存储和复制策略。

  5. ENGINE:Doris 不需要指定存储引擎,因为它是一个分布式数据库系统,不依赖于像 MySQL 那样的单一存储引擎。

  6. VARBINARY(MAX):在 Doris 中,VARBINARY 类型可以存储可变长度的二进制数据。MAX 表示可以存储的最大长度,但具体限制可能取决于 Doris 的内部实现和配置。

确保在部署到生产环境之前,在测试环境中验证这些更改,并评估它们对性能和数据完整性的影响。

更新

CREATE TABLE dl_digital_purchase.qrtz_blob_triggers (
sched_name VARCHAR(120) NOT NULL COMMENT '调度名称',
trigger_name VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表中trigger_name的外键',
trigger_group VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表中trigger_group的外键',
blob_data VARBINARY NULL COMMENT '存放持久化Trigger对象',
-- DorisDB 不支持 FOREIGN KEY,因此移除这部分  
-- CONSTRAINT FOREIGN KEY (sched_name, trigger_name, trigger_group)  
--   REFERENCES qrtz_triggers (sched_name, trigger_name, trigger_group)  
--   ON DELETE RESTRICT ON UPDATE RESTRICT  
-- 在 DorisDB 中,UNIQUE KEY 通常用作排序键(Sort Key)  
-- 如果需要唯一性约束,并且不影响查询性能,可以保留  
-- 但请注意,DorisDB 中的 UNIQUE 并不强制执行唯一性,只是用作排序和聚合的键  
-- 如果需要真正的唯一性约束,需要在应用层实现  
UNIQUE KEY(sched_name, trigger_name, trigger_group) COMMENT '用作排序键的组合字段',
-- DorisDB 的表级 COMMENT 应该放在表的最后  
COMMENT '代码生成业务表,用于存储持久化触发器对象',
-- DorisDB 的分布式特性设置  
-- 使用 HASH 分布,根据 sched_name, trigger_name, trigger_group 进行分片  
DISTRIBUTED BY HASH(sched_name, trigger_name, trigger_group) BUCKETS 1,
-- DorisDB 的表属性设置  
-- 设置复制分配策略  
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
)
)
-- DorisDB 不需要指定 ENGINE,因为它是分布式数据库  
;

  • 落雨知清晨i 落雨知清晨i(提问者) 报错了 org.jkiss.dbeaver.model.sql.DBSQLException: SQL 错误 [1105] [HY000]: errCode = 2, detailMessage = Syntax error in line 6: UNIQUE KEY idx_unique_trigge... ^ Encountered: UNIQUE Expected: UNIQUE is keyword, maybe `UNIQUE` at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:133) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeStatement(SQLQueryJob.java:614) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.lambda$2(SQLQueryJob.java:505) at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:190) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeSingleQuery(SQLQueryJob.java:524) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.extractData(SQLQueryJob.java:976) at org.jkiss.dbeaver.ui.editors.sql.SQLEditor$QueryResultsContainer.readData(SQLEditor.java:4133) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:123) at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:190) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:121) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5148) at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:114) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)Caused by: java.sql.SQLException: errCode = 2, detailMessage = Syntax error in line 6: UNIQUE KEY idx_unique_trigge... ^ Encountered: UNIQUE Expected: UNIQUE is keyword, maybe `UNIQUE` at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:767) at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:652) at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.execu
    2024-10-12 10:03 
  • 落雨知清晨i 落雨知清晨i(提问者) DorisSQL语法不支持这样写
    2024-10-12 10:04 
  • 用户k6280494 用户k6280494 回复 落雨知清晨i(提问者) 更新答案了,试试
    2024-10-12 10:08 
  • 落雨知清晨i 落雨知清晨i(提问者) 回复 用户k6280494 SQL 错误 [1105] [HY000]: errCode = 2, detailMessage = Please check your sql, we meet an error when parsing.
    2024-10-12 10:14 
  • 用户k6280494 用户k6280494 回复 落雨知清晨i(提问者) 在试一下
    2024-10-12 10:18 
  • 2关注人数
  • 155浏览人数
  • 最后回答于:2024-10-12 10:18
    请选择关闭问题的原因
    确定 取消
    返回顶部