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
3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
StreamlitとTerraformでデータカタログを作った話
Streamlitでデータカタログを自作し、Terraformでメタデータ管理をしたお話です。
Ayumu Yamaguchi
March 28, 2024
More Decks by Ayumu Yamaguchi
See All by Ayumu Yamaguchi
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
190
Streamlitで実現できるようになったこと、実現してくれたこと
ayumu_yamaguchi
2
800
Cortex_Searchを活用したメタデータ検索Chatbot開発.pdf
ayumu_yamaguchi
0
110
Streamlitの入門書を執筆した話
ayumu_yamaguchi
1
240
Streamlitで開発した自作データカタログの導入
ayumu_yamaguchi
4
1.1k
Streamlitのデータカタログが社内にもたらした変化
ayumu_yamaguchi
1
1.8k
Streamlitを使ってデータカタログを作ってみた
ayumu_yamaguchi
1
670
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
340
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
0
120
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
110
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
190
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
470
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
160
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
130
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
210
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
750
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
440
AIが無かった頃の素敵な出会いの話
codmoninc
1
300
5分で問診!Composer セキュリティ健康診断
codmoninc
0
730
Featured
See All Featured
How to Ace a Technical Interview
jacobian
281
24k
It's Worth the Effort
3n
188
29k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Being A Developer After 40
akosma
91
590k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
400
A better future with KSS
kneath
240
18k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
440
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
310
The Mindset for Success: Future Career Progression
greggifford
PRO
0
430
GraphQLとの向き合い方2022年版
quramy
50
15k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
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. ご清聴ありがとうございました!