mcpField
H
huawei-cloud-doris-sql-check

huawei-cloud-doris-sql-check

github.com/huaweicloudテスト・品質59137 回インストール2 日前に更新
リポジトリ

huawei-cloud-doris-sql-check について

Apache Doris SQL を静的に検査するスキルです。トークン化、構文解析、ルール判定により、Doris クラスターへ接続せずに構文と規約を確認できます。実行前の検証や、設計・命名・性能上のアンチパターンの確認に適しています。

主な機能

  1. 01Doris SQL のトークン化と解析
  2. 02構文・規約の検査モード
  3. 03多様な Doris 文に対応
  4. 04性能上のアンチパターンを検出
  5. 05クラスター接続不要の静的解析

活用シーン

  1. 01実行前の SQL 構文検証
  2. 02テーブルのパーティションとバケット設計の確認
  3. 03INSERT、LOAD、EXPORT 文の検査
  4. 04SQL 規約や性能上の問題の発見

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-doris-sql-check

インストール後、Claude Code で/huawei-cloud-doris-sql-checkを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
ast_schema.md
rules/
grammar_rules.py
keywords.py
perf_rules.yaml
spec_rules.yaml
syntax_rules.yaml
scripts/
doris_sql_checker.py
doris_sql_parser.py
doris_sql_tokenizer.py
templates/
report_template.md

詳細

Doris SQL チェックスキル

Apache Doris SQL 仕様のチェックを専門とするエキスパートとして、Apache Doris(Doris 3.1.4 のソースコードに基づく)の SQL 文を包括的にチェックします。Doris 固有の構文を Nereids ANTLR4 文法(DorisLexer.g4/DorisParser.g4)から正確に識別できる、独自開発の Doris SQL トークナイザーと再帰下降パーサーを備えています。

概要

アーキテクチャ:このスキルは、トークナイザー(字句解析)→ パーサー(構文解析)→ ルールエンジン(構文+仕様チェック)→ レポート生成の 3 段階パイプラインを使用します。

適用シナリオ:

  • Doris クラスター(FE/BE)で実行する前に SQL 構文を検証する
  • Apache Doris の開発におけるベストプラクティスに照らして SQL 文をレビューする
  • Doris 固有の構文(DISTRIBUTED BY HASH/RANDOM、PARTITION BY RANGE/LIST/AUTO、BUCKETS、PROPERTIES、ENGINE、DUPLICATE/AGGREGATE/UNIQUE KEY、INSERT OVERWRITE TABLE、LOAD LABEL、ROUTINE LOAD、EXPORT、MTMV、BACKUP/RESTORE SNAPSHOT、ADMIN SET/SHOW、CANCEL、KILL、TABLESAMPLE、OUTFILE、ヒント /*+ /、全文検索 MATCH_、COLOCATE GROUP)をチェックする
  • Doris SQL 文でパフォーマンス上のアンチパターンになりうるものを特定する

一般的なユースケース:

  • 「この Doris SQL をチェックしてください:SELECT * FROM t1」
  • 「この CREATE TABLE は Doris の仕様(DISTRIBUTED BY、KEY モデル、PARTITION)に準拠していますか?」
  • 「この INSERT OVERWRITE TABLE 文の構文を検証してください」
  • 「Doris SQL が仕様に準拠しているかレビューしてください」
  • 「SQL で Doris 固有の構文(MTMV、LOAD、EXPORT)が正しく使われているかチェックしてください」
  • 「BACKUP/RESTORE SNAPSHOT の構文を検証してください」
  • 「ROUTINE LOAD ジョブの定義をチェックしてください」

チェックモード

モード依存関係説明
syntaxなし構文チェック:キーワードの妥当性、文の構造、句の完全性、Doris 構文との互換性
specなし仕様チェック:オブジェクト設計基準、データ操作基準、命名規則
allなし構文チェックと仕様チェックの両方を実行

デフォルト:syntax + spec モード(外部依存関係は不要です)。

前提条件

1. Python の要件
  • Python >= 3.8
  • 追加パッケージは不要です(標準ライブラリのみ)
2. セキュリティルール
  • このスキルは静的 SQL 分析のみを行い、クラスターへの接続は不要です
  • SQL テキストはローカルで処理され、データが外部に送信されることはありません
  • 認証情報や認証は不要です

ワークフロー

ステップ 1:入力の受け取り

ユーザーから SQL 文とチェックモードを受け取ります。モードが指定されていない場合、デフォルトで syntax + spec を使用します。

ステップ 2:トークン化

トークナイザーを実行し、SQL テキストを Token ストリームに変換します。

python ~/.cac/skills/huawei-cloud-doris-sql-check/scripts/doris_sql_tokenizer.py "<sql_text>"

トークナイザーは次の要素をサポートします。

  • Doris の全 504 キーワード(DorisLexer.g4 の --DORIS-KEYWORD-LIST-START と --DORIS-KEYWORD-LIST-END の間に記載)
  • Doris 固有のトークン:HINT(/*+ ... */)、BACKQUOTED(`ident`)、ARROW(->)、NSEQ(<=> null-safe eq)、EQ(= または ==)、NEQ(<> または !=)、LTE(<= または !>)、GTE(>= または !<)、DOUBLEPIPES(||)、LOGICALAND(&&)、LOGICALNOT(!)
  • リテラル:文字列('...'/"...")、整数、10 進数、bigint(123L)、smallint(123S)、tinyint(123Y)、bigdecimal(123BD)、指数表記
  • バッククォートで囲まれた識別子:`table_name`(Doris 形式。二重引用符より優先)
  • コメントのスキップ(-- の単一行コメント、/* */ の複数行コメント。ただし /*+ hint */ は HINT トークンとして保持)
  • 全文検索演算子:MATCH_ALL、MATCH_ANY、MATCH_PHRASE、MATCH_PHRASE_PREFIX、MATCH_PHRASE_EDGE、MATCH_REGEXP、MATCH_NAME、MATCH_NAME_GLOB
ステップ 3:解析

パーサーを実行して AST を生成し、構文エラーを検出します。

python ~/.cac/skills/huawei-cloud-doris-sql-check/scripts/doris_sql_parser.py "<sql_text>"

パーサーは、DorisParser.g4 に基づき、主な Doris ステートメントタイプをサポートしています。

  • DML:SELECT(CTE、集合演算、ウィンドウ関数、TABLESAMPLE を含む)、INSERT INTO/OVERWRITE TABLE、UPDATE、DELETE、LOAD(BROKER LOAD)、EXPORT、COPY INTO、TRUNCATE
  • DDL:CREATE TABLE(DISTRIBUTED BY、PARTITION BY、KEY モデル、ENGINE、PROPERTIES を含む)、CREATE TABLE LIKE、CREATE VIEW、CREATE MTMV(マルチテーブルマテリアライズドビュー)、CREATE INDEX(BITMAP/NGRAM_BF/INVERTED)、ALTER TABLE(ADD/MODIFY/DROP/RENAME COLUMN、ADD/DROP PARTITION、ADD/DROP INDEX、ROLLUP、TAG/BRANCH)、DROP TABLE/VIEW/INDEX、CREATE CATALOG、CREATE DATABASE、CREATE USER/ROLE、CREATE RESOURCE、CREATE STAGE、CREATE ENCRYPTKEY、CREATE JOB、CREATE ROW POLICY、CREATE SQL_BLOCK_RULE、CREATE STORAGE VAULT/POLICY、CREATE WORKLOAD GROUP/POLICY
  • DCL:GRANT/REVOKE(テーブル/リソース/ロールの権限)
  • TCL:BEGIN/START TRANSACTION、COMMIT、ROLLBACK
  • ユーティリティ:EXPLAIN(PARSED/ANALYZED/REWRITTEN/LOGICAL/OPTIMIZED/PHYSICAL/SHAPE/MEMO/DISTRIBUTED/ALL、VERBOSE/TREE/GRAPH/PLAN)、SET(変数/オプション)、SHOW(50 種類以上のバリエーション)、DESC/DESCRIBE、ADMIN SET/SHOW(レプリカ、フロントエンド設定、タブレット診断、ゴミ箱、TDE)、KILL(CONNECTION/QUERY)、CANCEL(LOAD/EXPORT/ALTER TABLE/BACKUP/RESTORE/WARM UP)、BACKUP/RESTORE SNAPSHOT、RECOVER(DATABASE/TABLE/PARTITION)、CLEAN(LABEL/PROFILE/QUERY STATS)、INSTALL/UNINSTALL PLUGIN、LOCK/UNLOCK TABLES、WARM UP、SYNC、HELP、CALL PROCEDURE

Doris 固有の構文:

  • DISTRIBUTED 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 query
    • BUILD [IMMEDIATE|DEFERRED]、REFRESH [COMPLETE|AUTO]、ON [MANUAL|SCHEDULE|COMMIT]
  • TABLESAMPLE (...) (REPEATABLE n)?
  • WITH cte_name AS (...)(CTE。Doris では RECURSIVE キーワードを明示する必要はありません)
  • ウィンドウ関数: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_PHRASE、MATCH_PHRASE_PREFIX、MATCH_PHRASE_EDGE、MATCH_ANY、MATCH_REGEXP
  • 集約ユニオン:HLL_UNION、BITMAP_UNION、QUANTILE_UNION、REPLACE_IF_NOT_NULL
  • Doris のデータ型:TINYINT、SMALLINT、INT、BIGINT、LARGEINT、BOOLEAN、FLOAT、DOUBLE、DATE、DATETIME、DATEV2、DATETIMEV2、DATEV1、DATETIMEV1、BITMAP、QUANTILE_STATE、HLL、AGG_STATE、STRING、JSON、JSONB、TEXT、VARCHAR、CHAR、DECIMAL、DECIMALV2、DECIMALV3、IPV4、IPV6、ARRAY、MAP、STRUCT、VARIANT
ステップ 4:構文チェック

トークン化と解析の結果に基づいて、構文チェックルールを実行します。

構文チェックルール(34 件):

ルール ID名前レベル説明
SYN-ERR字句エラーERRORSQL テキストに認識できない文字があります
SYN001無効なキーワードERRORDoris でサポートされていないキーワードです(504 個のキーワードリストに含まれていません)
SYN002識別子として使用された予約語ERRORバッククォートで囲まずに予約語を識別子として使用しています
SYN003構文構造エラーERROR必須の句またはキーワードがありません
SYN004句の順序エラーERRORSQL の句の順序が文法に準拠していません
SYN005DISTRIBUTED BY 構文エラーERROR無効な分散方式です(HASH/RANDOM のみサポート)
SYN006PARTITION BY 構文エラーERROR無効なパーティション定義です(RANGE/LIST/AUTO)
SYN007BUCKETS 構文エラーERROR無効な BUCKETS 句です(INTEGER または AUTO が必要です)
SYN008EXPLAIN planType 構文エラーERROR無効な EXPLAIN プランタイプです(PARSED/ANALYZED/REWRITTEN/LOGICAL/OPTIMIZED/PHYSICAL/SHAPE/MEMO/DISTRIBUTED/ALL)
SYN009KEY モデル構文エラーERROR無効なデータモデルです(DUPLICATE/AGGREGATE/UNIQUE KEY)
SYN010PROPERTIES 構文エラーERRORPROPERTIES 句の構造が無効です
SYN011ENGINE 構文エラーERRORENGINE 句が無効です
SYN012INSERT OVERWRITE 構文エラーERRORINSERT OVERWRITE TABLE の構造が無効です
SYN013LOAD 構文エラーERRORLOAD LABEL / BROKER LOAD の構造が無効です
SYN014ROUTINE LOAD 構文エラーERRORCREATE ROUTINE LOAD の構造が無効です
SYN015EXPORT 構文エラーERROREXPORT TABLE ... TO の構造が無効です
SYN016BACKUP/RESTORE SNAPSHOT 構文エラーERRORBACKUP/RESTORE SNAPSHOT の構造が無効です
SYN017CREATE MTMV 構文エラーERRORCREATE MATERIALIZED VIEW の構造が無効です
SYN018CREATE CATALOG 構文エラーERRORCREATE CATALOG の構造が無効です
SYN019CREATE USER/ROLE 構文エラーERRORCREATE USER/ROLE の構造が無効です
SYN020CREATE ROW POLICY 構文エラーERRORCREATE ROW POLICY の構造が無効です
SYN021CREATE SQL_BLOCK_RULE 構文エラーERRORCREATE SQL_BLOCK_RULE の構造が無効です
SYN022CREATE STAGE 構文エラーERRORCREATE STAGE の構造が無効です
SYN023CREATE JOB 構文エラーERRORCREATE JOB ON SCHEDULE の構造が無効です
SYN024CREATE ENCRYPTKEY 構文エラーERRORCREATE ENCRYPTKEY の構造が無効です
SYN025ADMIN SET/SHOW 構文エラーERRORADMIN 文の構造が無効です
SYN026CANCEL 構文エラーERRORCANCEL 文が無効です(LOAD/EXPORT/ALTER/BACKUP/RESTORE/WARM UP)
SYN027KILL 構文エラーERRORKILL(CONNECTION/QUERY)文が無効です
SYN028TABLESAMPLE 構文エラーERRORTABLESAMPLE 句が無効です(PERCENT/ROWS、REPEATABLE)
SYN029OUTFILE 構文エラーERROROUTFILE 句が無効です(FORMAT AS、PROPERTIES)
SYN030ヒント構文エラーWARNINGヒントの形式が無効です(/*+ name(...) */ または [name] が必要です)
SYN031全文 MATCH 構文エラーERRORMATCH_ALL/MATCH_ANY/MATCH_PHRASE/MATCH_REGEXP の使い方が無効です
SYN032COLOCATE GROUP 構文エラーERRORALTER COLOCATE GROUP の構造が無効です
SYN033GRANT/REVOKE 構文エラーERRORGRANT/REVOKE 権限の構造が無効です
ステップ 5:仕様チェック

AST とトークンストリームに基づいて、仕様チェックルールを実行します。ルールは、DorisParser.g4 の文法定義と Apache Doris の開発ベストプラクティスから導出されています。

仕様チェックルール(46 件):

ルール ID名前レベルカテゴリ説明
SPEC001DISTRIBUTED BY の欠落ERRORオブジェクト設計分散戦略のない CREATE TABLE(Doris では DISTRIBUTED BY HASH または RANDOM が必要です)
SPEC002ENGINE の欠落INFOオブジェクト設計明示的な ENGINE のない CREATE TABLE(デフォルトは OLAP です)
SPEC003SELECT * の禁止ERRORデータ操作クエリでは列リストを明示的に指定する必要があります
SPEC004WHERE のない DELETE/UPDATEERRORデータ操作DML には WHERE 条件を含める必要があります
SPEC005NOT IN サブクエリWARNINGデータ操作NOT EXISTS または LEFT JOIN ... IS NULL を推奨します
SPEC006DISTINCT のパフォーマンスINFOデータ操作DISTINCT はパフォーマンスに影響する可能性があります
SPEC007暗黙的な型変換WARNINGデータ操作インデックス/ゾーンマップが無効になる可能性があります
SPEC008LIKE の先頭ワイルドカードWARNINGデータ操作ゾーンマップやインデックスを使用できません
SPEC009OR 条件INFOデータ操作実行計画に影響する可能性があります
SPEC010IN リストが長すぎるWARNINGデータ操作値が 1000 個を超える場合は一時テーブルを推奨します
SPEC011FROM サブクエリINFOデータ操作代わりに CTE を推奨します
SPEC012カーテシアン積ERRORデータ操作複数テーブルで JOIN 条件がありません
SPEC013INSERT の列リスト欠落WARNINGデータ操作デフォルトの列順序に依存します
SPEC014テーブルコメントの欠落INFOオブジェクト設計COMMENT のないテーブル
SPEC015テーブル命名規則WARNING命名小文字とアンダースコアを使用する必要があります
SPEC016列命名規則WARNING命名小文字とアンダースコアを使用する必要があります
SPEC017識別子として予約語を使用ERROR命名構文が曖昧になる可能性があります
SPEC018分散キー列が見つからないWARNINGオブジェクト設計分散キーは実際のテーブル列である必要があります
SPEC019パーティションキーと分散キーが同じINFOオブジェクト設計データの偏りが発生する可能性があります
SPEC020KEY モデル定義の欠落INFOオブジェクト設計DUPLICATE/AGGREGATE/UNIQUE KEY の明示を推奨します
SPEC021大規模テーブルにはパーティションが必要INFOオブジェクト設計クエリとガバナンスの効率を向上させます
SPEC022BUCKETS 数の推奨INFOオブジェクト設計テーブルサイズに適したバケット数を推奨します
SPEC023列に NOT NULL を指定するINFOオブジェクト設計オプティマイザーは NOT NULL を活用できます
SPEC024DROP では IF EXISTS を使用するWARNINGSQL 開発オブジェクトが見つからない場合のエラーを防ぎます
SPEC025INSERT の複数 VALUESWARNINGSQL 開発複数の VALUES グループは非効率です。STREAM LOAD / BROKER LOAD を使用してください
SPEC026列指向ストアへのリアルタイム INSERTWARNINGSQL 開発Doris(列指向)への少量データの頻繁な INSERT はコンパクションの負荷を高めます
SPEC027UPDATE/DELETE の頻繁な実行WARNINGSQL 開発Doris の UPDATE/DELETE はコストが高くなります(読み取り・マージ・書き込み)
SPEC028フィルター列への関数適用WARNINGSQL 開発統計の精度とゾーンマップの使用に影響します
SPEC029大規模テーブルの COUNTWARNINGSQL 開発テーブル全体をスキャンするため I/O コストがかかります
SPEC030クエリで LIMIT を使用するINFOSQL 開発過剰に大きな結果セットを避けます
SPEC031CTE 再帰の安全性WARNINGSQL 開発再帰 CTE の終了条件を確保します
SPEC032Catalog/DB のプレフィックスを使用するINFOSQL 開発複数のカタログがある場合の曖昧さを避けます
SPEC033ビューのネスト深度 ≤ 3INFOオブジェクト設計クラスターが必要です:ビューの依存関係を照会します
SPEC034インデックス数 > 5WARNINGオブジェクト設計クラスターが必要です:テーブルのインデックスを照会します
SPEC035プッシュダウン不可の SQL を禁止ERRORSQL 開発クラスターが必要です:EXPLAIN による分析
SPEC036BITMAP/HLL 列に集計型が必要WARNINGオブジェクト設計BITMAP/HLL 列には BITMAP_UNION/HLL_UNION を指定する必要があります
SPEC037繰り返し実行する複雑なクエリには MTMV を使用INFOオブジェクト設計繰り返し実行する集計クエリには MTMV を推奨します
SPEC038OUTFILE による頻繁なエクスポートを避けるINFOSQL 開発大規模なエクスポートには EXPORT またはブローカーを使用してください
SPEC039VARCHAR の長さを明示するWARNINGオブジェクト設計大きな文字列では長さを指定しない VARCHAR を避けます
SPEC040DECIMAL の精度を明示するWARNINGオブジェクト設計DECIMAL(p,s) または DECIMALV3(p,s) を使用し、長さを指定しない DECIMAL は避けます
SPEC041COUNT(DISTINCT) の過剰な使用ERROR複雑なクエリの制限COUNT(DISTINCT) の数が 5 を超えると、パフォーマンスが著しく低下する可能性があります
SPEC042NOT IN サブクエリの禁止ERROR複雑なクエリの制限NOT IN サブクエリは全件スキャンを引き起こし、パフォーマンスを著しく低下させます。NOT EXISTS または LEFT JOIN を使用してください
SPEC043JOIN が多すぎるERROR複雑なクエリの制限JOIN の数が 20 を超えると、クエリ計画が不安定になり、メモリ使用量が増加する可能性があります
SPEC044UNION ALL が多すぎるERROR複雑なクエリの制限UNION ALL の数が 20 を超えると、計画が複雑になり、リソース消費が増加する可能性があります
SPEC045サブクエリの深いネストERROR複雑なクエリの制限サブクエリのネスト深度が 20 を超えると、解析と実行のパフォーマンスに深刻な問題が発生する可能性があります
SPEC046SQL 文が長すぎるERROR複雑なクエリの制限SQL テキストの長さが 2MB を超えると、解析がタイムアウトしたり、メモリ使用量が過剰になったりする可能性があります
ステップ 6:レポートを生成する

チェックエンジンを使用して、Markdown形式のレポートを生成します。

python ~/.cac/skills/huawei-cloud-doris-sql-check/scripts/doris_sql_checker.py "<sql_text>" all

レポート形式:

# Doris SQL Check Report

**Check Time**: 2026-07-17T10:00:00
**Statement Type**: SELECT
**Check Mode**: all

## Summary

| Metric | Value |
|--------|-------|
| Total Rules | 74 |
| Passed | 71 |
| Violations | 3 |
| Errors (ERROR) | 1 |
| Warnings (WARNING) | 1 |
| Infos (INFO) | 1 |

## Syntax Check

### [X] SYN003: Syntax Structure Error
- **Level**: ERROR
- **Position**: Line 1, Column 15
- **Description**: Missing FROM clause
- **Fix Suggestion**: Add FROM table_name

## Specification Check

### [!] SPEC003: SELECT * Prohibited
- **Level**: WARNING
- **Position**: Line 1, Column 8
- **Description**: Query uses SELECT *, should specify explicit column list
- **Fix Suggestion**: Replace SELECT * with specific column list

主なコマンド

doris_sql_checker.py doris_sql_parser.py doris_sql_tokenizer.py

パラメーター

パラメーター必須/任意説明デフォルト
sql_text必須チェック対象のSQL文なし
check_mode任意チェックモード:syntax/spec/allsyntax+spec

出力形式

チェックレポートはMarkdown形式で出力され、次の内容が含まれます。

  • サマリーテーブル:ルールの合計数、合格数、レベル別の違反数
  • 構文チェックセクション:構文ルール(SYN-ERR、SYN001-SYN033)による違反
  • 仕様チェックセクション:仕様ルール(SPEC001-SPEC040)による違反
  • 元のSQL:チェック対象のSQL文

各違反項目には、ルールID、ルール名、レベル、位置(行/列)、説明、コードスニペット、修正案が含まれます。

クイックチェックコマンド

簡単なSQLチェックを行う場合は、直接実行します。

python ~/.cac/skills/huawei-cloud-doris-sql-check/scripts/doris_sql_checker.py "<sql_text>" [syntax|spec|all]

出力はJSON形式です。Markdown形式のレポートを出力するには、Pythonで次のように呼び出します。

from doris_sql_checker import check_sql_markdown
report = check_sql_markdown("SELECT * FROM t1", "all")
print(report)

ベストプラクティス

  1. まず構文チェックを実行して基本的なエラーを検出し、次に仕様チェックを実行して詳細に分析します。
  2. CREATE TABLE文では、SPEC001を回避するため、必ずDISTRIBUTED BY HASH(分布键)またはDISTRIBUTED BY RANDOMを含めます。
  3. Dorisテーブルでは、KEYモデル(DUPLICATE KEY/AGGREGATE KEY/UNIQUE KEY)を明示的に指定します。
  4. 包括的にチェックするには、allモードを使用します。
  5. requires_mcp: trueまたは「Requires cluster」と記載されたルール(SPEC033、SPEC034、SPEC035)にはクラスター接続が必要であり、静的モードではスキップされます。
  6. DorisはMERGE INTO ... WHEN MATCHEDやON DUPLICATE KEY UPDATEをサポートしていないため、構文エラーとして検出されます。
  7. Dorisの識別子にはダブルクォートではなくバッククォート(`)を使用します。識別子にダブルクォートを使用すると、警告が発生します。
  8. 大量のデータをロードする場合は、複数行のINSERT VALUESよりもSTREAM LOAD/BROKER LOAD/ROUTINE LOADを優先します(SPEC025)。

参考資料

ドキュメント説明
AST SchemaDoris SQLのASTノード型定義
Syntax Rules34個の構文チェックルール定義
Specification Rules40個の仕様チェックルール定義
Performance Rules11個のパフォーマンスチェックルール定義(クラスターが必要)
KeywordsDoris SQLのキーワード定義504個(DorisLexer.g4由来)
Grammar RulesDoris文の型に関する文法定義100個以上(DorisParser.g4由来)

注意事項

  1. 構文チェックと仕様チェックではクラスターへの接続は不要で、オフラインで実行できます
  2. 「クラスターが必要」とマークされたルール(SPEC033、SPEC034、SPEC035)は静的モードではスキップされます
  3. パフォーマンスルール(PERF001-PERF011)は rules/perf_rules.yaml で定義されていますが、実行にはクラスターへの接続が必要です(EXPLAIN ANALYZE、information_schema.tables、backends などのシステムテーブル)
  4. Doris 固有の構文チェック(DISTRIBUTED BY、PARTITION BY、BUCKETS、PROPERTIES、ENGINE、DUPLICATE/AGGREGATE/UNIQUE KEY、INSERT OVERWRITE、LOAD、EXPORT、MTMV、BACKUP/RESTORE、ADMIN、CANCEL、KILL、TABLESAMPLE、OUTFILE、Hint、MATCH、COLOCATE GROUP)は、Doris 3.1.4 ソースの DorisParser.g4(Nereids ANTLR4 文法)に基づいています
  5. チェックエンジンにはカスタムトークナイザーと再帰下降パーサーが含まれており、外部の SQL パーサーライブラリは不要です(ANTLR ランタイムは不要)
  6. バージョン互換性:このスキルは Doris 3.1.4 の文法に基づいています。Doris 2.1.x/3.0.x/3.1.x/4.x はほとんどの構文で同じ Nereids 文法を使用しますが、新しい構文(例:4.x で追加された機能)には軽微な違いがある場合があります。特定のルールを適用する前に、お使いのクラスターのバージョンを確認してください。

コメント