Loading...
Loading...
Compare original and translation side by side
DorisLexer.g4DorisParser.g4DorisLexer.g4DorisParser.g4| Mode | Dependency | Description |
|---|---|---|
| syntax | None | Syntax check: keyword validity, statement structure, clause completeness, Doris syntax compatibility |
| spec | None | Specification check: object design standards, data operation standards, naming conventions |
| all | None | Execute both syntax and specification checks |
| 模式 | 依赖项 | 描述 |
|---|---|---|
| syntax | 无 | 语法检查:关键字有效性、语句结构、子句完整性、Doris语法兼容性验证 |
| spec | 无 | 规范检查:对象设计标准、数据操作标准、基于最佳实践的命名规范检查 |
| all | 无 | 同时执行语法和规范检查 |
python ~/.cac/skills/huawei-cloud-doris-sql-check/scripts/doris_sql_tokenizer.py "<sql_text>"DorisLexer.g4--DORIS-KEYWORD-LIST-START--DORIS-KEYWORD-LIST-ENDHINT/*+ ... */BACKQUOTED`ident`ARROW->NSEQ<=>EQ===NEQ<>!=LTE<=!>GTE>=!<DOUBLEPIPES||LOGICALAND&&LOGICALNOT!'...'"..."123L123S123Y123BD`table_name`--/* *//*+ hint */MATCH_ALLMATCH_ANYMATCH_PHRASEMATCH_PHRASE_PREFIXMATCH_PHRASE_EDGEMATCH_REGEXPMATCH_NAMEMATCH_NAME_GLOBpython ~/.cac/skills/huawei-cloud-doris-sql-check/scripts/doris_sql_tokenizer.py "<sql_text>"DorisLexer.g4--DORIS-KEYWORD-LIST-START--DORIS-KEYWORD-LIST-ENDHINT/*+ ... */BACKQUOTED`ident`ARROW->NSEQ<=>EQ===NEQ<>!=LTE<=!>GTE>=!<DOUBLEPIPES||LOGICALAND&&LOGICALNOT!'...'"..."123L123S123Y123BD`table_name`--/* *//*+ hint */MATCH_ALLMATCH_ANYMATCH_PHRASEMATCH_PHRASE_PREFIXMATCH_PHRASE_EDGEMATCH_REGEXPMATCH_NAMEMATCH_NAME_GLOBpython ~/.cac/skills/huawei-cloud-doris-sql-check/scripts/doris_sql_parser.py "<sql_text>"DorisParser.g4DISTRIBUTED BY {HASH(cols) | RANDOM} (BUCKETS n | AUTO)?PARTITION BY (RANGE | LIST)? ... (AUTO)?(DUPLICATE | AGGREGATE | UNIQUE) KEY (cols) (CLUSTER BY cols)?ENGINE = olap | mysql | elasticsearch | hive | hudi | iceberg | jdbc | ...PROPERTIES ('key'='value', ...)INSERT OVERWRITE TABLE ...LOAD LABEL ... (DATA INFILE (...) INTO TABLE ...)CREATE ROUTINE LOAD ... FROM type (...)EXPORT TABLE ... TO ...BACKUP SNAPSHOT ... TO repo (ON|EXCLUDE (...))?RESTORE SNAPSHOT ... FROM repo (ON|EXCLUDE (...))?EXPLAIN {PARSED|ANALYZED|REWRITTEN|LOGICAL|OPTIMIZED|PHYSICAL|SHAPE|MEMO|DISTRIBUTED|ALL} [VERBOSE|TREE|GRAPH|PLAN] [PROCESS]CREATE MATERIALIZED VIEW ... (DUPLICATE KEY ...)? PARTITION BY ... DISTRIBUTED BY ... AS queryBUILD [IMMEDIATE|DEFERRED]REFRESH [COMPLETE|AUTO]ON [MANUAL|SCHEDULE|COMMIT]TABLESAMPLE (...) (REPEATABLE n)?WITH cte_name AS (...)OVER (PARTITION BY ... ORDER BY ... ROWS/RANGE ...)OUTFILE 'path' (FORMAT AS ...)? (PROPERTIES (...))?/*+ hint_name(...) */[hint_name]ALTER COLOCATE GROUP name SET (...)col MATCH_ALL '...'MATCH_PHRASEMATCH_PHRASE_PREFIXMATCH_PHRASE_EDGEMATCH_ANYMATCH_REGEXPHLL_UNIONBITMAP_UNIONQUANTILE_UNIONREPLACE_IF_NOT_NULLpython ~/.cac/skills/huawei-cloud-doris-sql-check/scripts/doris_sql_parser.py "<sql_text>"DorisParser.g4DISTRIBUTED BY {HASH(cols) | RANDOM} (BUCKETS n | AUTO)?PARTITION BY (RANGE | LIST)? ... (AUTO)?(DUPLICATE | AGGREGATE | UNIQUE) KEY (cols) (CLUSTER BY cols)?ENGINE = olap | mysql | elasticsearch | hive | hudi | iceberg | jdbc | ...PROPERTIES ('key'='value', ...)INSERT OVERWRITE TABLE ...LOAD LABEL ... (DATA INFILE (...) INTO TABLE ...)CREATE ROUTINE LOAD ... FROM type (...)EXPORT TABLE ... TO ...BACKUP SNAPSHOT ... TO repo (ON|EXCLUDE (...))?RESTORE SNAPSHOT ... FROM repo (ON|EXCLUDE (...))?EXPLAIN {PARSED|ANALYZED|REWRITTEN|LOGICAL|OPTIMIZED|PHYSICAL|SHAPE|MEMO|DISTRIBUTED|ALL} [VERBOSE|TREE|GRAPH|PLAN] [PROCESS]CREATE MATERIALIZED VIEW ... (DUPLICATE KEY ...)? PARTITION BY ... DISTRIBUTED BY ... AS queryBUILD [IMMEDIATE|DEFERRED]REFRESH [COMPLETE|AUTO]ON [MANUAL|SCHEDULE|COMMIT]TABLESAMPLE (...) (REPEATABLE n)?WITH cte_name AS (...)OVER (PARTITION BY ... ORDER BY ... ROWS/RANGE ...)OUTFILE 'path' (FORMAT AS ...)? (PROPERTIES (...))?/*+ hint_name(...) */[hint_name]ALTER COLOCATE GROUP name SET (...)col MATCH_ALL '...'MATCH_PHRASEMATCH_PHRASE_PREFIXMATCH_PHRASE_EDGEMATCH_ANYMATCH_REGEXPHLL_UNIONBITMAP_UNIONQUANTILE_UNIONREPLACE_IF_NOT_NULL| Rule ID | Name | Level | Description |
|---|---|---|---|
| SYN-ERR | Lexical Error | ERROR | Unrecognized characters in SQL text |
| SYN001 | Invalid Keyword | ERROR | Keyword not supported by Doris (not in 504-keyword list) |
| SYN002 | Reserved Keyword as Identifier | ERROR | Reserved keyword used as identifier without backticks |
| SYN003 | Syntax Structure Error | ERROR | Missing required clause or keyword |
| SYN004 | Clause Ordering Error | ERROR | SQL clause order does not conform to grammar |
| SYN005 | DISTRIBUTED BY Syntax Error | ERROR | Invalid distribution strategy (only HASH/RANDOM supported) |
| SYN006 | PARTITION BY Syntax Error | ERROR | Invalid partition definition (RANGE/LIST/AUTO) |
| SYN007 | BUCKETS Syntax Error | ERROR | Invalid BUCKETS clause (must be INTEGER or AUTO) |
| SYN008 | EXPLAIN planType Syntax Error | ERROR | Invalid EXPLAIN plan type (PARSED/ANALYZED/REWRITTEN/LOGICAL/OPTIMIZED/PHYSICAL/SHAPE/MEMO/DISTRIBUTED/ALL) |
| SYN009 | KEY Model Syntax Error | ERROR | Invalid data model (DUPLICATE/AGGREGATE/UNIQUE KEY) |
| SYN010 | PROPERTIES Syntax Error | ERROR | Invalid PROPERTIES clause structure |
| SYN011 | ENGINE Syntax Error | ERROR | Invalid ENGINE clause |
| SYN012 | INSERT OVERWRITE Syntax Error | ERROR | Invalid INSERT OVERWRITE TABLE structure |
| SYN013 | LOAD Syntax Error | ERROR | Invalid LOAD LABEL / BROKER LOAD structure |
| SYN014 | ROUTINE LOAD Syntax Error | ERROR | Invalid CREATE ROUTINE LOAD structure |
| SYN015 | EXPORT Syntax Error | ERROR | Invalid EXPORT TABLE ... TO structure |
| SYN016 | BACKUP/RESTORE SNAPSHOT Syntax Error | ERROR | Invalid BACKUP/RESTORE SNAPSHOT structure |
| SYN017 | CREATE MTMV Syntax Error | ERROR | Invalid CREATE MATERIALIZED VIEW structure |
| SYN018 | CREATE CATALOG Syntax Error | ERROR | Invalid CREATE CATALOG structure |
| SYN019 | CREATE USER/ROLE Syntax Error | ERROR | Invalid CREATE USER/ROLE structure |
| SYN020 | CREATE ROW POLICY Syntax Error | ERROR | Invalid CREATE ROW POLICY structure |
| SYN021 | CREATE SQL_BLOCK_RULE Syntax Error | ERROR | Invalid CREATE SQL_BLOCK_RULE structure |
| SYN022 | CREATE STAGE Syntax Error | ERROR | Invalid CREATE STAGE structure |
| SYN023 | CREATE JOB Syntax Error | ERROR | Invalid CREATE JOB ON SCHEDULE structure |
| SYN024 | CREATE ENCRYPTKEY Syntax Error | ERROR | Invalid CREATE ENCRYPTKEY structure |
| SYN025 | ADMIN SET/SHOW Syntax Error | ERROR | Invalid ADMIN statement structure |
| SYN026 | CANCEL Syntax Error | ERROR | Invalid CANCEL statement (LOAD/EXPORT/ALTER/BACKUP/RESTORE/WARM UP) |
| SYN027 | KILL Syntax Error | ERROR | Invalid KILL (CONNECTION/QUERY) statement |
| SYN028 | TABLESAMPLE Syntax Error | ERROR | Invalid TABLESAMPLE clause (PERCENT/ROWS, REPEATABLE) |
| SYN029 | OUTFILE Syntax Error | ERROR | Invalid OUTFILE clause (FORMAT AS, PROPERTIES) |
| SYN030 | Hint Syntax Error | WARNING | Invalid hint format (must be |
| SYN031 | Full-text MATCH Syntax Error | ERROR | Invalid MATCH_ALL/MATCH_ANY/MATCH_PHRASE/MATCH_REGEXP usage |
| SYN032 | COLOCATE GROUP Syntax Error | ERROR | Invalid ALTER COLOCATE GROUP structure |
| SYN033 | GRANT/REVOKE Syntax Error | ERROR | Invalid GRANT/REVOKE privilege structure |
| 规则ID | 名称 | 级别 | 描述 |
|---|---|---|---|
| SYN-ERR | 词法错误 | ERROR | SQL文本中存在无法识别的字符 |
| SYN001 | 无效关键字 | ERROR | Doris不支持的关键字(不在504个关键字列表中) |
| SYN002 | 保留关键字用作标识符 | ERROR | 保留关键字未加反引号直接用作标识符 |
| SYN003 | 语法结构错误 | ERROR | 缺少必填子句或关键字 |
| SYN004 | 子句顺序错误 | ERROR | SQL子句顺序不符合语法规范 |
| SYN005 | DISTRIBUTED BY语法错误 | ERROR | 无效的分布策略(仅支持HASH/RANDOM) |
| SYN006 | PARTITION BY语法错误 | ERROR | 无效的分区定义(RANGE/LIST/AUTO) |
| SYN007 | BUCKETS语法错误 | ERROR | 无效的BUCKETS子句(必须为整数或AUTO) |
| SYN008 | EXPLAIN planType语法错误 | ERROR | 无效的EXPLAIN计划类型(PARSED/ANALYZED/REWRITTEN/LOGICAL/OPTIMIZED/PHYSICAL/SHAPE/MEMO/DISTRIBUTED/ALL) |
| SYN009 | KEY模型语法错误 | ERROR | 无效的数据模型(DUPLICATE/AGGREGATE/UNIQUE KEY) |
| SYN010 | PROPERTIES语法错误 | ERROR | 无效的PROPERTIES子句结构 |
| SYN011 | ENGINE语法错误 | ERROR | 无效的ENGINE子句 |
| SYN012 | INSERT OVERWRITE语法错误 | ERROR | 无效的INSERT OVERWRITE TABLE结构 |
| SYN013 | LOAD语法错误 | ERROR | 无效的LOAD LABEL / BROKER LOAD结构 |
| SYN014 | ROUTINE LOAD语法错误 | ERROR | 无效的CREATE ROUTINE LOAD结构 |
| SYN015 | EXPORT语法错误 | ERROR | 无效的EXPORT TABLE ... TO结构 |
| SYN016 | BACKUP/RESTORE SNAPSHOT语法错误 | ERROR | 无效的BACKUP/RESTORE SNAPSHOT结构 |
| SYN017 | CREATE MTMV语法错误 | ERROR | 无效的CREATE MATERIALIZED VIEW结构 |
| SYN018 | CREATE CATALOG语法错误 | ERROR | 无效的CREATE CATALOG结构 |
| SYN019 | CREATE USER/ROLE语法错误 | ERROR | 无效的CREATE USER/ROLE结构 |
| SYN020 | CREATE ROW POLICY语法错误 | ERROR | 无效的CREATE ROW POLICY结构 |
| SYN021 | CREATE SQL_BLOCK_RULE语法错误 | ERROR | 无效的CREATE SQL_BLOCK_RULE结构 |
| SYN022 | CREATE STAGE语法错误 | ERROR | 无效的CREATE STAGE结构 |
| SYN023 | CREATE JOB语法错误 | ERROR | 无效的CREATE JOB ON SCHEDULE结构 |
| SYN024 | CREATE ENCRYPTKEY语法错误 | ERROR | 无效的CREATE ENCRYPTKEY结构 |
| SYN025 | ADMIN SET/SHOW语法错误 | ERROR | 无效的ADMIN语句结构 |
| SYN026 | CANCEL语法错误 | ERROR | 无效的CANCEL语句(LOAD/EXPORT/ALTER/BACKUP/RESTORE/WARM UP) |
| SYN027 | KILL语法错误 | ERROR | 无效的KILL (CONNECTION/QUERY)语句 |
| SYN028 | TABLESAMPLE语法错误 | ERROR | 无效的TABLESAMPLE子句(PERCENT/ROWS、REPEATABLE) |
| SYN029 | OUTFILE语法错误 | ERROR | 无效的OUTFILE子句(FORMAT AS、PROPERTIES) |
| SYN030 | Hint语法错误 | WARNING | 无效的Hint格式(必须为 |
| SYN031 | 全文检索MATCH语法错误 | ERROR | 无效的MATCH_ALL/MATCH_ANY/MATCH_PHRASE/MATCH_REGEXP用法 |
| SYN032 | COLOCATE GROUP语法错误 | ERROR | 无效的ALTER COLOCATE GROUP结构 |
| SYN033 | GRANT/REVOKE语法错误 | ERROR | 无效的GRANT/REVOKE权限结构 |
DorisParser.g4| Rule ID | Name | Level | Category | Description |
|---|---|---|---|---|
| SPEC001 | Missing DISTRIBUTED BY | ERROR | Object Design | CREATE TABLE without distribution strategy (Doris requires DISTRIBUTED BY HASH or RANDOM) |
| SPEC002 | Missing ENGINE | INFO | Object Design | CREATE TABLE without explicit ENGINE (defaults to OLAP) |
| SPEC003 | SELECT * Prohibited | ERROR | Data Operation | Query must specify explicit column list |
| SPEC004 | DELETE/UPDATE without WHERE | ERROR | Data Operation | DML must include WHERE condition |
| SPEC005 | NOT IN Subquery | WARNING | Data Operation | Recommend NOT EXISTS or LEFT JOIN ... IS NULL |
| SPEC006 | DISTINCT Performance | INFO | Data Operation | DISTINCT may impact performance |
| SPEC007 | Implicit Type Conversion | WARNING | Data Operation | May cause index/zone-map invalidation |
| SPEC008 | LIKE Leading Wildcard | WARNING | Data Operation | Cannot use zone-map or index |
| SPEC009 | OR Condition | INFO | Data Operation | May impact execution plan |
| SPEC010 | IN List Too Long | WARNING | Data Operation | >1000 values recommend temp table |
| SPEC011 | FROM Subquery | INFO | Data Operation | Recommend CTE instead |
| SPEC012 | Cartesian Product | ERROR | Data Operation | Multi-table missing JOIN condition |
| SPEC013 | INSERT Missing Column List | WARNING | Data Operation | Relies on default column order |
| SPEC014 | Missing Table Comment | INFO | Object Design | Table without COMMENT |
| SPEC015 | Table Naming Convention | WARNING | Naming | Should use lowercase with underscores |
| SPEC016 | Column Naming Convention | WARNING | Naming | Should use lowercase with underscores |
| SPEC017 | Reserved Keyword as Identifier | ERROR | Naming | May cause syntax ambiguity |
| SPEC018 | Distribution Key Column Not Found | WARNING | Object Design | Distribution key should be actual table column |
| SPEC019 | Partition Key Same as Distribution Key | INFO | Object Design | May cause data skew |
| SPEC020 | Missing KEY Model Definition | INFO | Object Design | Recommend explicit DUPLICATE/AGGREGATE/UNIQUE KEY |
| SPEC021 | Large Table Should Have Partition | INFO | Object Design | Improve query and governance efficiency |
| SPEC022 | BUCKETS Count Recommendation | INFO | Object Design | Recommend appropriate bucket count for table size |
| SPEC023 | Column Should Have NOT NULL | INFO | Object Design | Optimizer can leverage NOT NULL |
| SPEC024 | DROP Should Use IF EXISTS | WARNING | SQL Dev | Prevent error when object not found |
| SPEC025 | INSERT Multi-VALUES | WARNING | SQL Dev | Multiple VALUES groups inefficient; use STREAM LOAD / BROKER LOAD |
| SPEC026 | Column-store Real-time INSERT | WARNING | SQL Dev | Frequent small-batch INSERT into Doris (columnar) causes compaction pressure |
| SPEC027 | Frequent UPDATE/DELETE | WARNING | SQL Dev | Doris UPDATE/DELETE is costly (read-merge-write) |
| SPEC028 | Function on Filter Column | WARNING | SQL Dev | Affects statistics accuracy and zone-map usage |
| SPEC029 | Large Table COUNT | WARNING | SQL Dev | Full table scan I/O cost |
| SPEC030 | Query Should Use LIMIT | INFO | SQL Dev | Avoid oversized result sets |
| SPEC031 | CTE Recursion Safety | WARNING | SQL Dev | Ensure termination condition for recursive CTE |
| SPEC032 | Use Catalog/DB Prefix | INFO | SQL Dev | Avoid ambiguity in multi-catalog scenarios |
| SPEC033 | View Nesting Depth ≤ 3 | INFO | Object Design | Requires cluster: query view dependencies |
| SPEC034 | Index Count > 5 | WARNING | Object Design | Requires cluster: query table indexes |
| SPEC035 | Non-pushdown SQL Prohibited | ERROR | SQL Dev | Requires cluster: EXPLAIN analysis |
| SPEC036 | BITMAP/HLL Column Needs Aggregation Type | WARNING | Object Design | BITMAP/HLL columns should specify BITMAP_UNION/HLL_UNION |
| SPEC037 | Use MTMV for Repeated Complex Queries | INFO | Object Design | Recommend MTMV for repeated aggregation queries |
| SPEC038 | Avoid Frequent OUTFILE Export | INFO | SQL Dev | Use EXPORT or broker for large exports |
| SPEC039 | VARCHAR Length Should Be Explicit | WARNING | Object Design | Avoid VARCHAR without length for large strings |
| SPEC040 | DECIMAL Precision Should Be Explicit | WARNING | Object Design | Use DECIMAL(p,s) or DECIMALV3(p,s), avoid bare DECIMAL |
| SPEC041 | COUNT(DISTINCT) Excessive Use | ERROR | Complex Query Limit | COUNT(DISTINCT) count > 5, may cause severe performance degradation |
| SPEC042 | NOT IN Subquery Prohibited | ERROR | Complex Query Limit | NOT IN subquery causes full scan and severe performance drop; use NOT EXISTS or LEFT JOIN |
| SPEC043 | Excessive JOINs | ERROR | Complex Query Limit | JOIN count > 20, may cause unstable query plans and high memory usage |
| SPEC044 | Excessive UNION ALLs | ERROR | Complex Query Limit | UNION ALL count > 20, may cause complex plans and high resource consumption |
| SPEC045 | Deeply Nested Subqueries | ERROR | Complex Query Limit | Subquery nesting depth > 20, may cause severe parse and execution performance issues |
| SPEC046 | SQL Statement Too Long | ERROR | Complex Query Limit | SQL text length > 2MB, may cause parse timeout or excessive memory usage |
DorisParser.g4| 规则ID | 名称 | 级别 | 分类 | 描述 |
|---|---|---|---|---|
| SPEC001 | 缺少DISTRIBUTED BY | ERROR | 对象设计 | CREATE TABLE语句未指定分布策略(Doris要求使用DISTRIBUTED BY HASH或RANDOM) |
| SPEC002 | 缺少ENGINE | INFO | 对象设计 | CREATE TABLE语句未显式指定ENGINE(默认值为OLAP) |
| SPEC003 | 禁止使用SELECT * | ERROR | 数据操作 | 查询必须指定明确的列列表 |
| SPEC004 | DELETE/UPDATE语句缺少WHERE条件 | ERROR | 数据操作 | DML语句必须包含WHERE条件 |
| SPEC005 | NOT IN子查询 | WARNING | 数据操作 | 推荐使用NOT EXISTS或LEFT JOIN ... IS NULL替代 |
| SPEC006 | DISTINCT性能影响 | INFO | 数据操作 | DISTINCT可能影响性能 |
| SPEC007 | 隐式类型转换 | WARNING | 数据操作 | 可能导致索引/分区裁剪失效 |
| SPEC008 | LIKE前缀使用通配符 | WARNING | 数据操作 | 无法使用分区裁剪或索引 |
| SPEC009 | OR条件 | INFO | 数据操作 | 可能影响执行计划 |
| SPEC010 | IN列表过长 | WARNING | 数据操作 | 超过1000个值时推荐使用临时表 |
| SPEC011 | FROM子查询 | INFO | 数据操作 | 推荐使用CTE替代 |
| SPEC012 | 笛卡尔积 | ERROR | 数据操作 | 多表查询缺少JOIN条件 |
| SPEC013 | INSERT语句缺少列列表 | WARNING | 数据操作 | 依赖默认列顺序,存在风险 |
| SPEC014 | 缺少表注释 | INFO | 对象设计 | 表未添加COMMENT注释 |
| SPEC015 | 表命名规范 | WARNING | 命名规范 | 应使用小写字母加下划线格式 |
| SPEC016 | 列命名规范 | WARNING | 命名规范 | 应使用小写字母加下划线格式 |
| SPEC017 | 保留关键字用作标识符 | ERROR | 命名规范 | 可能导致语法歧义 |
| SPEC018 | 分布键列不存在 | WARNING | 对象设计 | 分布键应为表中实际存在的列 |
| SPEC019 | 分区键与分布键相同 | INFO | 对象设计 | 可能导致数据倾斜 |
| SPEC020 | 缺少KEY模型定义 | INFO | 对象设计 | 推荐显式指定DUPLICATE/AGGREGATE/UNIQUE KEY |
| SPEC021 | 大表应设置分区 | INFO | 对象设计 | 提升查询和治理效率 |
| SPEC022 | BUCKETS数量建议 | INFO | 对象设计 | 根据表大小推荐合适的分桶数 |
| SPEC023 | 列应设置NOT NULL约束 | INFO | 对象设计 | 优化器可利用NOT NULL约束提升性能 |
| SPEC024 | DROP语句应使用IF EXISTS | WARNING | SQL开发 | 避免对象不存在时触发错误 |
| SPEC025 | INSERT多VALUES语句 | WARNING | SQL开发 | 多组VALUES效率低下;推荐使用STREAM LOAD / BROKER LOAD |
| SPEC026 | 列存表实时INSERT | WARNING | SQL开发 | 频繁小批量INSERT到Doris列存表会导致压缩压力 |
| SPEC027 | 频繁执行UPDATE/DELETE | WARNING | SQL开发 | Doris的UPDATE/DELETE操作成本较高(读-合并-写流程) |
| SPEC028 | 过滤列使用函数 | WARNING | SQL开发 | 影响统计信息准确性和分区裁剪使用 |
| SPEC029 | 大表COUNT查询 | WARNING | SQL开发 | 全表扫描I/O成本高 |
| SPEC030 | 查询应使用LIMIT | INFO | SQL开发 | 避免返回过大的结果集 |
| SPEC031 | CTE递归安全性 | WARNING | SQL开发 | 确保递归CTE有终止条件 |
| SPEC032 | 使用Catalog/DB前缀 | INFO | SQL开发 | 避免多Catalog场景下的歧义 |
| SPEC033 | 视图嵌套深度≤3 | INFO | 对象设计 | 需要集群:查询视图依赖关系 |
| SPEC034 | 索引数量>5 | WARNING | 对象设计 | 需要集群:查询表索引信息 |
| SPEC035 | 禁止非下推SQL | ERROR | SQL开发 | 需要集群:通过EXPLAIN分析验证 |
| SPEC036 | BITMAP/HLL列需指定聚合类型 | WARNING | 对象设计 | BITMAP/HLL列应指定BITMAP_UNION/HLL_UNION聚合函数 |
| SPEC037 | 重复复杂查询使用MTMV | INFO | 对象设计 | 推荐使用MTMV处理重复聚合查询 |
| SPEC038 | 避免频繁使用OUTFILE导出 | INFO | SQL开发 | 大数据导出推荐使用EXPORT或broker方式 |
| SPEC039 | VARCHAR长度应显式指定 | WARNING | 对象设计 | 避免未指定长度的VARCHAR存储大字符串 |
| SPEC040 | DECIMAL精度应显式指定 | WARNING | 对象设计 | 使用DECIMAL(p,s)或DECIMALV3(p,s),避免使用裸DECIMAL |
| SPEC041 | 过度使用COUNT(DISTINCT) | ERROR | 复杂查询限制 | COUNT(DISTINCT)数量>5,可能导致严重性能下降 |
| SPEC042 | 禁止使用NOT IN子查询 | ERROR | 复杂查询限制 | NOT IN子查询会导致全表扫描和严重性能下降;推荐使用NOT EXISTS或LEFT JOIN |
| SPEC043 | JOIN数量过多 | ERROR | 复杂查询限制 | JOIN数量>20,可能导致查询计划不稳定和内存占用过高 |
| SPEC044 | UNION ALL数量过多 | ERROR | 复杂查询限制 | UNION ALL数量>20,可能导致计划复杂和资源消耗过高 |
| SPEC045 | 子查询嵌套过深 | ERROR | 复杂查询限制 | 子查询嵌套深度>20,可能导致严重的解析和执行性能问题 |
| SPEC046 | SQL语句过长 | ERROR | 复杂查询限制 | SQL文本长度>2MB,可能导致解析超时或内存占用过高 |
python ~/.cac/skills/huawei-cloud-doris-sql-check/scripts/doris_sql_checker.py "<sql_text>" allundefinedpython ~/.cac/skills/huawei-cloud-doris-sql-check/scripts/doris_sql_checker.py "<sql_text>" allundefined| Metric | Value |
|---|---|
| Total Rules | 74 |
| Passed | 71 |
| Violations | 3 |
| Errors (ERROR) | 1 |
| Warnings (WARNING) | 1 |
| Infos (INFO) | 1 |
| 指标 | 数值 |
|---|---|
| 总规则数 | 74 |
| 通过数 | 71 |
| 违规数 | 3 |
| 错误(ERROR) | 1 |
| 警告(WARNING) | 1 |
| 提示(INFO) | 1 |
undefinedundefined| Parameter | Required/Optional | Description | Default |
|---|---|---|---|
| Required | SQL statement to check | N/A |
| Optional | Check mode: syntax/spec/all | syntax+spec |
| 参数名 | 必填/可选 | 描述 | 默认值 |
|---|---|---|---|
| 必填 | 待检查的SQL语句 | 无 |
| 可选 | 检查模式:syntax/spec/all | syntax+spec |
python ~/.cac/skills/huawei-cloud-doris-sql-check/scripts/doris_sql_checker.py "<sql_text>" [syntax|spec|all]from doris_sql_checker import check_sql_markdown
report = check_sql_markdown("SELECT * FROM t1", "all")
print(report)python ~/.cac/skills/huawei-cloud-doris-sql-check/scripts/doris_sql_checker.py "<sql_text>" [syntax|spec|all]from doris_sql_checker import check_sql_markdown
report = check_sql_markdown("SELECT * FROM t1", "all")
print(report)DISTRIBUTED BY HASH(分布键)DISTRIBUTED BY RANDOMDUPLICATE KEYAGGREGATE KEYUNIQUE KEYallrequires_mcp: trueMERGE INTO ... WHEN MATCHEDON DUPLICATE KEY UPDATE`DISTRIBUTED BY HASH(分布键)DISTRIBUTED BY RANDOMDUPLICATE KEYAGGREGATE KEYUNIQUE KEYallrequires_mcp: trueMERGE INTO ... WHEN MATCHEDON DUPLICATE KEY UPDATE`| Document | Description |
|---|---|
| AST Schema | AST node type definitions for Doris SQL |
| Syntax Rules | 34 syntax check rule definitions |
| Specification Rules | 40 specification check rule definitions |
| Performance Rules | 11 performance check rule definitions (requires cluster) |
| Keywords | 504 Doris SQL keyword definitions (from DorisLexer.g4) |
| Grammar Rules | 100+ Doris statement type grammar definitions (from DorisParser.g4) |
| 文档 | 描述 |
|---|---|
| AST Schema | Doris SQL的AST节点类型定义 |
| Syntax Rules | 34条语法检查规则定义 |
| Specification Rules | 40条规范检查规则定义 |
| Performance Rules | 11条性能检查规则定义(需要连接集群) |
| Keywords | 504个Doris SQL关键字定义(来自DorisLexer.g4) |
| Grammar Rules | 100余种Doris语句类型的语法定义(来自DorisParser.g4) |
information_schema.tablesbackendsDorisParser.g4information_schema.tablesbackendsDorisParser.g4