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
StreamlitとTerraformでデータカタログを作った話
Search
Ayumu Yamaguchi
March 28, 2024
Programming
1
2.5k
StreamlitとTerraformでデータカタログを作った話
Streamlitでデータカタログを自作し、Terraformでメタデータ管理をしたお話です。
Ayumu Yamaguchi
March 28, 2024
Tweet
Share
More Decks by Ayumu Yamaguchi
See All by Ayumu Yamaguchi
Streamlitで実現できるようになったこと、実現してくれたこと
ayumu_yamaguchi
2
270
Cortex_Searchを活用したメタデータ検索Chatbot開発.pdf
ayumu_yamaguchi
0
47
Streamlitの入門書を執筆した話
ayumu_yamaguchi
1
150
Streamlitで開発した自作データカタログの導入
ayumu_yamaguchi
4
830
Streamlitのデータカタログが社内にもたらした変化
ayumu_yamaguchi
1
1.5k
Streamlitを使ってデータカタログを作ってみた
ayumu_yamaguchi
1
530
Other Decks in Programming
See All in Programming
TypeScriptでDXを上げろ! Hono編
yusukebe
4
920
CLI ツールを Go ライブラリ として再実装する理由 / Why reimplement a CLI tool as a Go library
ktr_0731
3
940
リッチエディターを安全に開発・運用するために
unachang113
1
350
バイブコーディングの正体——AIエージェントはソフトウェア開発を変えるか?
stakaya
5
700
なぜ今、Terraformの本を書いたのか? - 著者陣に聞く!『Terraformではじめる実践IaC』登壇資料
fufuhu
3
380
GitHub Copilotの全体像と活用のヒント AI駆動開発の最初の一歩
74th
5
1.3k
MCPで実現できる、Webサービス利用体験について
syumai
7
2.3k
「次に何を学べばいいか分からない」あなたへ──若手エンジニアのための学習地図
panda_program
3
710
それ CLI フレームワークがなくてもできるよ / Building CLI Tools Without Frameworks
orgachem
PRO
17
3.6k
Comparing decimals in Swift Testing
417_72ki
0
160
あまり知られていない MCP 仕様たち / MCP specifications that aren’t widely known
ktr_0731
0
220
中級グラフィックス入門~効率的なメッシュレット描画~
projectasura
4
2.4k
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1031
460k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Designing for Performance
lara
610
69k
The Cult of Friendly URLs
andyhume
79
6.5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
740
The Pragmatic Product Professional
lauravandoore
36
6.8k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.4k
Making Projects Easy
brettharned
117
6.3k
Typedesign – Prime Four
hannesfritz
42
2.7k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.5k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Transcript
© GENDA Inc. StreamlitとTerraformでデータカタログを作った話 Data Engineer 山口 歩夢
© GENDA Inc. 自己紹介 【所属】 株式会社GENDA データエンジニア 【経歴】 営業職:4年 データエンジニア:3年
【発信】 ブログ:https://qiita.com/Ayumu-y X(旧Twitter):https://twitter.com/Yamaguchi_aaaaa 山口歩夢
© GENDA Inc. 本日のお話 StreamlitとTerraformを使って データカタログ作成~メタデータの管理を実現したお話
© GENDA Inc. まずはStreamlitでデータカタログを作成したお話
© GENDA Inc. 作成までの経緯
© GENDA Inc. 作成までの経緯 ▪抱えていた悩み • 社内にしっかり管理されたデータカタログが存在しなかった • Excelファイルや口伝で情報が伝わっており、 どれが最新のものか分かりにくく、メンテナンスが行き届いていなかった
• カタログ型のソフトウェアは高額なため、こちらも参入障壁が高かった • SQLを実行する時に、どのテーブルを使うべきか理解するのに苦労した
© GENDA Inc. 【機能】 • 指定したスキーマのテーブル一覧 • テーブルのカラム情報 • テーブル内のデータプレビュー
データカタログについて
© GENDA Inc. こちらでデータベース, スキーマ, テーブルを指定すると ▪ドロップダウンでDatabase・Schema・Tableを選択 データカタログについて
© GENDA Inc. 指定したスキーマのテーブル一覧がこちらに表示されます ▪ドロップダウンでDatabase・Schema・Tableを選択 データカタログについて
© GENDA Inc. 10 ▪ドロップダウンでDatabase・Schema・Tableを選択 下部にここで指定したテーブルのカラムの情報やプレビューも表示されます データカタログについて
© GENDA Inc. ▪テーブルの概要を検索 赤枠の部分に検索したい文字列を入力すると データカタログについて
© GENDA Inc. 指定したスキーマ内のテーブルの概要に検索をかけられます ▪テーブルの概要を検索 データカタログについて
© GENDA Inc. 評判が良好なデータカタログができました!
© GENDA Inc. しかし、メタデータの管理に課題が残りました
© GENDA Inc. メタデータ管理の課題 • とにかく手間がかかる ◦ ALTER TABLEにCOMMENTを入れて毎回クエリを実行する必要があった •
データエンジニア以外の人が自由にメタデータを編集しづらい ◦ スプレッドシートなどに変更したいメタデータを書いてもらい、 再度ALTER TABLEのクエリを実行する。といった流れになってしまう • 更新メタデータの差分が分かりづらい
© GENDA Inc. そうだ Terraform 使おう
© GENDA Inc. どうしてTerraformでメタデータの管理を効率化できるのか
© GENDA Inc. Terraformでメタデータ管理を効率化できる理由 • 弊社が既にデータ基盤を Terraformで管理している • Terraformがyamlを読み込むことができる 1.
yamlでメタデータの管理ができる 2. yamlで管理できるとエンジニア以外のデータカタログユーザーでも編集 &更新依頼ができる 3. 管理の効率が上がる • GitHub Actionsで更新を自動化できる ◦ yamlをGitHubに上げると自動更新される仕組みが作れる
© GENDA Inc. さっそく実装!!
© GENDA Inc. 【実装方法】 • 以下のようなディレクトリ構成で Terraformのmoduleを用意する • tablesディレクトリ内のyamlにはテーブル毎のメタデータを記述する •
tables.tfからtablesディレクトリ内のyamlファイルを、ループ処理で一括で読み込めるようにする ◦ yamlファイルに変更があったテーブルのみ、 terraform apply でメタデータの更新処理が走る • terraform apply はGitHub Actionsで、Pull Requestがマージされた時に実行されるようにする modules/[database名]/ ├─[schema名]/ │ ├─tables.tf # yamlをループ処理で読み込む │ └─tables/ # テーブル毎にyamlを作成 │ ├─[テーブル名1].yaml │ ├─[テーブル名2].yaml │ └─[テーブル名3].yaml └─schema.tf Terraformによるメタデータ管理
© GENDA Inc. Terraformによるメタデータ管理 locals { table_files = fileset("${path.module}/tables", "*.yaml")
tables = { for file in local.table_files : replace(file, ".yaml", "") => yamldecode(file("${path.module}/tables/${file}")) } } resource "snowflake_table" "tables" { for_each = local.tables database = "DEV_YAMAGUCHI" schema = "TEST" name = each.value.name comment = each.value.comment dynamic "column" { for_each = each.value.columns content { name = column.value.name type = column.value.type comment = column.value.comment nullable = column.value.nullable } } } 【tables.tf】 tablesディレクトリ内のyamlファイルをループ処理で読み込む
© GENDA Inc. name: workflow for Terraform Data Definition #
mainブランチにPRがマージされた時 or mainブランチに直接pushされた時に実行 # yamlファイルを変更したときに実行される。 on: push: branches: - main paths: - 'terraform/modules/snowflake_resource/DATA_CATALOG_LT/tables/*.yaml' permissions: id-token: write contents: read env: TF_VERSION: 1.5.6 AWS_REGION: ${{ secrets.AWS_REGION }} AWS_IAM_ROLE_ARN: ${{ secrets.AWS_IAM_ROLE_ARN }} # Snowflakeの認証情報 SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} SNOWFLAKE_REGION: ${{ secrets.SNOWFLAKE_REGION }} SNOWFLAKE_USER: ${{ secrets.SNOWFLAKE_USER }} SNOWFLAKE_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }} jobs: main: name: main runs-on: ubuntu-latest strategy: matrix: workdir: [terraform/tfroot] # backendをS3に設定している場合は、AWSの認証情報が必要 steps: - uses: actions/checkout@v3 - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1-node16 with: role-to-assume: ${{ env.AWS_IAM_ROLE_ARN }} aws-region: ${{ env.AWS_REGION }} - name: terraform setup uses: hashicorp/setup-terraform@v2 with: terraform_version: ${{ env.TF_VERSION }} - name: init working-directory: ${{ matrix.workdir }} run: terraform init - name: Terraform plan -target="module.snowflake_resource_lt" working-directory: ${{ matrix.workdir }} run: terraform plan -no-color -target="module.snowflake_resource_lt - name: Terraform apply -target="module.snowflake_resource_lt" working-directory: ${{ matrix.workdir }} run: terraform apply -auto-approve -no-color Terraformによるメタデータ管理 【workflow.yaml (GitHub Actions)】 paths:で該当のyamlのメタデータが更新された場合のみ、 merge時にterraform applyが走る。
© GENDA Inc. name: "EMPLOYEES" comment: "従業員マスター " change_tracking: false
columns: - name: "EMPLOYEE_ID" type: "NUMBER(38,0)" comment: "従業員ID。このテーブルの主キー。 " nullable: false - name: "FIRST_NAME" type: "VARCHAR(50)" comment: "名前。" nullable: true - name: "LAST_NAME" type: "VARCHAR(50)" comment: "苗字。" nullable: true - name: "SALARY" type: "NUMBER(10,2)" comment: "給与。ドル単位で格納。 " nullable: true - name: "HIRE_DATE" type: "DATE" comment: "雇用した日。日本時間にて格納。 " nullable: true Terraformによるメタデータ管理 【tables/[テーブル名].yaml】 右図の例のように、 table毎にyamlでメタデータを記載しておく。 このyamlをGitHubにpushしてmainにmergeすれば、 GitHub Actionsが走ってメタデータが更新される。 以上で実装完了です!
© GENDA Inc. メタデータ管理の仕組みを作った結果
© GENDA Inc. 結果 データカタログの運用・管理が効率化できました! • メタデータの最新情報を GitHubで管理を一元化できるようになった • データカタログの更新方法が確立した
• データカタログユーザーからのメタデータ更新依頼が来ても、 スムーズに最新情報にアップデートできるようになった
© GENDA Inc. まとめ
© GENDA Inc. 今後の展望 • まだ一部のデータのメタデータしか入っていないので、すべてのメタデータをこの機能に入れる • メタデータ管理の課題を解決できたので、データカタログの機能をアップグレードしていきたい ◦ 曖昧検索
◦ データリネージ ◦ もっと使いやすくてかっこいい UI など • Streamlit in Snowflakeでデータカタログを動かしたい!
© GENDA Inc. サンプルコード GitHubでサンプルコードを公開しています! https://github.com/genda-tech/sample-data-catalog
© GENDA Inc. 採用情報 【株式会社GENDA 採用情報】 募集要項はこちら 【GENDA Creators Blog】
技術記事などはこちら GENDAでは一緒に働く仲間を募集しています! 採用情報やブログ記事などは、下記の 2次元コードからご確認ください! 【GENDA note】 社員インタビューはこちら
© GENDA Inc. ご清聴ありがとうございました!