🙌

SDFを触ってみる(Introduction編)

こんにちは!がく@ちゅらデータエンジニアです。
※結構前に書いて下書きにしていたのを放出します・・・

https://stable.co.jp/blog/dbt-osmosis-vs-sdf

先日(もうだいぶ前になるのですが・・・)、stableの三角さん(myshmeh)がすごくすごく素敵な記事を書いてらっしゃいました。

そこでSDFはすごいぞ!!とあったので、実際に触ってみよう!触ってみないとわからないよね!
ってことで、myshmehさんの記事を参考にSDFを触っていこうと思いました。

https://docs.sdf.com/introduction/welcome

導入

Welcome to SDF

SDFとは?

SDFは、Semantic Data Fabric。
SDFの紹介

背景としては

  • 2022年4名で設立
    • ルーカス・シュルテ
    • ウォルフラム・シュルテ(MSやMetaでDWインフラに携わる)
    • マイケル・レビン
    • エリアス・デフォリア
  • 2024年6月にステルスモードを脱する
  • 2025年1月にdbt Labsによって買収される

そもそも、SDFを開発したモチベーションとしては

私たちは、Microsoft と Meta でこれを個人的に経験し、Azure BigData 製品、Microsoft の One Engineering の取り組み、およびデータ エンジニアリングのための Meta の Unified Programming Model ( UPM )の設計者として、この問題の解決に取り組んできました。

かつ

この課題を大規模に解決するには、ウェアハウス全体の深いセマンティック理解が必要であることがわかりました。

がきっかけだったようです。

また、
「『拡張性(Scalable)が高く、信頼性(Reliable)が高く、最適化(Optimaized)されたデータウェアハウス』を作るうえで、最も速い手段」と謳っています。

特徴としては

  • 静的分析を活用してウェアハウス規模でSQLコードを包括的に検査するコンパイラ&ビルドシステム
  • いろんなSQLの方言(dialect)に対応している
  • データ間の依存関係のグラフを構築できる→データ全体像が把握できる
  • transformation framework : 変換フレームワーク(?)
  • analytical database engine:分析データベースエンジン

SnowflakeなどのSQL dialect(dialect = SQLの方言、データベースごとに異なるSQLの実装がある。データベースベンダー毎にすごい方言(dialect)がある。
(日付型のファンクションではほんとと痛い目にあった)

(私信)
SDFは、dbtと同じ領域(Data Modeling/Transformation)を狙っていたのプロダクトだと思います。ローカルでの静的解析とか依存関係(dbtだとosmosisなどでやってる)のを構造的に把握できるので、文字列一致などではなく、意味的にテーブル/カラム間の関係を把握できる、すごく素敵なエンジンを開発していたと。
dbtとの競合を狙っていたのかなぁ・・・とも思いますが、すごくすごくdbtを強化できるプロダクトだったので、買収したのかなって思いましたね。

なぜSDFなのか?

(Google翻訳にかけてたら、SDF=自衛隊 と訳してて、たいへん吹き出した笑)

SQLを深く理解することがとても重要
(深く理解するとは、SQLの構造的なつながりを解析して、より正確に利用できる)

  • リアルタイムの影響分析により、本番環境への破壊的な変更が入り込んでしまうことを防止
  • 迅速なエラー報告と分離された環境(本番環境と開発環境みたいな)により開発スピードを向上
  • カラムレベルのリネージ(データの流れ)を取得して、データウェアハウス(データ分析基盤)全体の透明性を確保
  • インテリジェントなメタデータと標準ガードレールを通じて、ビジネスロジックをコードに統合
  • インプロセスの分析データベースでオンプレミスのデータウェアハウスを強化

※後ろの2つがよく分からなかった・・・・

SDFのインストール

https://github.com/sdf-labs/sdf-cli

Welcome SDFのページにはなかったが、こちらのGithubにインストール手順があった

curl -LSfs https://cdn.sdf.com/releases/download/install.sh | sh -s

※homebrewでのInstallはまだできなさそう(※2025年4月現在)

Getting Started

https://docs.sdf.com/introduction/getting-started

Creating a Workspace(ワークスペースの作成)

※ SDF_WORK_DIRは適当に作業ディレクトリを作ってください、自分は「$HOME/work/sdf」につくりました。

$ cd $SDF_WORK_DIR
$ sdf new --sample hello && cd hello

$ tree
$ cat models/main.sql
select 'Hello World!' as message
$ cat workspace.sdf.yml                                                    2025/02/06 12:52:17
workspace:
  name: hello
  edition: "1.3"
  description: "A minimal workspace"

  includes:
    - path: models

ワークスペースについては、

https://docs.sdf.com/guide/setup/workspaces
簡単に要約

  • ワークスペースとは
    • データウェアハウス内でデータ変換・品質管理・ガバナンスを定義するディレクトリ。
    • SQLファイル、設定ファイル、その他のデータ処理用ファイルで構成
  • ワークスペースの構成
    • workspace.sdf.yml : ワークスペースの設定ファイルで、SDFプロジェクトのビルド・デプロイに必須
    • SQL Dialect : SDFは複数のSQL Dialectをサポートし、異なるSQL間でもデータの系統(リネージュ)を維持可能
      • (え!?すごい!?)

YAMLについてのリファレンスは
https://docs.sdf.com/reference/sdf-yml
簡単に概要

  • Blockは、Workspace、Table、Classifiler、Function、Credential、Environment
  • Emumとして、IncludeType、IndexMethod、Diarect、CasingPolicy、PreproessorType, Metarialization・・・とかいっぱい!
    • Nestもするみたい

(このあたりはすごくdbtだなぁ)

Exploring Your Project (プロジェクトの探索)

sdf compile をつかって静的解析

まずは、SDFのコアコマント「sdf compile」を実行

$ sdf compile --show all

※ classifierについては後述

ちなみに、上のコマンドを実行すると sdftarget/ というディレクトリができていた

gitとかで管理するなら、sdftargetは、ignoreの対象にしたほうがいいかも
dbtのtarget/に相当するディレクトリっぽい。

新しいモデルを作成する

models/main2.sqlってファイルを作成

SELECT * FROM main;

sdf lineage でリネージュ

sdf lineage main2 --column message

これで特定のカラム「message」のリネージュを取得する

sdf runによる実行

SDFをデータベースとして、クエリを実行してみる。実行マシン上でSDFのランライムで実行される。

機能マトリックス

2025年2月現在の対応状況

Databaseサポート

Authenticationサポート

Orchestration サポート

Platforms

Open Source

  • SDFは、Apache DataFusionを搭載している。ローカル実行などは、Apache DataFusionによって実現されている。

SDFについてのブログ

つぎ

ちゅらデータ株式会社

Discussion