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
1.9k
StreamlitとTerraformでデータカタログを作った話
Streamlitでデータカタログを自作し、Terraformでメタデータ管理をしたお話です。
Ayumu Yamaguchi
March 28, 2024
Tweet
Share
More Decks by Ayumu Yamaguchi
See All by Ayumu Yamaguchi
Streamlitの入門書を執筆した話
ayumu_yamaguchi
1
59
Streamlitで開発した自作データカタログの導入
ayumu_yamaguchi
4
650
Streamlitのデータカタログが社内にもたらした変化
ayumu_yamaguchi
1
1.3k
Streamlitを使ってデータカタログを作ってみた
ayumu_yamaguchi
1
440
Other Decks in Programming
See All in Programming
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
3
300
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
270
たのしいparse.y
ydah
3
120
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
開発者とQAの越境で自動テストが増える開発プロセスを実現する
92thunder
1
190
선언형 UI에서의 상태관리
l2hyunwoo
0
180
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
410
Beyond ORM
77web
7
960
モバイルアプリにおける自動テストの導入戦略
ostk0069
0
110
Exploring: Partial and Independent Composables
blackbracken
0
100
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
3
190
ChatGPT とつくる PHP で OS 実装
memory1994
PRO
2
110
Featured
See All Featured
The Invisible Side of Design
smashingmag
298
50k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Designing for Performance
lara
604
68k
Writing Fast Ruby
sferik
628
61k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
How GitHub (no longer) Works
holman
311
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Adopting Sorbet at Scale
ufuk
73
9.1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Mobile First: as difficult as doing things right
swwweet
222
9k
Raft: Consensus for Rubyists
vanstee
137
6.7k
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. ご清聴ありがとうございました!