Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ZetaSQLを使って、 カラムリネージ機能を作った話
Search
gtnao
June 05, 2023
Programming
2.3k
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
590
ClaudeCodeにキレない技術
gtnao
1
1.8k
PaaSとSaaSの境目で信頼性と開発速度を両立する 〜TROCCO®︎のこれまでとこれから〜
gtnao
8
25k
0 -> 1でフロントエンドのテストを 書く文化を作っている話
gtnao
2
3k
Other Decks in Programming
See All in Programming
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
840
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5k
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
270
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
130
wkhtmltopdfの次どうするか問題2026
willnet
2
1.9k
ジョジョの世界をXRで再現する
mofurune
0
140
AWSに止められる覚悟してますか?
morizo_1984
2
520
すこし踏み込む CancellationToken
htkym
2
1.6k
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
260
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
320
contenteditable と日本語入力に向き合う
colorful12
0
170
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
450
Featured
See All Featured
Building the Perfect Custom Keyboard
takai
2
900
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
300
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
Code Reviewing Like a Champion
maltzj
529
40k
Amusing Abliteration
ianozsvald
1
330
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
Leo the Paperboy
mayatellez
10
2.4k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
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! ご清聴ありがとうございました。