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.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
560
ClaudeCodeにキレない技術
gtnao
1
1.8k
PaaSとSaaSの境目で信頼性と開発速度を両立する 〜TROCCO®︎のこれまでとこれから〜
gtnao
8
25k
0 -> 1でフロントエンドのテストを 書く文化を作っている話
gtnao
2
3k
Other Decks in Programming
See All in Programming
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
490
Deep dive into the select statement (GopherCon UK)
jespino
0
170
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
120
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
770
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
1.7k
Family mrubyの進捗
kishima
1
110
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
150
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
180
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
140
Featured
See All Featured
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
230
Design in an AI World
tapps
1
310
How GitHub (no longer) Works
holman
316
150k
Why Our Code Smells
bkeepers
PRO
340
58k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
380
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Building AI with AI
inesmontani
PRO
1
1.2k
Fireside Chat
paigeccino
43
4k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
480
Writing Fast Ruby
sferik
630
63k
[SF Ruby Conf 2025] Rails X
palkan
2
1.4k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
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! ご清聴ありがとうございました。