Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TiDB の SQL Parser を使用して CSV ファイルの不備を検知する仕組み

shinnosuke
February 19, 2025

TiDB の SQL Parser を使用して CSV ファイルの不備を検知する仕組み

Go Connect #5 2025/02/19 (Web) @株式会社ビットキー
https://gotalk.connpass.com/event/340279/

参考記事
TiDBのSQLパーサーを使ってみました
https://qiita.com/kitahar/items/3c2655cdee4819fb0e45

pingcap/parser (MySQL互換) で SQL を手軽に解析
https://developers.freee.co.jp/entry/parse-sql-with-pingcapparser

GolangでMySQLのSQL文をパースする(CREATE TABLE文のパース例)
https://zenn.dev/nishisuke/articles/golang-parse-sql

shinnosuke

February 19, 2025
Tweet

More Decks by shinnosuke

Other Decks in Technology

Transcript

  1. 2 自己紹介 •  SO Technologies 株式会社 •  新卒4年目 • Go言語でAPI/バッチ処理の開発を主に行いつつ

    問い合わせの調査も行っている グループ横断の取り組みで使うアプリの開発にも従事 •  毎週ボルダリングに通ってる 岸田 慎之介 @mwudo
  2. CSVの不備 4 開発で DB 定義(DDL)に則したダミーデータ を CSV ファイルとしてリポジトリで用意 CSV ファイルを

    DB へ投入するときのコマンドは LOAD DATA LOCAL INFILE を使用 既存の DB のテーブル定義に対して列の追加・削除などの対応を 行った時に漏れる場合があった
  3. github.com/pingcap/tidb/pkg/parser 7 SQL を抽象構文木(以下 AST)に変換 AST のノードを参照することで SQL の情報を取得することが可能 https://github.com/pingcap/tidb/tree/master/pkg/parser

    MySQL のほとんどの構文をサポート 数行の実装を追加するだけで、独自の構文をサポート パフォーマンスがよい README によると、
  4. さらなる改善 DDL のカラムの順序と CSV ファイルの列の順序が異なっていると検知できていない LOAD DATA LOCAL INFILE は

    DDL のカラムの順序のつもりで CSV ファイルを解釈する 14 カラムの順序の検知もテストに加えたい
  5. 参考記事 ❏ TiDB の SQL Parser を使用して CSV ファイルの不備を検知する仕組み ❏

    TiDBのSQLパーサーを使ってみました ❏ pingcap/parser (MySQL互換) で SQL を手軽に解析 ❏ GolangでMySQLのSQL文をパースする(CREATE TABLE文のパース例) 15