Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

SQLのASTからモデル類似率を計算してみた

Avatar for myshmeh myshmeh
December 09, 2025
110

 SQLのASTからモデル類似率を計算してみた

datatech-jp Casual Talks #8で発表した「SQLのASTからモデル類似率を計算してみた」のスライドです。

AIエージェント時代では、各所に生成コードが乱立し、似たロジックが散在することで指標の揺らぎやモデルコードの変更容易性低下が課題となります。

本発表では、dbt Fusionで実装検討中のmodel_overlap機能のアプローチを予想し、SQLのAST(抽象構文木)とTree Edit Distance(TED)を用いてモデル間の類似度を計算する手法を自前実装した所感をお話ししています。

内容
- 課題:AI生成コードの乱立による類似ロジックの散在
- 解決策:TEDによるASTベースの類似度検出
- sql-similarityツールの紹介と実験結果
- 将来の課題:パフォーマンス、指標としての妥当性、粒度の検討

関連リンク
- sql-similarity: https://github.com/myshmeh/sql-similarity-py
- Zenn記事もあります

Avatar for myshmeh

myshmeh

December 09, 2025
Tweet

Transcript

  1. Copyright stable, inc. All rights reserved.
 SQLのASTからモデル類似率を計算してみた 
 2025.12.09 datatech-jp

    Casual Talks #8
 1 stable株式会社
 データエンジニア 三角勇貴

  2. Copyright stable, inc. All rights reserved.
 本日お話しすること
 2
 Fusionで実装検討中の model_overlap

    (モデルの類似具合を出す機能らしい )
 の実装アプローチを予想して、実際に自前実装した所感をお話しします。 
 - はじめに
 - 課題
 - 解決策
 - sql-similarityのご紹介
 - 将来の課題 
 - おわりに
 \ zenn記事もあります! /

  3. Copyright stable, inc. All rights reserved.
 1. はじめに
 2. 課題


    3. 解決策
 4. sql-similarityのご紹介
 5. 将来の課題 
 6. おわりに
 3
  4. Copyright stable, inc. All rights reserved.
 自己紹介
 4 三角勇貴( @myshmeh)


    stable株式会社 データエンジニア
 - 略歴 - プライバシーガバナンス → ソフトウェアエンジニア → CS修士 → データエンジニア - 2025年1月にstable株式会社へ入社 - 裏稼業 - dbt Fusionの守人 - 休日 - 妻とモンハンエンジョイ
  5. Copyright stable, inc. All rights reserved.
 会社概要 5
 わたしたちは データエンジニアリング領域のクライアントワーク

    を中心に、 
 「企業のデータ活用の成功」 を支援する会社 です。
 会社名
 stable株式会社
 設立
 2023年9月
 所在地
 〒151-0051 東京都渋谷区千駄ケ谷
 5丁目15−5 DSビル703
 代表取締役 
 宮﨑 一輝
 従業員数
 正社員3名、業務委託 12名(2025年9月時点)

  6. Copyright stable, inc. All rights reserved.
 データ基盤整備のプロの知見やリソースを、 1ヶ月単位で提供しています。 
 stableの提供サービス


    6
 プロの知見・リソースがすぐに得られる 
 - 多数の案件を経験するプロの知見を得られる 
 - 実装まで行うので、社内にリソースがなくても OK
 
 
 1ヶ月ごとの月額制で柔軟な支援体制 
 - 見積もりが発生せず、すぐプロジェクトを開始できる 
 - 1ヶ月ごとにコミット量の調整が可能 

  7. Copyright stable, inc. All rights reserved.
 案件獲得も順調なので、データエンジニアの方の採用を強化中! 
 データエンジニア募集中 


    7
 *1: Pitta <https://pitta.me/matches/scbUsnxgXYJd>
 *2: note <https://note.com/ikki_mz >
 \ カジュアル面談募集中 /
 \ 会社のことが分かる noteも書いてます /

  8. Copyright stable, inc. All rights reserved.
 1. はじめに
 2. 課題


    3. 解決策
 4. sql-similarityのご紹介
 5. 将来の課題 
 6. おわりに
 8
  9. Copyright stable, inc. All rights reserved.
 1. はじめに
 2. 課題


    3. 解決策
 4. sql-similarityのご紹介
 5. 将来の課題 
 6. おわりに
 10
  10. Copyright stable, inc. All rights reserved.
 解決策 – model_overlap Fusionのmodel

    overlap (検討中アイデア) は、似ているモデルを検知する機能。 Tree Edit Distance (TED)により計算するのではと推測。 11
 https://speakerdeck.com/myshmeh_/coalesce-2025matome-fusionnokoremade-jin-sositekorekara?slide=73
  11. Copyright stable, inc. All rights reserved.
 解決策 – TEDとは TEDとは、一方から他方へのツリーに変換するために必要な最小編集コスト。

    12
 = ノードの削除・変更・追加 
 SELECT
 base_month
 revenue
 FROM
 revenue_monthly
 WHERE
 >=
 base_month
 ‘2025-01-01’
 SELECT
 base_month
 revenue
 FROM
 revenue_monthly
 WHERE
 >=
 base_month
 ‘2024-01-01’
 モデルA
 モデルB
 意味: 2025年の月毎のレベニューモデル 
 意味: 2024年の月毎のレベニューモデル 

  12. Copyright stable, inc. All rights reserved.
 解決策 – TEDとは TEDとは、一方から他方へのツリーに変換するために必要な最小編集コスト。

    13
 = ノードの削除・変更・追加 
 SELECT
 base_month
 revenue
 FROM
 revenue_monthly
 WHERE
 >=
 base_month
 ‘2025-01-01’
 SELECT
 base_month
 revenue
 FROM
 revenue_monthly
 WHERE
 >=
 base_month
 ‘2024-01-01’
 モデルA
 モデルB
 ‘2024-01-01’
 1: 変更
 最小編集回数 = 1回 → 似てる! 
 → 2024-25年のモデルとして統合できそう! 

  13. Copyright stable, inc. All rights reserved.
 解決策 – TEDとは TEDとは、一方から他方へのツリーに変換するために必要な最小編集コスト。

    14
 = ノードの削除・変更・追加 
 SELECT
 base_month
 revenue
 FROM
 revenue_monthly
 WHERE
 >=
 base_month
 ‘2025-01-01’
 SELECT
 id
 FROM
 users
 WHERE
 >=
 age
 60
 モデルA
 モデルC
 意味: シニア世代のユーザ IDモデル
 意味: 2025年の月毎のレベニューモデル 

  14. Copyright stable, inc. All rights reserved.
 解決策 – TEDとは TEDとは、一方から他方へのツリーに変換するために必要な最小編集コスト。

    15
 = ノードの削除・変更・追加 
 SELECT
 base_month
 revenue
 FROM
 revenue_monthly
 WHERE
 >=
 base_month
 ‘2025-01-01’
 SELECT
 id
 FROM
 users
 WHERE
 >=
 age
 60
 モデルA
 モデルC
 age
 1: 変更
 60
 2: 変更
 users
 3: 変更
 id
 5: 変更
 4: 削除
 最小編集回数 = 5回 → 似てない 
 → リファクタ候補にはならなそう ...

  15. Copyright stable, inc. All rights reserved.
 1. はじめに
 2. 課題


    3. 解決策
 4. sql-similarityのご紹介
 5. 将来の課題 
 6. おわりに
 16
  16. Copyright stable, inc. All rights reserved.
 SQLパーサーとTEDを用いて、model overlapを模したプログラムを作成した。 17
 *https://github.com/myshmeh/sql-similarity-py

    sql-similarityのご紹介 sql-similarity /path/to/dir 使い方: 下記コマンドで、ディレクトリ内の SQLファイル全組み合わせの類似度を出力 
 プログラム概要:

  17. Copyright stable, inc. All rights reserved.
 類似度を特定して、適宜ロジックを共通化できる → 指標の揺らぎを防ぎ、変更容易 性を担保できる!

    
 sql-similarityのご紹介 – 嬉しいポイント
 20
 daily_revenue
 weekly_revenue (リファクタ後 )

  18. Copyright stable, inc. All rights reserved.
 1. はじめに
 2. 課題


    3. 解決策
 4. sql-similarityのご紹介
 5. 将来の課題 
 6. おわりに
 21
  19. Copyright stable, inc. All rights reserved.
 「ASTが似てる ⇒ 共通ロジックがある」わけではない。リファクタ候補の特定に は、データ等の他の指標も重要。

    23 将来の課題 2/3 select 1; with cte as (select 1) select 1 from cte; select case when true then 1 end; 全て1が返却されるが、ツリー構造は異なる。 

  20. Copyright stable, inc. All rights reserved.
 もっと細かい単位で類似性をみた方が良い?例えば、CTEレベルでも似た処理は書 き散らされ得る。 24 将来の課題

    3/3 with cte1 as ( select ###, @@($$) from ref(**) ), cte2 as ( select +++ from cte1 group by all ) . . . select * from final with cte1 as ( select ###, @@($$) from ref(**) ), cte2_ as ( select !@#, #$%, $$(!@, ##) as @$, &* over (partition by @#@) as # from cte1 group by 1, 2 qualify # is not null ) . . . select * from final
  21. Copyright stable, inc. All rights reserved.
 1. はじめに
 2. 課題


    3. 解決策
 4. sql-similarityのご紹介
 5. 将来の課題 
 6. おわりに
 25
  22. Copyright stable, inc. All rights reserved.
 26 まとめ
 - AIによるコード大量生成で似たロジックが散在

    
 
 - TEDでコード構造の類似度を検出 → 大量のコードから、リファ クタ候補を定量的にある程度特定できそう 
 
 - パフォーマンス・指標としての妥当性など、考慮点はあり 
 Fusionでどう実装されるのか、今後が楽しみ!