mcpField
H
huawei-cloud-mrs-spark-sql-check

huawei-cloud-mrs-spark-sql-check

github.com/huaweicloudデータ・データベース59113 回インストール2 日前に更新
リポジトリ

huawei-cloud-mrs-spark-sql-check について

Huawei Cloud MRS Spark SQL を静的解析するスキルです。実行前に構文や規約を確認したい開発者向けで、独自のトークナイザー、パーサー、ルールエンジンにより、クラスターへ接続せず Markdown レポートを生成します。

主な機能

  1. 01独自の Spark SQL トークナイザーとパーサー
  2. 02構文と規約のチェック
  3. 03Spark 固有構文への対応
  4. 04構文・規約・全項目のモード選択
  5. 05違反内容を Markdown で報告

活用シーン

  1. 01MRS Spark で実行する前に SQL を検証
  2. 02Spark SQL の規約に照らして文を確認
  3. 03Spark 固有の DDL・DML の構文問題を発見
  4. 04SQL 設計や性能上の警告を特定

インストール

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

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

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

同梱ファイル

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

assets/
report_template.md
references/
acceptance-criteria.md
ast-schema.md
rules/
grammar_rules.py
keywords.py
perf_rules.yaml
spec_rules.yaml
syntax_rules.yaml
scripts/
spark_sql_checker.py
spark_sql_parser.py
spark_sql_tokenizer.py

詳細

MRS Spark SQL チェック スキル

Huawei Cloud MRS Spark の SQL 仕様チェックを専門とし、Huawei Cloud MRS Spark の SQL 文を包括的にチェックします。Spark 固有の構文を正確に識別できる、独自開発の Spark SQL トークナイザーと再帰下降パーサーを備えています。

概要

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

適用シナリオ:

  • MRS Spark クラスターで実行する前に SQL 構文を検証する
  • Spark SQL 開発仕様に照らして SQL 文をレビューする
  • Spark 固有の構文(USING、OPTIONS、CACHE TABLE、CREATE TEMP VIEW など)をチェックする
  • Spark SQL 文における潜在的なパフォーマンス上のアンチパターンを特定する

一般的なユースケース:

  • 「この Spark SQL をチェックしてください:SELECT * FROM t1」
  • 「この CREATE TABLE USING PARQUET は Spark の仕様に準拠していますか?」
  • 「この INSERT OVERWRITE 文の構文を検証してください」
  • 「自分の Spark SQL が仕様に準拠しているかレビューしてください」

チェックモード

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

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

前提条件

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

ワークフロー

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

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

ステップ 2:トークン化

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

python ~/.cac/skills/huawei-cloud-mrs-spark-sql-check/scripts/spark_sql_tokenizer.py "<sql_text>"

トークナイザーは以下をサポートします:

  • すべての Spark SQL キーワード(4カテゴリ:RESERVED、COL_NAME、TYPE_FUNC_NAME、UNRESERVED)
  • Spark 固有のトークン:HINT(/*+ ... */)、BACKTICK_IDENT(`ident`)
  • リテラル:文字列、整数、浮動小数点数
  • コメントのスキップ(-- の単一行コメント、/* / の複数行コメント。ただし、/+ hint */ は HINT トークンとして保持)
ステップ 3:解析

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

python ~/.cac/skills/huawei-cloud-mrs-spark-sql-check/scripts/spark_sql_parser.py "<sql_text>"

パーサーは、以下の主な文の種類をサポートします:

  • DML:SELECT、INSERT(INSERT OVERWRITE を含む)、UPDATE、DELETE、MERGE
  • DDL:CREATE TABLE(USING/OPTIONS を含む)、ALTER TABLE、DROP、CREATE VIEW/TEMP VIEW/GLOBAL TEMP VIEW、TRUNCATE
  • DCL:GRANT、REVOKE
  • ユーティリティ:EXPLAIN、SET、SHOW、DESCRIBE、ANALYZE TABLE
  • Spark 固有:CACHE TABLE、UNCACHE TABLE、CLEAR CACHE、REFRESH TABLE/FUNCTION、ADD JAR、LIST JAR、RESET

Spark 固有の構文:

  • CREATE TABLE ... USING {parquet|orc|json|csv|...} [OPTIONS (...)]
  • CACHE [LAZY] TABLE table_name [AS SELECT ...]
  • CREATE [OR REPLACE] [GLOBAL] TEMP [MATERIALIZED] VIEW
  • REFRESH TABLE table_name / REFRESH FUNCTION func_name
  • ADD JAR /path/to/file.jar
  • /*+ BROADCAST(table) */ および /*+ COALESCE(N) */ ヒント
  • LATERAL VIEW ... EXPLODE(...)
  • PARTITIONED BY (col_name)(Spark スタイル。列名のみ)
ステップ 4:構文チェック

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

構文チェックルール(20 個):

ルール ID名前レベル説明
SYN-ERR字句エラーERRORSQL テキスト内に認識できない文字があります
SYN001無効なキーワードERRORSpark SQL でサポートされていないキーワードです
SYN002識別子としての予約語ERROR引用符で囲まずに予約語を識別子として使用しています
SYN003構文構造エラーERROR必須の句またはキーワードがありません
SYN004句の順序エラーERRORSQL の句の順序が文法に準拠していません
SYN005PARTITIONED BY 構文エラーERRORパーティション定義の構文が無効です
SYN006CLUSTERED BY 構文エラーERRORバケット定義の構文が無効です(Hive 互換)
SYN007STORED AS / USING 構文エラーERRORストレージ形式またはデータソースが無効です
SYN008ROW FORMAT 構文エラーERRORROW FORMAT 定義が無効です(Hive 互換)
SYN009INSERT OVERWRITE 構文エラーERRORINSERT OVERWRITE の構造が無効です
SYN010LATERAL VIEW 構文エラーERRORLATERAL VIEW の構造が無効です
SYN011サブクエリ構文エラーERRORサブクエリの構造が無効です
SYN012CREATE TABLE 構造エラーERRORCREATE TABLE に必要な要素がありません
SYN013ALTER TABLE 構文エラーERRORALTER TABLE のアクションが無効です
SYN014MERGE 構文エラーERRORMERGE 文の構造が無効です
SYN016USING 句エラーERRORUSING のデータソース指定が無効です
SYN017OPTIONS 句エラーERROROPTIONS 句の形式が無効です
SYN018CACHE TABLE 構文エラーERRORCACHE TABLE の構造が無効です
SYN019REFRESH 構文エラーERRORREFRESH 文の構造が無効です
SYN020ADD/LIST JAR 構文エラーERRORADD JAR / LIST JAR の構造が無効です
ステップ 5:仕様チェック

AST とトークンストリームに基づいて、仕様チェックルールを実行します。ルールは Spark SQL 開発仕様と MRS Spark のベストプラクティスに基づいています。

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

ルール ID名前レベルカテゴリ説明
SPEC001SELECT * の禁止WARNINGデータ操作クエリでは列を明示的に指定する必要があります
SPEC002WHERE のない DELETE/UPDATEERRORデータ操作DML には WHERE 条件を含める必要があります
SPEC003直積ERRORデータ操作複数テーブルに JOIN 条件がありません
SPEC004暗黙的な型変換WARNINGデータ操作予期しない結果を引き起こす可能性があります
SPEC005LIKE の先頭ワイルドカードWARNINGデータ操作パーティションプルーニングを使用できません
SPEC006パーティションフィールドへの関数適用WARNINGデータ操作パーティションフィールドに関数を適用すると、プルーニングができなくなります
SPEC007INSERT の列リストがないWARNINGデータ操作デフォルトの列順序に依存します
SPEC008テーブルコメントがないINFOオブジェクト設計テーブルにコメントがありません
SPEC009識別子としての予約語ERROR命名構文が曖昧になる可能性があります
SPEC010列名が長すぎるWARNING命名列名が 30 文字を超えています
SPEC012金額に FLOAT/DOUBLE を使用ERRORオブジェクト設計金額フィールドには DECIMAL を使用してください
SPEC013列数が多すぎるWARNINGオブジェクト設計テーブルの列数は 100 列以下にしてください
SPEC014パーティションフィールドが多すぎるWARNINGオブジェクト設計パーティションフィールドは 3 個以下にしてください
SPEC015列コメントがないINFOオブジェクト設計列にコメントがありません
SPEC016CASE WHEN に ELSE がないWARNINGデータ操作CASE WHEN には ELSE 句を含めてください
SPEC017NULL 値の処理WARNINGデータ操作条件式での NULL の処理
SPEC018文字列 'null' の禁止ERRORデータ操作文字列 'NULL' を使用しないでください
SPEC019JOIN フィールドの型が一致しないWARNINGデータ操作JOIN フィールドの型は一致させてください
SPEC020INSERT INTO VALUESWARNINGSQL 開発代わりに INSERT SELECT を使用してください
SPEC021サブクエリのネスト深度WARNINGSQL 開発サブクエリのネストは 3 階層を超えないようにしてください
SPEC022パーティションプルーニングがないERRORデータ操作パーティションフィルターのないパーティションテーブルへのクエリです
SPEC023非標準の JOIN 条件WARNINGデータ操作JOIN ON に IF/CASE WHEN を含めないでください
SPEC024CASCADE 使用時の警告WARNINGSQL 開発ALTER TABLE で CASCADE を使用する際は注意してください
SPEC025STORED AS より USING を推奨WARNINGSQL 開発Spark ネイティブの USING 構文を使用してください
SPEC026CACHE TABLE の推奨INFOSQL 開発繰り返しアクセスするテーブルをキャッシュしてください
SPEC027BROADCAST ヒントの推奨INFOSQL 開発小さなテーブルにはブロードキャスト結合を使用してください
SPEC028DROP に IF EXISTS がないWARNINGSQL 開発DROP では IF EXISTS を使用してください
SPEC029ADD JAR の警告INFOSQL 開発ADD JAR より --jars を使用してください
ステップ 6:レポートの生成

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

python ~/.cac/skills/huawei-cloud-mrs-spark-sql-check/scripts/spark_sql_checker.py "<sql_text>" all

レポート形式:

# MRS Spark SQL Check Report

**Check Time**: yyyy-mm-ddThh:mm:ss
**Statement Type**: SELECT
**Check Mode**: all

## Summary

| Metric | Value |
|--------|-------|
| Total Rules | 56 |
| Passed | 51 |
| Violations | 5 |
| Errors (ERROR) | 2 |
| Warnings (WARNING) | 2 |
| 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

### [!] SPEC001: 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

パラメーター

パラメーター必須/任意説明デフォルト
sql_text必須チェックする SQL 文N/A
check_mode任意チェックモード:syntax/spec/allsyntax+spec

出力形式

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

  • サマリーテーブル:ルールの総数、合格数、レベル別の違反数
  • 構文チェックセクション:構文ルール(SYN-ERR、SYN001-SYN020)による違反
  • 仕様チェックセクション:仕様ルール(SPEC001-SPEC029)による違反
  • 大規模 SQL インターセプトセクション:インターセプトルール(INTERCEPT001-INTERCEPT007)による違反
  • 元の SQL:チェック対象の SQL 文

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

主なコマンド

spark_sql_checker.py spark_sql_parser.py spark_sql_tokenizer.py

ベストプラクティス

  1. まず構文チェックを実行して基本的なエラーを検出し、次に仕様チェックでより詳細に分析します
  2. CREATE TABLE 文では、STORED AS PARQUET より USING parquet を優先します
  3. 圧縮率とクエリのパフォーマンスを高めるには、ORC または Parquet のストレージ形式を使用します
  4. パーティション化されたテーブルをクエリする際は、必ずパーティションフィルター条件を追加します
  5. 包括的にチェックするには、all モードを使用します
  6. 小規模テーブルと大規模テーブルを結合する際は、/*+ BROADCAST(small_table) */ ヒントを使用します

参考資料

ドキュメント説明
AST SchemaSpark SQL の AST ノード型の定義
Syntax Rules20 個の構文チェックルールの定義
Specification Rules29 個の仕様チェックルールの定義
KeywordsSpark SQL のキーワード定義
Grammar Rules文型の文法定義

注意事項

  1. 構文チェックと仕様チェックにはクラスターへの接続が不要で、オフラインで実行できます
  2. Spark 固有の構文(USING、OPTIONS、CACHE TABLE など)のチェックは、Spark SQL の文法定義に基づいています
  3. チェックエンジンにはカスタムトークナイザーと再帰下降パーサーが含まれており、外部の SQL 解析ライブラリは必要ありません
  4. Spark SQL は HiveQL に由来するため、Hive 互換の構文(STORED AS、CLUSTERED BY、ROW FORMAT)にも対応しています

コメント