Slide 1

Slide 1 text

ZetaSQLを使って、 カラムリネージ機能を作った話 2023.6 primeNumber Inc. Naotaka Nakane(SWE)

Slide 2

Slide 2 text

©primeNumber Inc. 2 中根 直孝 (@gtnao) WHO AM I? 株式会社primeNumber (2018/11~now) Lead Engineer Twitter:@gtnao GitHub:@gtnao0219 趣味: 音楽(ギター)、飲酒、サウナ、将棋 1
 2

Slide 3

Slide 3 text

©primeNumber Inc. 3 データ分析基盤のための技術スタックを提供するサービス。 trocco®とは フルマネージド ETL/ELT 日本特有のサービスを含めた、約 100種のコネクタに対応 GUI ワークフロー 複雑なデータ処理フローを GUI 上で設定・運用 データマネジメント機能 データリネージ / Git 連携・コード管理 / スキーマ追従 / データカ タログ etc.

Slide 4

Slide 4 text

©primeNumber Inc. 4 BigQueryなどのDWH上でクエリを実行して、 その結果を同じDWH上の別テーブルへInsertする機能。 上 データマート機能とは

Slide 5

Slide 5 text

©primeNumber Inc. 5 データマート機能で作ったテーブル同士の依存関係がカラム単位で可視化される機能。 カラムリネージ機能とは ※ リネージ(lineage)は、「血統」を意味する学術用語

Slide 6

Slide 6 text

©primeNumber Inc. 6 https://github.com/google/zetasql BigQueryやCloudSpannerのSQLのパースに使われているらしいOSS。 ZetaSQLとは

Slide 7

Slide 7 text

©primeNumber Inc. 7 SQLというただの文字列データを入力として、木構造のデータ構造を出力する。 その後のプログラムから扱いやすくなる。 SQLパーサーの役割 SQL AST(抽象構文木) Select ※ 一部ノードを省略 SelectList FromClause Path Expression Path Expression Identifier (id) Identifier (users) TablePath Expression Identifier (users) Identifier (name)

Slide 8

Slide 8 text

©primeNumber Inc. 8 リネージの作り方① データマート設定(SQL)① 出力先:C データマート設定(SQL)② 出力先:D ※ AテーブルとBテーブルをJOINしてCテーブルを作成 ※ CテーブルからさらにDテーブルを作成

Slide 9

Slide 9 text

©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

Slide 10

Slide 10 text

©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

Slide 11

Slide 11 text

©primeNumber Inc. 11 リネージの作り方④ リネージ

Slide 12

Slide 12 text

©primeNumber Inc. 12 ● ZetaSQLはC++、Javaで利用可能。 ● JavaのPublicなインターフェースでは実行プランの木構造だけしか出せない。 ○ ※ 実行プランの木構造とは、ASTを元に生成されるクエリの実行計画の意味合 いなどを含んだ木構造を意味しています。 ○ (例:あるテーブルをindexスキャンするか、sequentialスキャンするか) ● やむを得ず、C++で進める。 ○ 言語自体も難しいが、Bazelというビルドツールを使う必要がある。 ○ Publicなリポジトリとはいえ、社内ツール感が否めず、ドキュメントはほとん ど存在しない。 ● 野良GitHubリポジトリを漁る日々。 苦労したこと

Slide 13

Slide 13 text

©primeNumber Inc. 13 ● BigQuery以外のDWHでは個別に実装が必要。 ○ Snowflakeは2023年現在PublicなSQLパーサーを公開していないため対応できず。 ○ RedshiftはPostgreSQLをベースとしているが、どこまでカバーできるか未検証。 ● 最新のBigQueryのQuery syntaxに追従できない。 ○ 一部Featureは明示的に対応しているがキリがない。 ○ 課題

Slide 14

Slide 14 text

©primeNumber Inc. 14 ● クエリをASTに変換できると、アイデア次第でできることが沢山ある。 ○ ZetaSQLを使うと、BigQuery特有のQuery syntaxでもパース可能。 ○ ただしキャッチアップが大変? ○ サンドボックス環境を用意してみました。 ○ https://github.com/gtnao0219/zetasql-docker-sandbox ■ 初回ビルドが結構時間かかるのでご注意ください。 ■ エディターの補完がDockerだとうまく行かずそこは間に合わず… 終わりに

Slide 15

Slide 15 text

Happy Data Engineering! ご清聴ありがとうございました。