データ基盤のメタデータを継続的に管理できる仕組みを作る(ペパボ編) / pepabohatena

データ基盤のメタデータを継続的に管理できる仕組みを作る(ペパボ編) / pepabohatena

ペパボ・はてな技術大会〜@オンライン
https://pepabo.connpass.com/event/174331/

69b93af68320a590f607c296e8edff73?s=128

Ken’ichiro Oyama

May 14, 2020
Tweet

Transcript

  1. খࢁ݈Ұ࿠(.01FQBCP *OD ϖύϘɾ͸ͯͳٕज़େձʙ!ΦϯϥΠϯ σʔλج൫ͷϝλσʔλΛ ܧଓతʹ؅ཧͰ͖Δ࢓૊ΈΛ࡞Δ ʢϖύϘฤʣ

  2. ϓϦϯγύϧΤϯδχΞ খࢁ݈Ұ࿠!L-P8 ϗεςΟϯάࣄۀ෦ϗεςΟϯάάϧʔϓϚωʔδυΫϥ΢υνʔϜ IUUQTHJUIVCDPNL-P8 

  3. 

  4. None
  5. ຊ୊ 

  6. IUUQTEFWFMPQFSIBUFOBTUB⒎DPNFOUSZ 

  7. ຊൃදʹ͓͚Δ lσʔλج൫ͷϝλσʔλzͱ͸ 

  8. σʔλ෼ੳΛਖ਼֬ʹߦͳ͏ͨΊʹ͸ɺσʔλࣗ਎ʹؔ͢Δ஌ࣝ ϝλσʔλ ͕ ඞཁͰ͢ɻ ʢதུʣ ͜͏͍ͬͨϝλσʔλ͸Ͳ͜ʹ͋ΔͰ͠ΐ͏͔ɻ ΞϓϦέʔγϣϯͷίʔυɺ(JU)VC্ͷJTTVFͰͷ΍ΓऔΓɺXJLJͳͲͷΩʔ ϫʔυϖʔδɺ༷ʑͩͱࢥ͍·͢ɻΞϓϦέʔγϣϯΤϯδχΞͰ͋Ε͹ɺඞཁ ʹԠͯ͡ίʔυͳͲΛࢀর͠ɺྺ࢙Λඥղ͘͜ͱͰϝλσʔλΛखʹ͢Δ͜ͱ͕ Ͱ͖ΔͰ͠ΐ͏ɻ

    JETZPV ʮσʔλج൫ͷϝλσʔλΛܧଓతʹ؅ཧͰ͖Δ࢓૊ΈΛ࡞ΔʯΑΓ 
  9. w ͜ͷςʔϒϧΧϥϜ͸ԿͷͨΊͷςʔϒϧͳͷ͔ w ࣅͨΑ͏ͳΧϥϜͱͷҧ͍ w ूܭ৚݅ͷҧ͍ɺͳͲ w σʔλ͕ͲͷΑ͏ͳ஋ΛऔΓಘΔ͔ w 4&-&$5DPMVNO

    $06/5 '30.NZ@UBCMF(3061#:DPMVNOͰςʔϒϧத ʹग़ͯ͘Δ஋ΛྻڍͰ͖Δ͕ɺͨ·ͨ··ͩग़͍ͯͳ͍஋͕͋Δ͔΋͠Εͳ͍ w σʔλ͚ͩݟͯ$"4&Ͱ෼ذ͍ͯ͠Δͱߟྀ࿙Ε͕ى͜Δ w 99೥::݄Ҏલ͸ඞͣ/6--ʹͳ͍ͬͯΔ ϝλσʔλʢσʔλϕʔεͷ৔߹ʣ ʮσʔλج൫ͷϝλσʔλΛܧଓతʹ؅ཧͰ͖Δ࢓૊ΈΛ࡞ΔʯΑΓ 
  10. ຊൃදʹ͓͚Δ༻ޠ w ϝλσʔλʜσʔλࣗ਎ʹؔ͢Δ஌ࣝɻ w ྫ͑͹σʔλιʔεʹͳ͍ͬͯΔσʔλϕʔε΍ςʔϒϧɺΧϥϜͳͲͷઆ໌ͳ Ͳɻ#JH2VFSZʹ͓͍ͯ͸σʔληοτςʔϒϧΧϥϜͷ%FTDSJQUJPOɺλάʹ ϝλσʔλ͕ه࿥͞ΕΔɻ w σʔλΧλϩάʜσʔλج൫ͷϝλσʔλΛࢀরɾ؅ཧͰ͖Δج൫ɻ#JH2VFSZ͕อ ࣋͑͠ͳ͍ϝλσʔλΛ࣋ͭ৔߹΋͋Δɻ

    
  11. #JHGPPU 

  12. #JHGPPU w ߦಈϩά׆༻ج൫ͱͯ͠஀ੜ w ౰ॳ͔Βࠃ಺࠷େڃϋϯυϝΠυϚʔέοτNJOOFΛࢧ͑Δϩάج൫ͱͯ͠׆༻͞ Ε͍ͯͨ w ͦͷ׆༻ൣғΛ޿͛ͨ݁Ռɺzߦಈϩάzج൫͔ΒΑΓଟ༷ͳσʔλ͕ू໿͞ΕΔ σʔλج൫ʹਐԽ͍ͯ͠ΔʢݱࡏਐߦܗͰ֦ு͍͍ͯͬͯ͠Δʣ w

    ʢݱࡏ͸ʣόοΫΤϯυͷσʔλ΢ΣΞϋ΢εͱͯ͠#JH2VFSZΛར༻ 
  13. #JHGPPU 

  14. #JHGPPUʢ#JH2VFSZʣʹू໿͞ΕΔσʔλྫ w ߦಈϩά w σʔλϕʔεͷσʔλʢશͯɺҰ෦ɺՃ޻ʣ w ΧελϚʔαʔϏεج൫ͷϩά w αʔόϩά w

    αʔόϝτϦΫε w (JU)VC*TTVFT ू໿͞ΕΔσʔλͷछྨ͸ଟذʹΘͨΓɺ͜Ε͔Β΋૿͑Δ 
  15. 

  16. σʔλΧλϩάʹٻΊΔཁ݅ 

  17. σʔλΧλϩάʹٻΊΔཁ݅  ϝλσʔλͷߋ৽͸ɺΤϯδχΞҎ֎Ͱ΋Ͱ͖ΔΑ͏ʹͳ͍ͬͯΔ͜ͱ w ϝλσʔλͷߋ৽ͷෑډΛͰ͖ΔݶΓԼ͛Δ͜ͱͰϝλσʔλΛॆ࣮ͤ͞Δ  ಈతʹมԽ͠͏ΔσʔληοτςʔϒϧΧϥϜʹରԠͰ͖Δ͜ͱ w ऩू͞ΕΔσʔλ΋छྨ΋૿ݮ͕͋Δɻͦͷঢ়ଶͷมԽʹ௥ैͰ͖Δ͜ͱ 

    ϝλσʔλͷೋॏ؅ཧΛආ͚ΒΕΔΑ͏ͳ࢓૊ΈΛ࣋ͯΔ͜ͱ w ಉ͡Α͏ͳ%%-ͳΒϝλσʔλΛڞ௨ԽͰ͖ΔΑ͏ʹ w σʔλιʔε͕3%#ͳΒʢςʔϒϧΧϥϜίϝϯτ͕ϝλσʔλʣɺ3%#͔Β ϝλσʔλΛऔಘͰ͖ΔΑ͏ʹ 
  18. σʔλΧλϩάʹٻΊΔཁ݅ʢղܾʣ  ϝλσʔλͷߋ৽͸ɺΤϯδχΞҎ֎Ͱ΋Ͱ͖ΔΑ͏ʹͳ͍ͬͯΔ͜ͱ ˠ :".-ʹΑΔϝλσʔλͷఆٛͱߋ৽ऀϑϨϯυϦͳ1VMM3FRVFTUϕʔεͷϝ λσʔλߋ৽ػߏ  ಈతʹมԽ͠͏ΔσʔληοτςʔϒϧΧϥϜʹରԠͰ͖Δ͜ͱ ˠ ఆظతͳσʔληοτҰཡͷऔಘͱಈతͳσʔλΧλϩάੜ੒ػߏ

     ϝλσʔλͷೋॏ؅ཧΛආ͚ΒΕΔΑ͏ͳ࢓૊ΈΛ࣋ͯΔ͜ͱ ˠ ϨΠϠʔػߏΛ࣋ͭઐ༻ͷϚʔδػߏ 
  19. #JHGPPU 

  20. 

  21. UCMT w $*ϑϨϯυϦͳσʔλϕʔευΩϡϝϯτੜ੒πʔϧ w IUUQTHJUIVCDPNL-P8UCMT w $*ϑϨϯυϦϫϯόΠφϦ w 1PTUHSF42- .Z42-ͳͲͷ3%#.4͚ͩͰͳ͘ɺ#JH2VFSZ΍"NB[PO

    %ZOBNP%# $MPVE4QBOOFSͱ͍ͬͨσʔλιʔεʹ΋ରԠ wυΩϡϝϯτΛॆ࣮ͤ͞Δػೳͱͯ͠Ծ૝తͳϝλσʔλΛఆٛ͢Δ͜ͱ͕Մೳ w ςʔϒϧɺΧϥϜͳͲͷίϝϯτ෇༩͚ͩͰͳ͘λάɺϦϨʔγϣϯͳͲ w UCMTͷ਺͋ΔػೳͷதͰσʔλΧλϩάΛ࡞Δ্Ͱத৺ͱͳΔػೳ 
  22. Ծ૝తͳϝλσʔλ w σʔλιʔεͷ৘ใ͔ΒυΩϡϝϯτΛੜ੒͢Δͷ͕UCMTͷجຊͷػೳʢUCMTEPDʣ w͞ΒʹUCMTZNMʹهࡌ͞Εͨίϝϯτ΍ϦϨʔγϣϯΛϚʔδͯ͠υΩϡϝϯτԽͰ ͖Δ w "-5&35"#-&ͳͲΛ͢Δඞཁͳ͘υΩϡϝϯτΛߋ৽Ͱ͖Δ w σʔλιʔεଆ͕ίϝϯτ΍',ͷػೳΛ͍࣋ͬͯͳͯ͘΋υΩϡϝϯτͰ͸දݱͰ ͖ΔʢʹԾ૝తʣ

    
  23. :".-ʹΑΔϝλσʔλͷఆٛͱ ߋ৽ऀϑϨϯυϦͳ 1VMM3FRVFTUϕʔεͷϝλσʔλߋ৽ػߏ 

  24. ߋ৽ऀϑϨϯυϦͳ1VMM3FRVFTUϕʔεͷϝλσʔλߋ৽ػߏ w ʮ:".-ʹΑΔϝλσʔλͷఆٛʯ͸UCMTͷجຊػೳ w ʮ1VMM3FRVFTUϕʔεʯ΋$*ͰUCMTEPDͰग़ྗͨ͠υΩϡϝϯτΛίϛοτ͢Ε͹ ͍͍ w ʮߋ৽ऀϑϨϯυϦʯʮ:".-ͷߋ৽Λ೗ԿʹΘ͔Γ΍͘͢͢Δ͔ʯ  ϚχϡΞϧͷॆ࣮

     ʮҙਤͨ͠ߋ৽͕͞ΕΔ͔ʯΛΘ͔Γ΍ࣔ͘͢͢  ʮ:".-ͷهड़ϛεͳͲͷΤϥʔʯΛΘ͔Γ΍ࣔ͘͢͢ 
  25. $*ͷ݁ՌΛΘ͔Γ΍͘͢1VMM3FRVFTUʹίϝϯτͰొ࿥͢Δ w UCMTEJ⒎ͰɺʮݩͷυΩϡϝϯτʯͱʮੜ੒͞ΕΔυΩϡϝϯτʯͷࠩ෼ΛEJ⒎දࣔ ͕Ͱ͖Δ w UCMTMJOUͰɺϝλσʔλ͕ࢦఆͷϧʔϧʹԊ͍ͬͯΔ͔Ͳ͏͔ΛνΣοΫͰ͖Δ w ʮλά͕#JH2VFSZͷλάϑΥʔϚοτʹ४ڌ͍ͯ͠Δ͔Ͳ͏͔ʯͳͲ w UCMTEJ⒎΍UCMTMJOUͷ݁ՌΛ$*؀ڥ͔Βऔಘͯ͠1VMM3FRVFTUʹΘ͔Γ΍͘͢ίϝϯ

    τͰొ࿥͢Δ w :".-ͷγϯλοΫεΤϥʔͳͲΘ͔Γʹ͍͘Τϥʔ͸ʮΤϥʔͷಡΈํʯ΋ί ϝϯτͰొ࿥͢Δ 
  26. HIQVU w (JU)VCʹ͍ΖΜͳ΋ͷΛ165ʢొ࿥ʣͰ͖Δπʔϧ w IUUQTHJUIVCDPNL-P8HIQVU w 3BLFλεΫ಺Ͱ&3#Λۦ࢖ͯ͠ίϝϯτจষΛ࡞੒ɻHIQVUͰ1VMM3FRVFTUʹί ϝϯτΛొ࿥ʢPO$*ʣ 

  27. ఆظతͳσʔληοτҰཡͷऔಘͱ ಈతͳσʔλΧλϩάੜ੒ 

  28. ఆظతͳσʔληοτҰཡͷऔಘͱಈతͳσʔλΧλϩάੜ੒ w UCMT͸ෳ਺ͷσʔλιʔεͷυΩϡϝϯτੜ੒͸૝ఆ͍ͯ͠ͳ͍ w #JH2VFSZʹ͋ΔσʔληοτҰཡ͕ඞཁ w Ұཡ͔Β֤σʔληοτͷUCMTZNMΛੜ੒Ͱ͖Ε͹͍͍ w LVSBHFNΛ࢖ͬͯ#JH2VFSZ͔ΒσʔληοτҰཡΛऔಘ͢Δ3BLFλεΫͱͯ͠ هड़

    
  29.  # kura.gem # https://github.com/nagachika/kura/ # Fukuoka.rbͷओ࠵ͷҰਓͰ΋͋Δid:nagachika͞Μ࡞੒ͷBigQuery APIϥούʔ ˌҎԼͷίʔυ͚ͩͰೝূ͔ΒσʔληοτҰཡऔಘ·ͰͰ͖Δ require

    'kura' client = Kura.client('/path/to/client_secrets.json') client.datasets(project_id: 'xxxxxxx').each do |dataset| puts dataset.id end
  30. ఆظతͳσʔληοτҰཡͷऔಘͱಈతͳσʔλΧλϩάੜ੒ w ͜ͷ࣌఺Ͱ͸ϝλσʔλ͸#JH2VFSZυΩϡϝϯτͷҰํ௨ߦ w ߋ৽ͨ͠ϝλσʔλͷ৘ใΛ#JH2VFSZʹ൓өͤ͞Δඞཁ͕͋Δ 

  31. 

  32. UCMTNFUB w UCMT͕อ࣋͢ΔϝλσʔλΛɺσʔλιʔεʹϑΟʔυόοΫͯ͠ߋ৽͢Δ֎෦αϒ ίϚϯυ w IUUQTHJUIVCDPNL-P8UCMTNFUB w $*ͷσʔληοτҰཡऔಘͷ࣍ͷεςοϓʹ૊ΈࠐΜͰఆظ࣮ߦ ֎෦αϒίϚϯυʜHJUHTVCΛHJUHTVCͰ࣮ߦͰ͖ΔΑ͏ʹͳΔΞϨ 

  33. ϨΠϠʔػߏΛ࣋ͭઐ༻ͷϚʔδػߏ 

  34. ཁ݅࠶ܝ wʮϝλσʔλͷೋॏ؅ཧΛආ͚ΒΕΔΑ͏ͳ࢓૊ΈΛ࣋ͯΔ͜ͱʯ w ಉ͡Α͏ͳ%%-ͳΒϝλσʔλΛڞ௨ԽͰ͖ΔΑ͏ʹ ˠ ಉ͡σʔλιʔεͷςʔϒϧΛαʔϏε͝ͱʹ෼ׂ͍ͯ͠Δ৔߹ͳͲ w σʔλιʔε͕3%#ͳΒʢςʔϒϧΧϥϜίϝϯτ͕ݩϝλσʔλʣɺ3%#͔ ΒϝλσʔλΛऔಘͰ͖ΔΑ͏ʹ ˠ

    σʔλج൫ͱ͸ผʹ3%#͸3%#ͰͦΕΛར༻͍ͯ͠ΔΞϓϦέʔγϣϯͷ։ ൃνʔϜͰ؅ཧӡ༻͍ͯ͠Δ w͔͠͠ɺUCMT͕ઃఆͱͯ͠ಡΈࠐΉUCMTZNM͸ͭͷ:".-ϑΝΠϧͰɺ%4-Λ΋ͬ ͍ͯΔΘ͚Ͱ͸ͳ͍ 
  35. 

  36. UCMTCVJME w UCMTZNMʹଞͷઃఆͷαϒηοτ:".-ϑΝΠϧ΍ɺσʔλιʔε͔Βੜ੒ͨ͠ TDIFNBKTPOΛɺϨΠϠʔߏ଄Λҙࣝͨ͠ܗͰϚʔδͰ͖Δ֎෦αϒίϚϯυ w IUUQTHJUIVCDPNL-P8UCMTCVJME w ϕʔεͷUCMTZNMʹରͯ͠ɺσϑΥϧτ஋ͳͲ͸Լ૚ʹʢŠVOEFSMBZʣɺڧ੍తʹ ্ॻ͖Λ͍ͨ͠஋͸ϕʔεʹର্ͯ͠૚ʹʢŠPWFSMBZʣ഑ஔͯ͠Ϛʔδ͢Δ w

    LVTUPNJ[FʹӨڹΛड͚ͨπʔϧ 
  37. #JHGPPUʢ࠶ܝʣ 

  38. ·ͱΊͱࠓޙͷల๬ 

  39. ·ͱΊͱࠓޙͷల๬ w σʔλج൫ͷϝλσʔλΛܧଓతʹ؅ཧͰ͖Δ࢓૊ΈΛ࡞ͬͨ w ͨͩɺॏཁͳͷ͸ʮϝλσʔλͷߋ৽͕ܧଓతʹ࣮ࢪ͞ΕΔ͜ͱʯͰɺͦͷ఺ʹؔ ͯ͠͸·ͩԿ΋Ͱ͖͍ͯͳ͍ͷͰ֤ॴʹڠྗΛ΋Β͍ͳ͕ΒਐΊ͍͖͍ͯͨ w ݱࡏ͸#JHGPPU #JH2VFSZ ͕த৺ͱͳ͍ͬͯΔ͕ɺྫ͑͹ϖύϘ͕อ࣋͢Δશͯͷ

    σʔλιʔεͷσʔλΧλϩάΛ࡞Γ͍ͨͱߏ૝͍ͯ͠Δ w ࠓճ঺հͨ͠πʔϧνΣΠϯΛ࢖͑͹ɺ֤σʔλιʔεʹରͯ͠UCMTPVUUKTPO Ͱग़ྗͨ͠TDIFNBKTPOΛHIQVUͰͭͷϦϙδτϦʹίϛοτ͢Δ͚ͩͰ৘ใΛ ू໿Ͱ͖ΔɹͳͲ w ͜ͷλεΫΛ೚ͤͯ͘ΕͨJEVE[VSBʹײँ͠·͢ʂ 
  40. 5IBOLZPV ࠷৽ͷ࠾༻৘ใΛνΣοΫˠ !QC@SFDSVJU