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

ZetaSQLを使って、 カラムリネージ機能を作った話

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

ZetaSQLを使って、 カラムリネージ機能を作った話

Avatar for gtnao

gtnao

June 05, 2023
Tweet

More Decks by gtnao

Other Decks in Programming

Transcript

  1. ©primeNumber Inc. 2 中根 直孝 (@gtnao) WHO AM I? 株式会社primeNumber

    (2018/11~now) Lead Engineer Twitter:@gtnao GitHub:@gtnao0219 趣味: 音楽(ギター)、飲酒、サウナ、将棋 1
 2
  2. ©primeNumber Inc. 3 データ分析基盤のための技術スタックを提供するサービス。 trocco®とは フルマネージド ETL/ELT 日本特有のサービスを含めた、約 100種のコネクタに対応 GUI

    ワークフロー 複雑なデータ処理フローを GUI 上で設定・運用 データマネジメント機能 データリネージ / Git 連携・コード管理 / スキーマ追従 / データカ タログ etc.
  3. ©primeNumber Inc. 7 SQLというただの文字列データを入力として、木構造のデータ構造を出力する。 その後のプログラムから扱いやすくなる。 SQLパーサーの役割 SQL AST(抽象構文木) Select ※

    一部ノードを省略 SelectList FromClause Path Expression Path Expression Identifier (id) Identifier (users) TablePath Expression Identifier (users) Identifier (name)
  4. ©primeNumber Inc. 9 リネージの作り方② AST① Select FromClause Path Expression Identifier

    (A) TablePath Expression Identifier (A) JOIN TablePath Expression Identifier (B) SelectColumn (省略) Identifier (name) Alias(a_name) SelectColumn SelectList SelectColumn (省略) a_nameは、 テーブルAの カラムname ※ ②は省略 sum_valueは、 テーブルAの カラムvalueと、 テーブルBの カラムvalueから 算出 b_nameは、 テーブルBの カラムname
  5. ©primeNumber Inc. 10 リネージの作り方③ 依存関係① 依存関係② 依存元 依存先 A.name C.a_name

    B.name C.b_name A.value C.sum_value B.value C.sum_value 依存元 依存先 C.a_name D.a_name C.sum_value D.sum_value
  6. ©primeNumber Inc. 12 • ZetaSQLはC++、Javaで利用可能。 • JavaのPublicなインターフェースでは実行プランの木構造だけしか出せない。 ◦ ※ 実行プランの木構造とは、ASTを元に生成されるクエリの実行計画の意味合

    いなどを含んだ木構造を意味しています。 ◦ (例:あるテーブルをindexスキャンするか、sequentialスキャンするか) • やむを得ず、C++で進める。 ◦ 言語自体も難しいが、Bazelというビルドツールを使う必要がある。 ◦ Publicなリポジトリとはいえ、社内ツール感が否めず、ドキュメントはほとん ど存在しない。 • 野良GitHubリポジトリを漁る日々。 苦労したこと
  7. ©primeNumber Inc. 14 • クエリをASTに変換できると、アイデア次第でできることが沢山ある。 ◦ ZetaSQLを使うと、BigQuery特有のQuery syntaxでもパース可能。 ◦ ただしキャッチアップが大変?

    ◦ サンドボックス環境を用意してみました。 ◦ https://github.com/gtnao0219/zetasql-docker-sandbox ▪ 初回ビルドが結構時間かかるのでご注意ください。 ▪ エディターの補完がDockerだとうまく行かずそこは間に合わず… 終わりに