カラムナフォーマットのきほん

 カラムナフォーマットのきほん

2017/05/18 BigData-JAWS 勉強会での発表資料です。
Explanation of Columnar format such as Parquet and ORC in japanese.

7f7abff13e7c5ad15bfa3a823313ef9d?s=128

Chie Hayashida

May 18, 2017
Tweet

Transcript

  1. ΧϥϜφϑΥʔϚοτͷ͖΄Μ !DIJF

  2. ໨࣍ •  ࣗݾ঺հ •  Ϗοάσʔλج൫ʹ͓͚ΔΧϥϜφϑΥʔϚοτ •  "QBDIF1BSRVFUͷ͖΄Μ –  ωετ͞Εͨσʔλʹదͨ͠σʔλϨΠΞ΢τ – 

    Ϧιʔεར༻ͷ࠷దԽ –  ૬ޓӡ༻ੑ •  03$ͱ1BSRVFUͷҧ͍ •  ·ͱΊ
  3. ࣗݾ঺հ $IJF)BZBTIJEB  !DIJF 3FUUZ*OD 4PGUXBSF&OHJOFFS%BUB4DJFOUJTU   "84ྺ͸೥΄Ͳɻ 4QBSL΍;FQQFMJOͳͲʹίϯτϦϏϡʔτɻ

      ػցֶश)BEPPQ4QBSL4DBMB1ZUIPO%#WJN ম೑ϐΞϊςχεεϊϘ  機械学習& 分析基盤構築やってます!
  4. ೔ຊ࠷େڃɺ໊࣮ܕάϧϝαʔϏε

  5. 3FUUZͷ෼ੳج൫ͷ঺հ

  6. ൃද಺༰ʹ͍ͭͯ •  Ϗοάσʔλج൫Ͱ͸ɺσʔλͷϑΥʔϚοτʹΧϥϜφ ϑΥʔϚοτΛ࢖͏ͱ͍͏ͷ͕Ұͭͷఆੴͱͳ͍ͬͯ·͢ɻ •  ຊൃදͰ͸ɺΧϥϜφϑΥʔϚοτͷಛ௃Λɺ1BSRVFUΛ ϕʔεʹղઆ͠·͢ɻ •  ͳͥΧϥϜφϑΥʔϚοτΛ࢖͏΂͖ͳͷ͔ɺͲͷΑ͏ʹ ࢖͏΂͖ͳͷ͔Λཧղͯ͠΋Β͑ͨΒΑ͍ͳɺͱࢥ͍·͢ɻ

    Amazon EMR Amazon Athena Amazon Redshi1
  7. Ϗοάσʔλج൫ʹ͓͚Δ ΧϥϜφϑΥʔϚοτ

  8. •  ςΩετϑΥʔϚοτ •  ߦࢦ޲ϑΥʔϚοτ •  ྻࢦ޲ʢΧϥϜφʣϑΥʔϚοτ Ϗοάσʔλج൫Ͱ࢖ΘΕΔϑΥʔϚοτ CSV { JSON

    } σʔλϕʔεʹΑ͘ ࢖ΘΕΔϑΥʔϚοτ
  9. •  ߦࢦ޲ϑΥʔϚοτ ߦࢦ޲ϑΥʔϚοτͱྻࢦ޲ϑΥʔϚοτ •  ྻࢦ޲ϑΥʔϚοτ colA colB colC 1 aaa

    2017-04-01 2 bbb 2017-04-02 3 ccc 2017-04-03 4 ddd 2017-04-04 5 eee 2017-04-05 colA colB colC 1 aaa 2017-04-01 2 bbb 2017-04-02 3 ccc 2017-04-03 4 aaa 2017-04-04 5 ccc 2017-04-05 行方向に連続してデータを保持 ・ 行単位でデータを操作することの多い OLTP処理に有利 列方向に連続してデータを保持 ・ 特定の列のみ取得する分析用途に有利 ・ 列のカーディナリティが低い場合、 圧縮率が高くなる σʔλ֨ೲ୯Ґ 一般的に分析用途のビッグデータ基盤はこっちが向いている
  10. •  03$ —  "QBDIF)JWFͷͨΊʹ࡞ΒΕͨϑΥʔϚοτ —  "QBDIFͷτοϓϓϩδΣΫτ —  )JWF1SFTUP4QBSLͳͲ͕αϙʔτ •  1BSRVFU

    —  5XJUUFS͕ࣾ։ൃɺ$MPVEFSB΋։ൃʹେ͖ؔ͘ΘΔ —  "QBDIFͷτοϓϓϩδΣΫτ —  4QBSL1SFTUP%SJMM*NQBSB)JWFͳͲ͕αϙʔτ ओཁͳ044ͷྻࢦ޲ϑΥʔϚοτ ࠓճ͸1BSRVFUΛϕʔεʹઆ໌͠·͢
  11. "QBDIF1BSRVFUͷ͖΄Μ

  12. 1BSRVFU •  ೥ʹ(PPHMF͕ൃදͨ͠%SFNFMͷ࿦จͷ SFDPSETISFEEJOHBOEBTTFNCMZBMHPSJUINͷ಺༰Λ ϕʔεʹ։ൃ͞Εͨ Ҿ༻ɿIUUQTTUBUJDHPPHMFVTFSDPOUFOUDPNNFEJBSFTFBSDIHPPHMFDPNKBQVCTBSDIJWFQEG

  13. •  ωετ͞Εͨσʔλʹదͨ͠σʔλϨΠΞ΢τ —  ඇϦϨʔγϣφϧͳσʔλΛ૝ఆ͢ΔͨΊɺԿઍ΋ͷϑΟʔϧυΛ࣋ͭ ૄͳωετ͞ΕͨσʔλΛޮ཰తʹѻ͏͜ͱͷͰ͖ΔετϨʔδܗࣜͱ ΞϧΰϦζϜΛఏڙ͢Δ •  Ϧιʔεར༻ͷ࠷దԽ —  ಡΈࠐΈॻ͖ࠐΈϥΠϒϥϦʹ͓͍ͯɺ*0࡟ݮ΍Τϯίʔυσίʔυ

    ࣌ͷ$16ར༻ͷޮ཰Խ౳ͷ޻෉͕͞Ε͍ͯΔ •  ૬ޓӡ༻ੑ —  ༷ʑͳΫΤϦΤϯδϯ΍σʔλϚωδϝϯτπʔϧʹରԠͰ͖Δ  σʔλϞσϧͷಛ௃
  14. ωετ͞Εͨσʔλʹదͨ͠ σʔλϨΠΞ΢τ

  15. ωετ͞Εͨσʔλͷ࣋ͪํ SFDPSEPSJFOUFE DPMVNOPSJFOUFE S S " # $ % &

    S S Ұ෦ΛಡΈग़ͨ͢Ίʹωετ͞Εͨ σʔλશͯΛಡΈग़͢ඞཁ͕͋Δ ඞཁͳσʔλʹͷΈΞΫηε͢Δ ͜ͱ͕Ͱ͖Δ
  16. ωετ͞Εͨσʔλͷ࣋ͪํ SFDPSEPSJFOUFE DPMVNOPSJFOUFE S S " # $ % &

    S S ωετ͞Εͨσʔλ͢΂ͯΛ ಡΈग़͢ඞཁ͕͋Δ ඞཁͳσʔλͷΈΛಡΈग़͢ ͜ͱ͕Ͱ͖Δ σʔλߏ଄ͷ৘ใΛอ࣋ͭͭ͠αϒηοτ͝ͱʹ σʔλΛอଘ͍ͨ͠
  17. %SFNFMͷσʔλϞσϧ ϑΟʔϧυ͝ͱʹɺ൓෮ϨϕϧͱఆٛϨϕϧΛ࣋ͭ͜ͱͰɺ σʔλߏ଄ͷ৘ใଛࣦͳ͠ʹσʔλΛอଘͰ͖Δ ˞൓෮ϨϕϧͱఆٛϨϕϧͷ಺༰͸ෳࡶͳͷͰ͜͜Ͱ͸આ໌Λলུ͠·͢ɻ ൓෮Ϩϕϧ ఆٛϨϕϧ Ҿ༻ɿIUUQTTUBUJDHPPHMFVTFSDPOUFOUDPNNFEJBSFTFBSDIHPPHMFDPNKBQVCTBSDIJWFQEG

  18. Ϧιʔεར༻ͷ࠷దԽ

  19. Ϧιʔεར༻ͷ࠷దԽํ๏ ̍ɽܕεϖγϑΟοΫͳΤϯίʔυํࣜ  ̎ɽ$16ύΠϓϥΠϯͷޮ཰Խ  ̏ɽσʔλϑΝΠϧͷϑΥʔϚοτ

  20. Ϧιʔεར༻ͷ࠷దԽํ๏ ̍ɽܕεϖγϑΟοΫͳΤϯίʔυํࣜ  ̎ɽ$16ύΠϓϥΠϯͷޮ཰Խ  ̏ɽσʔλϑΝΠϧͷϑΥʔϚοτ

  21. ܕεϖγϑΟοΫͳΤϯίʔυํࣜ •  1MBJO –  γϯϓϧʹ஋Λ࿈ଓͯ͠อଘ͢Δํ๏ •  %JDUJPOBSZ&ODPEJOH –  ࣙॻ৘ใΛ࡞੒ͯͦ͠ͷ৘ใΛ༻͍ͯΤϯίʔυ͢Δํ๏ – 

    ΧʔσΟφϦςΟ͕௿͍৔߹ʹ༗ޮ •  3VO-FOHUI&ODPEJOH –  ܁Γฦ͕͠ଓ͘஋Λޮ཰తʹอଘ͢Δํ๏ •  %FMUB&ODPEJOHT –  ιʔτ͞Εͨσʔλͷࠩ෼Λه࿥͢Δํ๏ –  5JNF4UBNQͳͲͷΠϯΫϦϝϯλϧͳσʔλͳͲ •  1SFpY&ODPEJOH –  %JDUJPOBSZ&ODPEJOH͕࢖͑ͳ͍ͱ͖ʹར༻͢Δ
  22. %JDUJPOBSZ&ODPEJOH *% 'SVJUT  "QQMF  0SBOHF  -FNPO 

    8BUFSNFMPO  .FMPO  #BOBOB "QQMF 0SBOHF 0SBOHF -FNPO "QQMF 8BUFS .FMPO .FMPO #BOBOB "QQMF .FMPO           &ODPEFE%BUB %JDUJPOBSZ
  23. 3VO-FOHUI&ODPEJOH B B B B B B C C C

    C B  C  &ODPEFE%BUB
  24. %FMUB&ODPEJOH 100 101 101 102 101 101 102 101 99

    100 105 107 114 116 119 120 121 101 101 102 101 101 102 101 99 100 105 107 114 116 119 120 121  CMPDL CMPDL SFGFSFODF 1 0 1 -1 0 1 -1 -2 1 5 2 7 2 3 1 1 ͭલͷ஋͔Βͷࠩ෼  3 2 3 1 2 3 1 0 0 4 1 6 1 2 0 0    NJO EFMUB NJO EFMUB 11 10 11 01 10 11 01 00 000 100 001 110 001 010 000 000      Ϗοτ਺ Ϗοτ਺ CJU CJU CJU  CJU CJU σʔλྔ͕ଟ͘ͳΔͱߋʹѹॖ཰͸্͕Δ
  25. Ϧιʔεར༻ͷ࠷దԽํ๏ ̍ɽܕεϖγϑΟοΫͳΤϯίʔυํࣜ  ̎ɽ$16ύΠϓϥΠϯͷޮ཰Խ  ̏ɽσʔλϑΝΠϧͷϑΥʔϚοτ

  26. $16ύΠϓϥΠϯ •  ܭࢉϦιʔεΛޮ཰తʹར༻Ͱ͖͍ͯΔঢ়ଶ •  ܭࢉϦιʔε͕ޮ཰తʹར༻Ͱ͖͍ͯͳ͍ঢ়ଶ  5JNF 5JNF 1*1&-*/& 1*1&-*/&

    #VCCMF
  27. 1BSRVFUʹ͓͚Δ$16ޮ཰Խ •  $16ύΠϓϥΠϯʹ͓͚Δ#VCCMFͷݪҼʹͳΓ΍͍͢ ෼ذ໋ྩʢJGจ౳ʣΛۃྗݮΒ͢ Ҿ༻ɿIUUQTXXXTMJEFTIBSFOFUDMPVEFSBIBEPPQTVNNJU SFGIUUQTQBSRVFUBQBDIFPSHQSFTFOUBUJPOT #JOBSZQBDLJOHͷྫ

  28. Ϧιʔεར༻ͷ࠷దԽํ๏ ̍ɽܕεϖγϑΟοΫͳΤϯίʔυํࣜ  ̎ɽ$16ύΠϓϥΠϯͷޮ཰Խ  ̏ɽσʔλϑΝΠϧͷϑΥʔϚοτ

  29. 1BSRVFUͷϑΝΠϧϑΥʔϚοτ ฒྻॲཧɿ'JMF3PX(SPVQ *0ɿ$PMVNO$IVOL &ODPEJOH$PNQSFTTJPOɿ1BHF ͷ୯ҐͰॲཧΛฒྻԽ͠΍͍͢σʔλ ഑ஔ Ҿ༻ɿIUUQTQBSRVFUBQBDIFPSHEPDVNFOUBUJPOMBUFTU

  30. 1BSRVFUͷσʔλϨΠΞ΢τ NFUBEBUBϖʔδ͝ͱɺྻ͝ͱɺߦ͝ͱɺσʔλશମͱ͍ͬͨ୯ҐͰɺ εΩʔϚ৘ใϨίʔυ਺֤ྻͷ࠷খ஋ɾ࠷େ஋ͱ͍ͬͨ౷ܭ৘ใΛ ࣋ͭ ϝλσʔλͷ৘ใʹΑΓɺෆඞཁͳσʔλ͸ಡΈඈ͹͕͠Մೳ Ҿ༻ɿIUUQTQBSRVFUBQBDIFPSHEPDVNFOUBUJPOMBUFTU

  31. ΦϓςΟϚΠβʹΑΔ࠷దԽ 4&-&$5DPM'30.NZUBCMFXIFSFDPM col1 col2 col3 a1 0 c1 a2 10

    c2 a3 10 c3 a4 30 c4 a5 50 c5 •  QSPKFDUJPOQVTIEPXO ඞཁͳྻͷΈΛऔΓग़͢   •  QSFEJDBUFQVTIEPXO ඞཁͳߦͷΈΛऔΓग़͢  col1 col2 col3 a1 0 c1 a2 10 c2 a3 10 c3 a4 30 c4 a5 50 c5
  32. 4QBSLʹ͓͚ΔΦϓςΟϚΠβʹΑΔ࠷దԽͷྫ Ҿ༻ɿIUUQTEBUBCSJDLTDPNCMPHTQBSLTRMHSBEVBUFTGSPNBMQIBJOTQBSLIUNM

  33. ૬ޓӡ༻ੑ

  34. 1BSRVFUϓϩδΣΫτ $ ʹΑΔ1BSRVFUϑΥʔϚοτͷ 3FBE8SJUFͷͨΊͷϥΠϒϥϦ 1BSRVFUͷσʔλϨΠΞ΢τͳͲͷ ఆٛͷϥΠϒϥϦ +BWBʹΑΔ1BSRVFUϑΥʔϚοτͷ 3FBE8SJUFͷͨΊͷϥΠϒϥϦ

  35. ଞϓϩμΫτͱͷ૬ޓӡ༻ੑ Ҿ༻ɿIUUQTXXXTMJEFTIBSFOFUDMPVEFSBIBEPPQTVNNJU SFGIUUQTQBSRVFUBQBDIFPSHQSFTFOUBUJPOT

  36. 03$WT1BSRVFU

  37. 03$WT1BSRVFU •  ΞʔΩςΫνϟͷҧ͍   03$͸ωετ͞ΕͨσʔλΛͦΕͧΕผͷྻͱͯ͠ѻ͏   03$͸ϒϧʔϜϑΟϧλͷػೳ͕͋Δ   1BSRVFUʹ͸4DIFNBNFSHJOHͷػೳ͕͋Δ 

    •  ϓϩμΫτ͝ͱʹɺ֤ϑΥʔϚοτ΁ͷରԠͷҧ͍ ʢϑΥʔϚοτ͸͋͘·Ͱ࠷దԽ͠΍͍͢σʔλܗࣜͰ͋ͬͯɺ࣮ࡍʹ ॲཧΛϓϩμΫτଆ͕ରԠ͍ͯ͠ͳ͍ͱҙຯ͕ͳ͍ʣ •  σʔλͷಛੑ΍ར༻͢ΔϓϩμΫτɺ࣮ߦ͢ΔΫΤϦͷύλʔϯʹΑͬͯɺ ࢖͍෼͚Δͷ͕େ੾ •  ৔߹ʹΑͬͯ͸03$΍1BSRVFUΑΓ΋4FRVFODF'JMFͳͲͷ΄͏͕ εϧʔϓοτ͕ྑ͍৔߹΋͋Δ •  Ұ൪͍͍ͷ͸ɺݕূͰεϧʔϓοτ΍σʔλαΠζΛ֬ೝ͢Δ͜ͱ
  38. ·ͱΊ •  ෼ੳ༻్ͷϏοάσʔλج൫ʹ͸ɺҰൠతʹΧϥϜφ ϑΥʔϚοτ͕ద͍ͯ͠Δ •  1BSRVFU͸ωετ͞Εͨσʔλ΁ͷରԠɺϦιʔεར༻ ͷ࠷దԽɺ૬ޓӡ༻ੑʹؔͯ͠޻෉͞Ε͍ͯΔ •  ϑΥʔϚοτ͸σʔλͷಛੑ΍ར༻͢ΔϓϩμΫτɺ࣮ ߦ͢ΔΫΤϦͷ಺༰ʹΑͬͯ࢖͍෼͚Δ

  39. 8F"SF)JSJOHʂ ؾܰʹΦϑΟεʹ༡ͼʹདྷ͍ͯͩ͘͞ʂ ͋ͱ3FUUZ͔͍ͭͬͯͩ͘͞ʂ

  40. ࢀߟࢿྉ •  %SFNFM࿦จ –  IUUQTTUBUJDHPPHMFVTFSDPOUFOUDPNNFEJBSFTFBSDIHPPHMFDPNKBQVCT BSDIJWFQEG  •  "QBDIF1BSRVFUυΩϡϝϯτ – 

    IUUQTQBSRVFUBQBDIFPSH •  (JU)VC –  IUUQTHJUIVCDPN1BSRVFU –  IUUQTHJUIVCDPNBQBDIFPSD  •  "QBDIF03$υΩϡϝϯτ –  IUUQTPSDBQBDIFPSH •  &GpDJFOU%BUB4UPSBHFGPS"OBMZUJDTXJUI"QBDIF1BSRVFU –  IUUQTXXXTMJEFTIBSFOFUDMPVEFSBIBEPPQTVNNJU SFGIUUQT QBSRVFUBQBDIFPSHQSFTFOUBUJPOT •  +*3" –  IUUQTJTTVFTBQBDIFPSHKJSBJTTVFT