Slide 1

Slide 1 text

© GENDA Inc. Streamlitを使ってデータカタログを作ってみた Data Engineer 山口 歩夢

Slide 2

Slide 2 text

© GENDA Inc. 自己紹介 名前 :山口歩夢 ブログ:https://qiita.com/Ayumu-y ■所属 株式会社GENDA データエンジニア ■経歴 営業職→データエンジニア ■趣味 ● 筋トレ ● 音楽

Slide 3

Slide 3 text

© GENDA Inc. 本日のお話 Streamlitでデータカタログを作成したことついてお話します!

Slide 4

Slide 4 text

© GENDA Inc. 作成までの経緯

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

© GENDA Inc. 作成までの経緯 StreamlitがイケてそうだからStreamlitで作ろう! ということになりました。

Slide 7

Slide 7 text

© GENDA Inc. 作成までの経緯 ■Streamlitで作るメリット ● 無料! ● DWHにSnowflakeを使用しているため SnowflakeのCOMMENTやコード内に設定を書くことになるので 最新バージョンがどこにあるかわかりやすい ● WEB開発の知識が無くても、 UIを簡単に作成することができる ● Streamlit in Snowflakeにて、簡単にアプリをデプロイすることもできる ● 今後、Streamlitで何か作るための知見も貯まる

Slide 8

Slide 8 text

© GENDA Inc. データカタログの詳細

Slide 9

Slide 9 text

© GENDA Inc. システム設計 ■設計内容 ● SnowflakeのCOMMENTにカラムやスキーマの概要を挿入 ● 社内VPNからのみ接続を許可してセキュリティ対策 ● ALBを使用してhttps化 ● EC2に作成したアプリをcloneしてデーモン化して $ streamlit run を実行

Slide 10

Slide 10 text

© GENDA Inc. システム設計 Streamlit in Snowflakeで動かせるようにしていきたい... (インフラがシンプルになる)

Slide 11

Slide 11 text

© GENDA Inc. システム設計 ■Streamlit in Snowflakeで動かすにあたって感じている課題 ● データカタログを使用する人全員に Snowflakeアカウントを作成する必要がある (一つのパスワードを使い回すのはセキュリティ的に良く無い ) ● 一度起動するとWHが15分間稼働し続けるので、 多くの人が起動し続けると、タイミングによってはずっと WHが動き続けてしまう(お金がかかる)

Slide 12

Slide 12 text

© GENDA Inc. システム設計 課題が解決できれば、将来的にEC2ではなく Streamlit in Snowflakeにて動かせるようにしていきたい!

Slide 13

Slide 13 text

© GENDA Inc. データカタログのUI ■確認できる内容 ● 指定したスキーマのテーブル一覧 ● テーブルのカラム情報 ● テーブル内のデータプレビュー

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

© GENDA Inc. データカタログの機能① ■実装方法 手順1. ドロップダウンで選択した Database・Schema・Tableを変数に入れる select_database = st.selectbox('データベースを選択してください ', [Database一覧(リスト型)]) select_schema = st.selectbox('スキーマを選択してください ', [Schema一覧(リスト型)]) select_table = st.selectbox('テーブルを選択してください ', [Table一覧(リスト型)]) 手順2. Pythonコード内でクエリを実行して結果を変数に入れる show_tables = run_query(f"SHOW TABLES IN {select_database}.{select_schema}") show_views = run_query(f"SHOW VIEWS IN {select_database}.{select_schema}") 手順3.データフレーム化して UNIONし、column_name・commentのみを抽出 show_tables_df = pd.DataFrame(show_tables) show_views_df = pd.DataFrame(show_views) tables_df = show_tables_df.rename(columns={1: 'column_name', 5: 'comment'}) views_df = show_views_df.rename(columns={1: 'column_name', 6: 'comment'})

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

© GENDA Inc. データカタログの機能② table_details_search = st.text_input('テーブル一覧の概要を検索 ') # サイドバーにてinputboxに文字列を入れた場合、その文字列が入っているデータをデータフレームから抽出できるように実装 if table_details_search is None: st.dataframe( tables_views_df, column_config={ "column_name": st.column_config.TextColumn("テーブル名"), "comment": st.column_config.TextColumn("概要", width="large") }, hide_index=True, ) else: tables_views_df = tables_views_df[tables_views_df['comment'].str.contains(table_details_search, case=False)] st.dataframe( tables_views_df, column_config={ "column_name": st.column_config.TextColumn("テーブル名"), "comment": st.column_config.TextColumn("概要", width="large") }, hide_index=True, ) ■実装方法ご紹介 手順1. テキストボックス入れた文字を変数に入れて保持する 手順2. 変数に入れた文字がテーブルの概要に含まれるデータをデータフレームとして出力するように実装

Slide 21

Slide 21 text

© GENDA Inc. 機能としては以上です! 現在は、まだ仮導入中ですが、評判は良好です。

Slide 22

Slide 22 text

© GENDA Inc. 今後の展望

Slide 23

Slide 23 text

© GENDA Inc. 今後の展望 ● まだ一つのプロダクトでのみの仮導入のため、 今後は様々なプロダクトの情報をデータカタログに格納して、 広い範囲でデータ活用に貢献していきたい ● データカタログの運用・管理を効率的にできるようにしていきたい ○ データの最新情報の管理方法 ○ データカタログの更新方法 など ● Streamlit in Snowflakeで動かせるようにしたい!

Slide 24

Slide 24 text

© GENDA Inc. サンプルコード

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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