Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ZetaSQLを使って、 カラムリネージ機能を作った話
Search
gtnao
June 05, 2023
Programming
2.2k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ZetaSQLを使って、 カラムリネージ機能を作った話
gtnao
June 05, 2023
More Decks by gtnao
See All by gtnao
AI Native 開発への挑戦
gtnao
2
13k
TROCCO今昔
gtnao
0
520
ClaudeCodeにキレない技術
gtnao
1
1.7k
PaaSとSaaSの境目で信頼性と開発速度を両立する 〜TROCCO®︎のこれまでとこれから〜
gtnao
8
24k
0 -> 1でフロントエンドのテストを 書く文化を作っている話
gtnao
2
2.9k
Other Decks in Programming
See All in Programming
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
630
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
200
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
190
Build-to-own AI: Agentic Development for Humans
inesmontani
PRO
0
160
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
560
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
230
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
250
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
160
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
160
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
480
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
160
メールのエイリアス機能を履き違えない
isshinfunada
0
200
Featured
See All Featured
Embracing the Ebb and Flow
colly
88
5.1k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
240
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
450
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
880
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
270
Exploring anti-patterns in Rails
aemeredith
3
450
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Transcript
ZetaSQLを使って、 カラムリネージ機能を作った話 2023.6 primeNumber Inc. Naotaka Nakane(SWE)
©primeNumber Inc. 2 中根 直孝 (@gtnao) WHO AM I? 株式会社primeNumber
(2018/11~now) Lead Engineer Twitter:@gtnao GitHub:@gtnao0219 趣味: 音楽(ギター)、飲酒、サウナ、将棋 1 2
©primeNumber Inc. 3 データ分析基盤のための技術スタックを提供するサービス。 trocco®とは フルマネージド ETL/ELT 日本特有のサービスを含めた、約 100種のコネクタに対応 GUI
ワークフロー 複雑なデータ処理フローを GUI 上で設定・運用 データマネジメント機能 データリネージ / Git 連携・コード管理 / スキーマ追従 / データカ タログ etc.
©primeNumber Inc. 4 BigQueryなどのDWH上でクエリを実行して、 その結果を同じDWH上の別テーブルへInsertする機能。 上 データマート機能とは
©primeNumber Inc. 5 データマート機能で作ったテーブル同士の依存関係がカラム単位で可視化される機能。 カラムリネージ機能とは ※ リネージ(lineage)は、「血統」を意味する学術用語
©primeNumber Inc. 6 https://github.com/google/zetasql BigQueryやCloudSpannerのSQLのパースに使われているらしいOSS。 ZetaSQLとは
©primeNumber Inc. 7 SQLというただの文字列データを入力として、木構造のデータ構造を出力する。 その後のプログラムから扱いやすくなる。 SQLパーサーの役割 SQL AST(抽象構文木) Select ※
一部ノードを省略 SelectList FromClause Path Expression Path Expression Identifier (id) Identifier (users) TablePath Expression Identifier (users) Identifier (name)
©primeNumber Inc. 8 リネージの作り方① データマート設定(SQL)① 出力先:C データマート設定(SQL)② 出力先:D ※ AテーブルとBテーブルをJOINしてCテーブルを作成
※ CテーブルからさらにDテーブルを作成
©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
©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
©primeNumber Inc. 11 リネージの作り方④ リネージ
©primeNumber Inc. 12 • ZetaSQLはC++、Javaで利用可能。 • JavaのPublicなインターフェースでは実行プランの木構造だけしか出せない。 ◦ ※ 実行プランの木構造とは、ASTを元に生成されるクエリの実行計画の意味合
いなどを含んだ木構造を意味しています。 ◦ (例:あるテーブルをindexスキャンするか、sequentialスキャンするか) • やむを得ず、C++で進める。 ◦ 言語自体も難しいが、Bazelというビルドツールを使う必要がある。 ◦ Publicなリポジトリとはいえ、社内ツール感が否めず、ドキュメントはほとん ど存在しない。 • 野良GitHubリポジトリを漁る日々。 苦労したこと
©primeNumber Inc. 13 • BigQuery以外のDWHでは個別に実装が必要。 ◦ Snowflakeは2023年現在PublicなSQLパーサーを公開していないため対応できず。 ◦ RedshiftはPostgreSQLをベースとしているが、どこまでカバーできるか未検証。 •
最新のBigQueryのQuery syntaxに追従できない。 ◦ 一部Featureは明示的に対応しているがキリがない。 ◦ 課題
©primeNumber Inc. 14 • クエリをASTに変換できると、アイデア次第でできることが沢山ある。 ◦ ZetaSQLを使うと、BigQuery特有のQuery syntaxでもパース可能。 ◦ ただしキャッチアップが大変?
◦ サンドボックス環境を用意してみました。 ◦ https://github.com/gtnao0219/zetasql-docker-sandbox ▪ 初回ビルドが結構時間かかるのでご注意ください。 ▪ エディターの補完がDockerだとうまく行かずそこは間に合わず… 終わりに
Happy Data Engineering! ご清聴ありがとうございました。