æ°é±éåãYandexã§ãPythonã䜿çšããããã°ããŒã¿ã®åæã«ç¹åããPyDataäŒè°ãéå¬ãããŸããã ãã®äŒè°ãå«ããYandexåæéçºã°ã«ãŒãã®è²¬ä»»è
ã§ããVasily Agapitovã話ããŸããã 圌ã¯ãMapReduceã§èšç®ãèšè¿°ããŠå®è¡ãããããšããã°ããæ
å ±ãæœåºããããã®2ã€ã®ã©ã€ãã©ãªã«ã€ããŠè©±ããŸããã
ã«ããã®äž-ãã³ãŒããšã¹ã©ã€ãã®äžéšã
ç§ã®ååã¯Vasily Agapitovã§ããããŒã¿ãã€ãã³ã°ããŒã ã代衚ããŠããŸãã
Yandexã§ã¯ãããã°ããŒã¿ãç¹ã«MapReduceã¯ã©ã¹ã¿ãŒã«ããããŒã¿ã䜿çšããŠèšç®ãå®è¡ããŸãã ãããã¯äž»ã«ãµãŒãã¹ãšã¢ããªã±ãŒã·ã§ã³ã®å¿åãã°ã§ãã ããã«ãããã°ããŒã¿åŠçããŒã«ãä»ã®ããŒã ã«æäŸããŠããŸãã ç§ãã¡ã®äž»ãªæ¶è²»è
ã¯éçºã¢ããªã¹ãã®ããŒã ã§ãã ç°¡åã«ããããã«ãç§ã¯ããããã¢ããªã¹ããšåŒã³ãŸãã
2ã€ã®ããŒã«ãã©ã€ãã©ãªããããã®å€èŠ³ã®æŽå²ãããã³Hadoopã®äžçãå€èŠ³ã«ã©ã®ããã«åœ±é¿ãããã«ã€ããŠã話ããŸãã
çšèªã®ã¢ã€ãã¢ãåæãããŸãããã ããŒã¿ãœãŒã¹ã ãã°ã«ã€ããŠã®ã¿èª¬æããŸããããšãã°ãããçš®ã®ãµãŒãã¹ã¢ã¯ã»ã¹ãã°ãèŠãŠã¿ãŸãããã
ãã®ãã°ã«ã¯æ°Žå¹³ãšã³ããªããããåãšã³ããªã«ã¯ãã£ãŒã«ãããããŸããvhostã¯ãã¹ãèå¥åãyandexuidã¯èšªåè
èå¥åãiso_eventtimeã¯ãªã¯ãšã¹ãã®æ¥ä»ãšæå»ãrequestã¯ãªã¯ãšã¹ãèªäœããã³ãã®ä»ã®å€ãã®ãã£ãŒã«ãã§ãã
äžéšã®ãã£ãŒã«ãã®ããŒã¿ã¯ãã§ã«èšç®ã«äœ¿çšã§ããŸãã ä»ã®ãã£ãŒã«ããããããŒã¿ãæåã«æœåºããŠæ£èŠåããå¿
èŠããããŸãã ããšãã°ããªã¯ãšã¹ããã£ãŒã«ãã«ã¯ãªã¯ãšã¹ããã©ã¡ãŒã¿ãå«ãŸããŸãã åãµãŒãã¹ã«ã¯ç¬èªã®ãã©ã¡ãŒã¿ãŒããããŸãã æ€çŽ¢ã«æããã䜿çšããããã©ã¡ãŒã¿ãŒã¯ããã¹ããã©ã¡ãŒã¿ãŒã§ãã ãªã¯ãšã¹ããã£ãŒã«ããããããæœåºããåŸããããéåžžã«å€§ããããããäœããã®å¥åŠãªãšã³ã³ãŒãã£ã³ã°ãæã€å¯èœæ§ããããããæ£èŠåããå¿
èŠããããŸãã
次ã«ãMapReduceã¯ã©ã¹ã¿ãŒã§ã®èšç®ã®èŠ³ç¹ããèšç®ãæ€èšããŸãã ãåç¥ã®ããã«ãMapReduceã¯ãµã³ãã€ããäœæãã¯ãããžãŒã§ãã ããããããã¯ããã°ããŒã¿åŠçæè¡ã§ãã æ
£ããŠããªãå ŽåãçŸåšã®ã¬ããŒãã§ã¯ãMapãšReduceã®2ã€ã®æäœã䜿çšããããŒã¿åŠçãå«ãŸããŠããããšãç¥ã£ãŠããå¿
èŠããããŸãã
ã¢ããªã¹ãã®ã¿ã¹ã¯ã¯ãããžãã¹ããžãã¯ãèæ
®ããŠããã°ã®ã€ãã³ãã«é¢ããèšç®ãäœæããããšã§ãã ã©ã€ãã©ãªã䜿çšããã«MapReduceã¯ã©ã¹ã¿ãŒã§ã¿ã¹ã¯ã解決ããå Žåãã¢ããªã¹ãã¯ã©ã®ãããªå°é£ã«çŽé¢ããã§ããããïŒ ãŸããMapReduceã®æäœã«åºã¥ããŠããžãã¹ããžãã¯ãå®è£
ããå¿
èŠããããŸãã ãã®ã¢ãããŒãã¯ããã®èšç®ã®ããžãã¹ããžãã¯ã«é¢é£ããªãèšç®ã³ãŒãã«è¿œå ãããèªã¿ããããšãµããŒããèããæãªããŸãã 第äºã«ãæåã«ãã°ããããŒã¿ãæœåºããŠæ£èŠåããå¿
èŠããããŸã-ããšãã°ããªã¯ãšã¹ããã£ãŒã«ãããã®ããã¹ããã©ã¡ãŒã¿ã
æåã®åé¡ã解決ããã«ã¯ïŒ æããã«ãã¯ã©ã¹ã¿ãŒãžã®ãŠãŒã¶ãŒã¢ã¯ã»ã¹ãšã¯ã©ã¹ã¿ãŒãšã®å¯Ÿè©±ãç°¡çŽ åããäœããã®çš®é¡ã®ã©ã€ãã©ãªãå¿
èŠã§ãã
Hadoopã®äžçã§ã¯ããã®ãããªã©ã€ãã©ãªã«ã¯ãPigãHiveãCascadingãªã©ãå«ãŸããŸãã
Yandexã¯YTãšåŒã°ããMapReduceã®ç¬èªã®å®è£
ã䜿çšããŸãããã®å©ç¹ã¯ãHabréã®èšäºã§èªãããšãã§ããããŒã¿åŠçã®ããã®åºæ¬çãªMapReduceæäœãæäŸããŸãã ããããæ®å¿µãªãããYTã«ã¯Hadoopã®äžçã®ã©ã€ãã©ãªã®é¡äŒŒç©ããããŸããã§ããã ä¿®æ£ããå¿
èŠããããŸããã
æåã«ããã®åé¡ãçºçãããšãã«ãèšç®ããšã«ãããã¹ããŒãžãåå¥ã«èª¬æããã¹ããŒãžãåå¥ã«åæžããã¯ã©ã¹ã¿ãŒã§èšç®ãéå§ãããããã®ã¹ããŒãžéã®é¢ä¿ãåå¥ã«èª¬æããŸããã
ããã«ãããããã«ç¬èªã®ã©ã³ãã£ãŒããããŸããã ãã®ãããªåç©åãç¶æããããšã¯éåžžã«é«äŸ¡ã§ãã ç§ãã¡ã®è§£æ±ºçã¯ãã¯ã©ã¹ã¿ãŒã§èšç®ãèšè¿°ããŠå®è¡ããããã®ã©ã€ãã©ãªã§ãããã€ã«ã©ã€ãã©ãªã§ããã Pythonãäœæãããšããäž»ã«PythonãããŒã«ã«ããŒã¿åŠçã«åæã䜿çšãããããHadoopã®äžçããCascadingã®ã¢ã€ãã¢ãåãå
¥ããŠPythonèšèªã§å®è£
ããŸãããã¯ã©ã¹ã¿ãŒäžã®èšç®ãšããŒã«ã«ããŒã¿åŠçã«1ã€ã®èšèªã䜿çšãããšéåžžã«äŸ¿å©ã§ãã
Cascadingãç¥ã£ãŠããå ŽåãNileã§ããŒã¿ãåŠçããããã»ã¹ãããªãã¿ã®ããã«æããŸãã ã¯ã©ã¹ã¿ãŒäžã®ããŒãã«ããã¹ããªãŒã ãäœæãå€æŽãã°ã«ãŒãåãããšãã°ãããã€ãã®ã¢ã°ãªã²ãŒããæ€èšããã¹ããªãŒã ãè€æ°ã®ãããŒã«åå²ããè€æ°ã®ãããŒã1ã€ã®ã¹ããªãŒã ã«çµåããä»ã®ã¢ã¯ã·ã§ã³ãå®è¡ããåŸãçµæã®ã¹ããªãŒã ãå¿
èŠãªããŒã¿ãšãšãã«ããŒãã«ã«ä¿åããŸãã¯ã©ã¹ã¿ãŒã
ãã€ã«ã«ã¯ã©ã®ãããªã¹ããªãŒã å€æŽæäœããããŸããïŒ ãããã®å€ãããããŸããæã䜿çšããããã®ã¯ããã«æ瀺ãããŸãã å¿
èŠãªãã£ãŒã«ãã®ãªã¹ããååŸãããããžã§ã¯ãã å¿
èŠãªã¬ã³ãŒãã®ã¿ãæ®ããŠããã£ã«ã¿ãŒãããã£ã«ã¿ãŒãžã Groupby + Aggregateã䜿çšããŠãç¹å®ã®ãã£ãŒã«ãã»ããã§ã¹ããªãŒã ãã°ã«ãŒãåããããã€ãã®éèšãã«ãŠã³ãããŸãã äžæãã©ã³ãã ãããã³åºæã®ãã©ã³ãã ãããã³æå®ãããã¬ã³ãŒãçªå·ãäœæããŸãã æå®ããããã£ãŒã«ãã®ã»ãããçããããšã«ããã2ã€ã®ã¹ããªãŒã ãçµåããçµåã åå²ããŠãããã€ãã®ã«ãŒã«ã«åŸã£ãŠã¹ããªãŒã ãããã€ãã®ã¹ããªãŒã ã«åå²ãããããããããã«åå¥ã«åŠçããŸãã 䞊ã¹æ¿ããŠäžŠã¹æ¿ããŸãã ããŒãã«ãã¯ã©ã¹ã¿ãŒã«é
眮ããŸãã
Mapããã³Reduceæäœã䜿çšã§ããŸãããæ¬åœã«ã«ã¹ã¿ã ã§è€éãªæäœãè¡ãå¿
èŠãããå Žåã¯ã»ãšãã©å¿
èŠãããŸããã
ãã€ã«ã®åæåãèŠãŠã¿ãŸãããã 圌女ã¯ãšãŠãã·ã³ãã«ã§ãã ã€ã³ããŒãåŸãã¯ã©ã¹ã¿ãŒãšãžã§ãã®2ã€ã®ãªããžã§ã¯ããäœæããŸãã ã¯ã©ã¹ã¿ãŒã¯ãã©ã®ã¯ã©ã¹ã¿ãŒã§å®è¡ããããããã³ä»ã®äŸç€ºçãªç°å¢ã瀺ãããã«å¿
èŠã§ãã ãžã§ã-ã¹ããªãŒã ãå€æŽããããã»ã¹ã説æããŸãã
ã¹ããªãŒã ãäœæããæ¹æ³ã¯ïŒ ã¹ããªãŒã ã¯ãã¯ã©ã¹ã¿ãŒäžã®ããŒãã«ããããŸãã¯æ¢åã®ã¹ã¬ããããã®2ã€ã®æ¹æ³ã§äœæã§ããŸãã æåã®2ã€ã®äŸã¯ãã¯ã©ã¹ã¿ãŒäžã®ããŒãã«ããã¹ããªãŒã ãäœæããæ¹æ³ã瀺ããŠããŸãã ã¯ã©ã¹ã¿ãŒäžã®ããŒãã«ãžã®ãã¹ãåŒæ°ãšããŠæž¡ãããŸããã æåŸã®äŸã¯ã2ã€ã®æ¢åã®ã¹ããªãŒã ãããŒãžããŠã¹ããªãŒã ãäœæããæ¹æ³ã瀺ããŠããŸãã
ãã€ã«ã§ã®ã¿ã¹ã¯ã®å®è£
äŸãèŠãŠã¿ãŸãããã
ã¢ã¯ã»ã¹ãã°ã«ãããyandex.com.trãã¹ãã®èšªåè
æ°ãèšç®ããå¿
èŠããããŸãã ã¢ã¯ã»ã¹ãã°ã®æ§åãæãåºããŠãã ããã 衚瀺ãããå€ãã®ãã£ãŒã«ãã®ãã¡ãvhostãã£ãŒã«ãã¯ãyandex.com.trãã¹ãã«é¢é£ãããšã³ããªã®ã¿ããã£ã«ã¿ãªã³ã°ããŠæ®ããyandexuidã¯èšªåè
æ°ãèšç®ããŸãã
ãã®ã¿ã¹ã¯ã®Nileã³ãŒãèªäœã¯æ¬¡ã®åœ¢åŒã«ãªããŸãã
ããã§ãã¯ã©ã¹ã¿ãŒã®ããŒãã«ããã¹ããªãŒã ãäœæããvhostããã³yandexuidãã£ãŒã«ããååŸããŸãã vhostãã£ãŒã«ãã®å€ãyandex.com.trã«çããã¬ã³ãŒãã®ã¿ãæ®ããyandexuidãã£ãŒã«ãã®äžæã®å€ã®æ°ãèæ
®ããåŸãã¯ã©ã¹ã¿ãŒã®ããŒãã«ã«ã¹ããªãŒã ãä¿åããŸãã Job.runïŒïŒã¯èšç®ãéå§ããŸãã
ã¯ã©ã¹ã¿ãŒã§èšç®ãéå§ããåã«ãNiââleã¯èšç®ãäžé£ã®MapReduceæäœã«å€æããŸãã å·ŠåŽã¯ãã€ã«ã«é¢ããã¹ããªãŒã å€æã°ã©ããå³åŽã¯MapReduceæäœã«é¢ããã¹ããªãŒã å€æã°ã©ãã§ãã ããã«ãNileã¯èšç®ãèªåçã«æé©åããŸããã€ãŸããè€æ°ã®Mapæäœãé£ç¶ããŠããå ŽåãNileã¯ããããã¯ã©ã¹ã¿ãŒã§å®è¡ããã1ã€ã®Mapæäœã«æ¥çã§ããŸãã äœãèµ·ãã£ãã®ããããããŸãã ããã¯éåžžã«åçŽãªã¿ã¹ã¯ã§ããããã®ããã®ã³ãŒãã¯ããã°ã©ãã³ã°èšèªã§èŠãã®ãæ¯èŒçç°¡åã§ãã
ããè€éãªããšãèããããã«ãã¢ããªã¹ããçŽé¢ãã2çªç®ã®åé¡ãæãåºããŠã¿ãŸãããããã°ããã®ããŒã¿ãæœåºããæ£èŠåããå¿
èŠããããŸãã
ãã®åé¡ã解決ããããšã¯ã©ã®ããã«æ±ºå®ãããŸããïŒ éåžžã ETLã¯ãã®åé¡ã解決ããããã«äœ¿çšãããŸãã 誰ããããç¥ã£ãŠããŸããïŒ åœŒã¯çŽ30ããŒã»ã³ããç¥ã£ãŠããŸãã 誰ãç¥ããªããããããªãããå¿ããŠããŸã£ãïŒETLã¯çã®çããŒã¿ããããšä»®å®ãããããããå¿
èŠãªã¬ã³ãŒãããã£ãŒã«ããªã©ãæœåºããããžãã¹ããžãã¯ãèæ
®ããŠããããå€æŽãããªããžããªã«ããŒãããŸãã å°æ¥çã«ã¯ãã¹ãã¬ãŒãžããã®ããŒã¿ãã€ãŸãæ£èŠåãããããŒã¿ã«åºã¥ããŠãã¹ãŠã®èšç®ãå®è¡ããŸãã
å¥ã®ãã¹ãéžæããŸããã çããŒã¿ãä¿åããèšç®ãå®è¡ããŸããããŒã¿ãæœåºããŠæ£èŠåããããã»ã¹ã¯ãåèšç®ã§çºçããŸãã
ãªããã®æ¹æ³ãéžãã ã®ã§ããïŒ ãã£ãŒã«ãã®æœåºããã³æ£èŠåã®ããã»ã¹ã§å€éšã©ã€ãã©ãªã䜿çšããããã®ã©ã€ãã©ãªã«ãã°ããã£ããšããŸãã ãã°ãä¿®æ£ããåŸãéå»ã®èšç®ãåèšç®ããå¿
èŠããããŸãã ãã®ã¢ãããŒãã§ã¯ãéå»ã®èšç®ãå®è¡ããæ£ããçµæãååŸããã ãã§ãã ETLã®å Žå-ãã®ã©ã€ãã©ãªãããã»ã¹ã§äœ¿çšãããå Žå-æåã«ããŒã¿ãå床æœåºãããã®ã©ã€ãã©ãªã§åŠçãããªããžããªã«é
眮ããŠãããèšç®ãå®è¡ããå¿
èŠããããŸãã
çããŒã¿ãšæ£èŠåããŒã¿ã®äž¡æ¹ãä¿åã§ããå Žåã«é©ãããªãã·ã§ã³ã§ãã æ®å¿µãªããã倧éã®ããŒã¿ããããããããã¯äžå¯èœã§ãã
ãŸããèšç®ããšã«ãããŒã¿ã®æœåºãšæ£èŠåãåå¥ã«å®è¡ããŸããã 次ã«ãåããã°ã«å¯ŸããŠãã»ãŒåãæ¹æ³ã§åæ§ã®ãã£ãŒã«ããååŸããããšãå€ãããšã«æ°ä»ãããããã®ã«ãŒã«ã1ã€ã®QB2ã©ã€ãã©ãªã«çµåããŸããã ã«ãŒã«èªäœã¯ãšã¯ã¹ãã©ã¯ã¿ãŒãšåŒã°ãããã°ã«é¢ãããã®ãããªã«ãŒã«ã®ã»ããã¯è§£æãããããªãŒã§ããã
ãã®ãããQB2ã©ã€ãã©ãªã¯çãã°ãžã®æœè±¡ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããããªãŒã®è§£æã«ã€ããŠèªèããŠããŸãã
解æããªãŒãç解ããŸãããã ããã¯ãYandexã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®ãã°ã®è§£æããªãŒã§ãã ããèŠãªãã§ãã ãããããã¯ã°ããŒãã«ãããã§ãã
äžçªäžã¯ãã°ãšã³ããªã§ãã ä»ã®ãã¹ãŠã®è²ä»ãã®é·æ¹åœ¢ã¯ä»®æ³ãã£ãŒã«ãã§ãã æ¥ç¶ã¯æœåºæ©èœã§ãã ãããã£ãŠãQB2ã©ã€ãã©ãªãæããªããŠãŒã¶ãŒã¯ããã°ãã£ãŒã«ãã«ã®ã¿ã¢ã¯ã»ã¹ã§ããŸãã QB2ã©ã€ãã©ãªã䜿çšãããŠãŒã¶ãŒã¯ããã°ãã£ãŒã«ããšããã®ãã°ã«å¯ŸããŠQB2ã©ã€ãã©ãªãæäŸãããã£ãŒã«ãã®äž¡æ¹ã䜿çšã§ããŸãã
ãã®ã©ã€ãã©ãªã®å©ç¹ãå
·äœçãªäŸã§èŠãŠã¿ãŸãããã åé¡ãæ€èšããŠãã ããã 10321ã«çããAPI_keyãã£ãŒã«ãã®å€ã§èå¥ãããYandexã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ããããšããŸãããã£ãŒã«ããç¹ã«JSONãªããžã§ã¯ãã®åœ¢åŒã§èŸæžãå«ãevent_valueãã£ãŒã«ãã«ãã°ãæžã蟌ãããšãããããŸãã ãã®èŸæžã®ã¹ããŒãžããŒã®æå³ã«èå³ããããŸãã
ã€ãã³ãã®æ¥ä»ããšã«å解ããŠãåã¹ããŒãžã®èšªåè
æ°ãèšç®ããå¿
èŠããããŸãã QB2ã©ã€ãã©ãªã¯ããã«ã©ã®ãããªãã£ãŒã«ããæäŸããŸããïŒ ãŸããAPI_keyãã¢ããªã±ãŒã·ã§ã³èå¥åã 次ã«ãdevice_idããŠãŒã¶ãŒIDã æåŸã«ãã€ãã³ãã®æ¥ä»ã§ããevent_dateã¯ããã°ãšã³ããªããçŽæ¥ååŸãããã®ã§ã¯ãªããããªãå€æ°ã®å€æã«ãã£ãŠååŸãããŸãã QB2ã©ã€ãã©ãªã䜿çšããªããšããã®ãã£ãŒã«ããå¿
èŠãªåèšç®ã§æåå€æãå®è¡ããå¿
èŠããããŸãã åæããŸããããã¯äžäŸ¿ã§ãã
ããã«ãevent_valueãã£ãŒã«ããšã¹ããŒãžå€ãå¿
èŠã§ãã ãããã¯ããªãŒã§ã¯è§£æãããŸãããããã¯è«ççã§ãããªããªãããããã¯1ã€ã®ç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠã®ã¿æžãããŠããããã§ãã
ãšã¯ã¹ãã©ã¯ã¿ãŒã䜿çšããŠã解æããªãŒã次ã®ãã©ãŒã ã«è¿œå ããå¿
èŠããããŸãã ãã®ã¿ã¹ã¯ã®åæåã¯ã©ã®ããã«å€ãããŸããïŒ ããã«ããšã¯ã¹ãã©ã¯ã¿ãŒãšãã£ã«ã¿ãŒãã€ã³ããŒãããŸãã event_valueããã³ã¹ããŒãžå€ãååŸããã«ã¯ããšã¯ã¹ãã©ã¯ã¿ãŒãå¿
èŠã§ãã ãã£ã«ã¿ãŒ-ã¬ã³ãŒãããã£ã«ã¿ãŒããå¿
èŠãªãã®ã ããæ®ããŸãã
åã®äŸã§ã¯ãã€ã«ããã®ãã£ã«ã¿ãªã³ã°ã䜿çšããŠããŸãããããªããã®äŸã§ã¯QB2ã©ã€ãã©ãªããã®ãã£ã«ã¿ãªã³ã°ã䜿çšããã®ã§ããããïŒ QB2ã¯ãNileãšåæ§ã«ãèšç®ã®æé©åãè©Šã¿ãŸããã€ãŸãããã£ã«ã¿ãªã³ã°ã§äœ¿çšããããã£ãŒã«ãã®å€ãã§ããã ãæ©ãååŸããããšããŸãã ä»ã®ä»®æ³ãã£ãŒã«ãã®å€ãããæ©ãã
ãªããããè¡ãããã®ã§ããïŒ ã¬ã³ãŒãããã£ã«ã¿ãªã³ã°æ¡ä»¶ãééããªãå Žåãæ®ãã®ä»®æ³ãã£ãŒã«ãã®å€ãååŸããªãããã«ããŸãã ãããã£ãŠãã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ã倧å¹
ã«ç¯çŽããã¯ã©ã¹ã¿ãŒã§ã®èšç®ãé«éåããŸãã
èšç®ã³ãŒãèªäœã¯æ¬¡ã®åœ¢åŒã«ãªããŸãã ããã§ã¯ãã¯ã©ã¹ã¿ãŒã®ããŒãã«ããã¹ããªãŒã ãäœæããQB2æŒç®åã§ã¹ããªãŒã ãå€æŽããŸããããã¯ã解æããªãŒã®ååïŒãã®å Žåã¯ãã°ã®ååãšäžèŽãããã£ãŒã«ããšãã£ã«ã¿ãŒã®ã»ãããšäžèŽããŸãïŒã§åæåããŸãã
ãã£ãŒã«ãã«ã¯ãAPI_keyãdevice_idãevent_dateãã£ãŒã«ããååã§ãªã¹ãããŸããããã¯ãQB2ã©ã€ãã©ãªããããã®ãã£ãŒã«ããååŸããæ¹æ³ããã§ã«ç¥ã£ãŠããããã§ãã
event_valueãã£ãŒã«ããæœåºããã«ã¯ãæšæºã®json_log_fieldæœåºããã°ã©ã ã䜿çšããŸãã 圌ã¯äœãããŠããŸããïŒ æž¡ãããååã§ã察å¿ãããã°ãã£ãŒã«ãããå€ãåãåããJSONãªããžã§ã¯ããšããŠããŒãããŸãã ãã®ããŒããããå€ãevent_valueãã£ãŒã«ãã«ä¿åããŸãã
ã¹ããŒãžå€ãååŸããã«ã¯ãå¥ã®æšæºãšã¯ã¹ãã©ã¯ã¿ãŒdictItemã䜿çšããŸãã 圌ã«æž¡ãããããŒåãšãã£ãŒã«ãåã䜿çšããŠããã®ããŒã®ãã®ãã£ãŒã«ããã察å¿ããå€ãæœåºããŸãã
ãã£ã«ã¿ãªã³ã°ã«ã€ããŠã device_idãã£ãŒã«ãå€ãå®çŸ©ãããã¢ããªã±ãŒã·ã§ã³ã«é¢é£ããã¬ã³ãŒããã€ãŸãapi_keyãã£ãŒã«ãå€ã10321ã§ããã¬ã³ãŒãã«ã®ã¿é¢å¿ããããŸããQB2æŒç®åãé©çšããåŸãã¹ããªãŒã ã«ã¯æ¬¡ã®ãã£ãŒã«ãããããŸãïŒapi_keyãdevice_idãevent_dateãevent_valueãstageã
çµæã®ã¹ããªãŒã ã次ã®ããã«å€æŽããŸãã event_dateãã£ãŒã«ããšstageãã£ãŒã«ãã®ãã¢ã§ã°ã«ãŒãåããäžæã®device_idå€ã®æ°ãèšç®ããŸãã ãã®å€ãusersãã£ãŒã«ãã«å
¥ãããã®åŸãçµæã®ã¹ããªãŒã ãã¯ã©ã¹ã¿ãŒã«ä¿åããŸãã Job.runïŒïŒã¯èšç®ãéå§ããŸãã
èšç®ãå®äºãããšãã¯ã©ã¹ã¿ãŒã«ã¯æ¬¡ã®åœ¢åŒã®ããŒãã«ããããŸããevent_dateãã£ãŒã«ããšstageãã£ãŒã«ãã®åãã¢ã«ã€ããŠãäžæã®ãŠãŒã¶ãŒå€ã®æ°ã¯usersãã£ãŒã«ãã«ãããŸãã ãããã£ãŠãQB2ãšNileã©ã€ãã©ãªã®çµ±åã«ãããç§ãè¡šæããäž¡æ¹ã®åé¡ã解決ãããŸãã ãæž
èŽããããšãããããŸããã