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.7k
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
420
Cortex_Searchを活用したメタデータ検索Chatbot開発.pdf
ayumu_yamaguchi
0
56
Streamlitの入門書を執筆した話
ayumu_yamaguchi
1
180
Streamlitで開発した自作データカタログの導入
ayumu_yamaguchi
4
860
Streamlitのデータカタログが社内にもたらした変化
ayumu_yamaguchi
1
1.6k
Streamlitを使ってデータカタログを作ってみた
ayumu_yamaguchi
1
560
Other Decks in Programming
See All in Programming
マイベストのシンプルなデータ基盤の話 - Googleスイートとのつき合い方 / mybest-simple-data-architecture-google-nized
snhryt
0
100
EMこそClaude Codeでコード調査しよう
shibayu36
0
480
NixOS + Kubernetesで構築する自宅サーバーのすべて
ichi_h3
0
1.3k
AIと人間の共創開発!OSSで試行錯誤した開発スタイル
mae616
2
830
Vue 3.6 時代のリアクティビティ最前線 〜Vapor/alien-signals の実践とパフォーマンス最適化〜
hiranuma
2
280
Cursorハンズオン実践!
eltociear
2
1.2k
PHPに関数型の魂を宿す〜PHP 8.5 で実現する堅牢なコードとは〜 #phpcon_hiroshima / phpcon-hiroshima-2025
shogogg
1
350
オープンソースソフトウェアへの解像度🔬
utam0k
17
3.2k
ALL CODE BASE ARE BELONG TO STUDY
uzulla
28
6.8k
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
210
ボトムアップの生成AI活用を推進する社内AIエージェント開発
aku11i
0
800
テーブル定義書の構造化抽出して、生成AIでDWH分析を試してみた / devio2025tokyo
kasacchiful
0
340
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Producing Creativity
orderedlist
PRO
348
40k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
A designer walks into a library…
pauljervisheath
209
24k
The Cult of Friendly URLs
andyhume
79
6.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.3k
Scaling GitHub
holman
463
140k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Faster Mobile Websites
deanohume
310
31k
Building an army of robots
kneath
306
46k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
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. ご清聴ありがとうございました!