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

OLAP SQLの静的解析と自動並列化 と近況報告/cybozulabs-youth10-ma...

Cybozu
April 01, 2021

OLAP SQLの静的解析と自動並列化 と近況報告/cybozulabs-youth10-matsui

Cybozu

April 01, 2021
Tweet

More Decks by Cybozu

Other Decks in Technology

Transcript

  1. 要旨 ▸ 課題 ▹ 複雑な前処理SQLクエリ集合の管理 ▸ 手法 ▹ SQLクエリ間の依存関係自動抽出に基づく ▹

    可視化 ▹ 自動並列実行 ▹ スキーマ解析 ▸ 有効性 ▹ 実際のプロジェクトにおけるCIのデータを評価 ▹ クエリ・データにおける問題の多くを検知 ▹ 典型的な問題の分類 3
  2. 機械学習システムの技術的負債 ▪ ソフトウェアの技術的負債 – 依存関係(パッケージ・ヘッダファイル等)の管理 ▪ 機械学習システムでは、上記に加えてデータの依存関係も管理する必要 – データの依存関係はコンパイラ等の支援がない –

    CACE(Changing Anything Changing Everything) → 技術的負債の返済が困難 → 課題を解決するための静的解析ツール等が求められる [1] Sculley , D., Holt, G., Golov in, D., Dav ydov, E., Phillips, T., Ebner, D., Chaudhary , V., Young, M., Crespo, J.- F. and Dennison, D.: Hidden Technical Debt in Machine Learning Sy stems, Proceedings of the 28th International Conf erence on Neural Inf ormation Processing Sy stems - Volume 2, NIPS’15, Cambridge, MA, USA, MIT Press, p. 2503–2511 (2015). [2] Sculley , D., Holt, G., Golov in, D., Dav ydov, E., Phillips, T., Ebner, D., Chaudhary , V. and Young, M.: Machine Learning: The High Interest Credit Card of Technical Debt, SE4ML: Sof tware Engineering f or Machine Learning (NIPS 2014 Workshop) (2014). 5
  3. SQL によるデータ処理技術の進展 ▪ 高圧縮率の列指向データフォーマッ ト ▪ 木構造的ジョブディスパッチ → 高速なデータ処理 ▪

    Dremel をクラウドサービスとして 提供する BigQuery だけでなく、多 くの分析向けクラウドデータベース が提供されている ▪ OSSとしては Apache Drill も ▪ SQL は普及率の高い言語 ▪ SQLによる機械学習モデルの構築も – データ前処理だけでなく – 機械学習システム全体を管理 [3] Melnik, S., Gubarev , A., Long, J. J., Romer, G., Shiv akumar, S., Tolton, M. and Vassilakis, T.: Dremel: interactiv e analy sis of web-scale datasets, Proceedings of the VLDB Endowment, Vol. 3, No. 1-2, pp. 330–339 (online), av ailable f rom ⟨http://dl.acm.org/citation.cfm?id=1920841.1920886⟩ (2010). 6
  4. 依存関係の自動抽出 1. 複数のSQLファイルから、テーブル名をクエリの種類ごとに抽出する。 2. CREATE文 ← テーブル参照 という依存関係でエッジを追加していく。 3. グラフ構造をDOT言語で書き出す

    - 同名のテーブルをCREATEするクエリがある場合、エラーを出力し異常終了す る。 - グラフ構造にサイクルがあった場合、エラーを出力し異常終了する。 - 依存関係のサイクルについては、議論で - 得られるグラフ構造はサイクルのない有向非巡回グラフ(DAG)となる 16
  5. 全体のスキーマ解析 20 - 順次型解析し、CREATE TABLE文を見つけたらス キーマを環境に登録 digraph G { 0[label="./create_table.sql"];

    1[label="./select1.sql"]; 2[label="./select2.sql"]; 0->1 ; 0->2 ; } DOT言語 CREATE TABLE SELECT トポロジカルソート Zeta SQL 構文解析・型解析 SELECT
  6. 結果 ▪ 133件(16%)がAlphaSQLによるエラー – 96件(12%)が必要なデータが存在しないことによるエラー – 19件(2%)がカラムや関数の型が合わないことによるエラー – 16件(2%)がシンタックスエラー –

    同名テーブルを作成したことによるエラーが1件 – 依存関係にサイクルがあったことによるエラーが1件 ▪ 型エラーが確認できた → もともとの課題を静的解析で検知できた ▪ 多くのエラーがデータの依存関係による → [1, 2] の問題提起と整合 24
  7. 経験的な定性的評価 ▪ 偽陽性はない – AlphaSQLが検知したデータ依存関係エラー・型エラー・構文エラーは、1枚の SQLには実行前に毎回適用されるため、必ず発生する – 同名テーブルのエラーはどちらのテーブルを残すのか決定不能なので問題とい える(実際にケアレスミスで発生した) –

    サイクルエラーも後に議論するように問題となる ▪ 偽陰性もほぼない – 例外はメモリエラー等のランタイムエラーのみ ▪ 追加工数なく、依存関係が自動解決され、並列化される ▪ README上のDAG画像が自動更新 → 複雑な依存関係の管理を補助できた 25
  8. まとめ ▸ 課題 ▹ 複雑な前処理SQLクエリ集合の管理 ▸ 手法 ▹ SQLクエリ間の依存関係自動抽出に基づく ▹

    可視化 ▹ 自動並列実行 ▹ スキーマ解析 ▸ 有効性 ▹ 実際のプロジェクトにおけるCIのデータを評価 ▹ クエリ・データにおける問題の多くを検知 ▹ 典型的な問題の分類 ▸ ソースコードは全て公開済み 39