Slide 1

Slide 1 text

© GENDA Inc. StreamlitとTerraformでデータカタログを作った話 Data Engineer 山口 歩夢

Slide 2

Slide 2 text

© GENDA Inc. 自己紹介 【所属】 株式会社GENDA データエンジニア 【経歴】 営業職:4年 データエンジニア:3年 【発信】 ブログ:https://qiita.com/Ayumu-y X(旧Twitter):https://twitter.com/Yamaguchi_aaaaa 山口歩夢

Slide 3

Slide 3 text

© GENDA Inc. 本日のお話 StreamlitとTerraformを使って データカタログ作成~メタデータの管理を実現したお話

Slide 4

Slide 4 text

© GENDA Inc. まずはStreamlitでデータカタログを作成したお話

Slide 5

Slide 5 text

© GENDA Inc. 作成までの経緯

Slide 6

Slide 6 text

© GENDA Inc. 作成までの経緯 ■抱えていた悩み ● 社内にしっかり管理されたデータカタログが存在しなかった ● Excelファイルや口伝で情報が伝わっており、 どれが最新のものか分かりにくく、メンテナンスが行き届いていなかった ● カタログ型のソフトウェアは高額なため、こちらも参入障壁が高かった ● SQLを実行する時に、どのテーブルを使うべきか理解するのに苦労した

Slide 7

Slide 7 text

© GENDA Inc. 【機能】 ● 指定したスキーマのテーブル一覧 ● テーブルのカラム情報 ● テーブル内のデータプレビュー データカタログについて

Slide 8

Slide 8 text

© GENDA Inc. こちらでデータベース, スキーマ, テーブルを指定すると ■ドロップダウンでDatabase・Schema・Tableを選択 データカタログについて

Slide 9

Slide 9 text

© GENDA Inc. 指定したスキーマのテーブル一覧がこちらに表示されます ■ドロップダウンでDatabase・Schema・Tableを選択 データカタログについて

Slide 10

Slide 10 text

© GENDA Inc. 10 ■ドロップダウンでDatabase・Schema・Tableを選択 下部にここで指定したテーブルのカラムの情報やプレビューも表示されます データカタログについて

Slide 11

Slide 11 text

© GENDA Inc. ■テーブルの概要を検索 赤枠の部分に検索したい文字列を入力すると データカタログについて

Slide 12

Slide 12 text

© GENDA Inc. 指定したスキーマ内のテーブルの概要に検索をかけられます ■テーブルの概要を検索 データカタログについて

Slide 13

Slide 13 text

© GENDA Inc. 評判が良好なデータカタログができました!

Slide 14

Slide 14 text

© GENDA Inc. しかし、メタデータの管理に課題が残りました

Slide 15

Slide 15 text

© GENDA Inc. メタデータ管理の課題 ● とにかく手間がかかる ○ ALTER TABLEにCOMMENTを入れて毎回クエリを実行する必要があった ● データエンジニア以外の人が自由にメタデータを編集しづらい ○ スプレッドシートなどに変更したいメタデータを書いてもらい、 再度ALTER TABLEのクエリを実行する。といった流れになってしまう ● 更新メタデータの差分が分かりづらい

Slide 16

Slide 16 text

© GENDA Inc. そうだ Terraform 使おう

Slide 17

Slide 17 text

© GENDA Inc. どうしてTerraformでメタデータの管理を効率化できるのか

Slide 18

Slide 18 text

© GENDA Inc. Terraformでメタデータ管理を効率化できる理由 ● 弊社が既にデータ基盤を Terraformで管理している ● Terraformがyamlを読み込むことができる 1. yamlでメタデータの管理ができる 2. yamlで管理できるとエンジニア以外のデータカタログユーザーでも編集 &更新依頼ができる 3. 管理の効率が上がる ● GitHub Actionsで更新を自動化できる ○ yamlをGitHubに上げると自動更新される仕組みが作れる

Slide 19

Slide 19 text

© GENDA Inc. さっそく実装!!

Slide 20

Slide 20 text

© 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によるメタデータ管理

Slide 21

Slide 21 text

© 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ファイルをループ処理で読み込む

Slide 22

Slide 22 text

© 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が走る。

Slide 23

Slide 23 text

© 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が走ってメタデータが更新される。 以上で実装完了です!

Slide 24

Slide 24 text

© GENDA Inc. メタデータ管理の仕組みを作った結果

Slide 25

Slide 25 text

© GENDA Inc. 結果 データカタログの運用・管理が効率化できました! ● メタデータの最新情報を GitHubで管理を一元化できるようになった ● データカタログの更新方法が確立した ● データカタログユーザーからのメタデータ更新依頼が来ても、 スムーズに最新情報にアップデートできるようになった

Slide 26

Slide 26 text

© GENDA Inc. まとめ

Slide 27

Slide 27 text

© GENDA Inc. 今後の展望 ● まだ一部のデータのメタデータしか入っていないので、すべてのメタデータをこの機能に入れる ● メタデータ管理の課題を解決できたので、データカタログの機能をアップグレードしていきたい ○ 曖昧検索 ○ データリネージ  ○ もっと使いやすくてかっこいい UI など ● Streamlit in Snowflakeでデータカタログを動かしたい!

Slide 28

Slide 28 text

© GENDA Inc. サンプルコード GitHubでサンプルコードを公開しています! https://github.com/genda-tech/sample-data-catalog

Slide 29

Slide 29 text

© GENDA Inc. 採用情報 【株式会社GENDA 採用情報】 募集要項はこちら 【GENDA Creators Blog】 技術記事などはこちら GENDAでは一緒に働く仲間を募集しています! 採用情報やブログ記事などは、下記の 2次元コードからご確認ください! 【GENDA note】 社員インタビューはこちら

Slide 30

Slide 30 text

© GENDA Inc. ご清聴ありがとうございました!