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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
580
ClaudeCodeにキレない技術
gtnao
1
1.8k
PaaSとSaaSの境目で信頼性と開発速度を両立する 〜TROCCO®︎のこれまでとこれから〜
gtnao
8
25k
0 -> 1でフロントエンドのテストを 書く文化を作っている話
gtnao
2
3k
Other Decks in Programming
See All in Programming
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
450
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
7.5k
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.4k
Agents on Rails - Rails at Scale 2026
irinanazarova
0
340
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
110
Workers Cache を知る
syumai
0
340
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
920
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
540
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
350
Rでドレミ/Do-Re-Mi_with_R
florets1
0
120
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
350
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
460
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Designing for humans not robots
tammielis
254
26k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
Being A Developer After 40
akosma
91
590k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
540
GraphQLとの向き合い方2022年版
quramy
50
15k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
760
Optimizing for Happiness
mojombo
378
71k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
530
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
550
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! ご清聴ありがとうございました。