Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
データ基盤を作るのに使うようなサービスは単発で使うだけでも便利 / Manage to loo...
Search
polamjag
January 23, 2019
Programming
210
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
データ基盤を作るのに使うようなサービスは単発で使うだけでも便利 / Manage to look over unmanaged data with fully managed services
ref.
http://developer.hatenastaff.com/entry/2019/01/11/110000
polamjag
January 23, 2019
More Decks by polamjag
See All by polamjag
転ばぬ先のXS入門 / YAPC::Fukuoka 2025
polamjag
0
560
障害対応を起点としたもっといい開発と運用のサイクル作りのためにできること / Hatena Enginner Seminar #29
polamjag
0
1.1k
GitHub Linguistと学ぶ!全国このコードはPerlとRakuどっちでしょうクイズ選手権大会 in YAPC::Hiroshima 2024 #yapcjapan
polamjag
0
890
はてなブログとチーム構成とスクラムのこの1年 #dmm_hatena
polamjag
0
3.4k
Google I/O で見た Android Q 以外の話 / #io19 recap
polamjag
0
180
Other Decks in Programming
See All in Programming
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
210
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
330
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
140
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
150
共通化で考えるべきは、実装より公開する型だった
codeegg
0
250
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
190
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
3
1.5k
symfony/aiとlaravel/boost
77web
0
130
Performance Engineering for Everyone
elenatanasoiu
0
270
フィードバックで育てるAI開発
kotaminato
1
120
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
210
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
360
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.5k
What's in a price? How to price your products and services
michaelherold
247
13k
Why Our Code Smells
bkeepers
PRO
340
58k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
A better future with KSS
kneath
240
18k
Raft: Consensus for Rubyists
vanstee
141
7.6k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
45k
Music & Morning Musume
bryan
47
7.3k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Accessibility Awareness
sabderemane
1
160
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
Bash Introduction
62gerente
615
220k
Transcript
σʔλج൫Λ࡞Δͷʹ͏Α͏ͳαʔϏε ୯ൃͰ͏͚ͩͰศར άϩʔεϋοΫͷจ຺Λఴ͑ͯ Hatena Engineer Seminar #11 2019-01-23 @ Tokyo
/ 2019-01-30 @ Kyoto id:polamjag
whoami • id:polamjag ϙ ϥ Ϝ δ ϟ ά •
ͯͳϒϩά • ΞϓϦέʔγϣϯΤϯδχΞ
ࠓ͢͜ͱ • େ౷Ұσʔλج൫ͷΑ͏ͳଘࡏ͕ແ͍ঢ়ଶͰɺ σʔλج൫Λ࡞Δͷʹ͏Α͏ͳαʔϏε ΞυϗοΫͳੳʹ୯ൃͰ͑Δ͚ͩͰศར • Google BigQuery ͱ Amazon
Athena Ͱ ·ͣઌͷ͔Βղܾ
ࠓ͞ͳ͍͜ͱ • ͍͢͝σʔλج൫Λθϩ͔Β࡞͍ͬͯ͘ํ๏ • ͍͢͝σʔλج൫Λ׆༻͢Δํ๏ • ࣮ࡍͷࢪࡦͦͷͷʹ͍ͭͯ • ࣈͷݟํɺଊ͑ํ
άϩʔεϋοΫ https://trends.google.com/trends/explore?date=all&geo=JP&q=άϩʔεϋοΫ
ͱ͍͑ࣈ
(ผʹάϩʔεϋοΫʹݶΒͣ) ͪΐͬͱ͜͏͍͏ࣈΛ ݟͯΈ͍ͨΜ͚ͩͲɺͱ͍͏ͱ͖
(ผʹάϩʔεϋοΫʹݶΒͣ) ͪΐͬͱ͜͏͍͏ࣈΛ ݟͯΈ͍ͨΜ͚ͩͲɺͱ͍͏ͱ͖ αʔϏεͷσʔλϕʔε͔Βूܭ ϩάϑΝΠϧ܈͔Βूܭ
αʔϏεͷσʔλϕʔε͔Βूܭ ϩάϑΝΠϧ܈͔Βूܭ (ͯͳϒϩά MySQL ͳͷͰͦΕΛલఏʹ)
• SQL Λී௨ʹୟ͘ • ॻࣺͯεΫϦϓτΛॻ͍ͯूܭͨ͠ͷΛεϓϨο υγʔτʹΞοϓϩʔυ • ͦ͏͍͏ͷΛόονͱͯ͠ఆظ࣮ߦ͢Δ • ……
• SQL Λී௨ʹୟ͘ • ෳͷσʔλϕʔεʹ·͕ͨͬͯूܭ͍ͨ͠? • SELECT COUNT(*) ʹ͔͔࣌ؒΔΑ͏ͳςʔϒϧͰͱʹ͔͘ू ܭ͍ͨ͠?
• ूܭΫΤϦΛߴԽ͢ΔͨΊʹՃͰ index ཉ͍͚͠Ͳ ͱΓ͋͑ͣݟͯΈ͍ͨϨϕϧͷूܭͷͨΊʹ ALTER TABLE Ͱ͖Δ? • ྺ࢙తܦҢͰγϦΞϥΠζ͞Εͨσʔλ͕ೖͬͯΔΧϥϜ͕͋Δ ͷΛΫΤϦ͍ͨ͠?
• SQL Λී௨ʹୟ͘ • ୟ͍ͨ݁Ռͷڞ༗ՄࢹԽͱ͔Ͳ͏͢Δ? • ॻࣺͯεΫϦϓτΛॻ͍ͯूܭͨ͠ͷΛεϓϨου γʔτʹΞοϓϩʔυ • ͦ͏͍͏ͷΛόονͱͯ͠ఆظ࣮ߦ͢Δ
• ͦͷεϓϨουγʔτ୭͕ϝϯςφϯε͢Δ? • …………
!!! BigQuery !!! • ͏·͍͍͍҆ۜͷؙ • సૹʹ Embulk Λ͍ɺ DSL
ͷதͰσʔλΛ͔ͯ͠Β όϧΫϩʔσΟϯά͢Δ • ඞཁͳσʔλશ෦ूΊ͖ͯͨΒવ JOIN ͳͲͰ͖Δ • σʔλྔ͕͍ͨͨ͜͠ͱͳ͍[ͲΕ͘Β͍?]ͳΒߟ͑ͳ͍ͱ͍ ͚ͳ͍͜ͱҰͳ͍
ΛϫϯγϣοτͰ͏ • Embulk ͰσʔλૹΔ • 1ճ͖ΓͳΒߟ͑ͳ͍ͱ͍͚ͳ͍͜ͱগͳ͍ • (ఆظ࣮ߦɾߋ৽ͷ͘͠ΈɺΠϯΫϦϝϯλϧϩʔυɺ……) • BigQuery
ͰͳΜΒ͔ूܭ͢Δ • Google εϓϨουγʔτʹΤΫεϙʔτ͢ΔϘλϯ • σʔλϙʔλϧ (Data Studio) ʹಥͬࠐΉ
BigQuery ʹΠϯϙʔτ͠ʹ͍͘ςʔϒϧ • ׂͷׂςʔϒϧΛ͍ʹ͍͘ςʔϒϧ • Ϩίʔυ͕ INSERT ͞Εͨ࣌ࠁɺΛද͢ΧϥϜ͕ແ͍ • ্Ґ֓೦ͷͦ͏͍͏ใΛ
JOIN ͖ͯͯͦ͠ΕͰύʔςΟγϣ ϯ͢Δ? • αʔϏεͷྺ࢙͕ 4000 (≒ 10.96 ) Ҏ্͋Δ • צͰύʔςΟγϣϯͷִؒΛؒҾ͘? • Α͘Α͘ߟ͑ͨΒຊ·ͩύʔςΟγϣχϯάඞཁͳ͍ͱ͔
Google BigQuery ྉۚ • ౦ژϦʔδϣϯͳΒετϨʔδ୯Ձ S3 ΑΓ͍҆ • 0.023USD /
GB / ݄ • ΫΤϦྉۚ 8.55 USD / 1 TB • ࠓͷҝସϨʔτͩͱ͍͍ͩͨ 1 GB ͋ͨΓ 1 ԁऑ • ͪΐͬͱ͍ͨ͠ํͳΒ΄ͱΜͲޡࠩϨϕϧ
͜͜·Ͱͷ·ͱΊ • αʔϏεͷσʔλʹରͯ͠ϔϏʔͳूܭΛͨ͘͠ ͳͬͨͱ͖ͷಀ͛ಓͱͯ͠ͷ Google BigQuery Λ ͝հ͠·ͨ͠
αʔϏεͷσʔλϕʔε͔Βूܭ ϩάϑΝΠϧ܈͔Βूܭ
ͦͷϩάࠓͲ͜ʹ • Ͳ͔͜ͷαʔό্? • ͦΕͦ͜ BigQuery ͱ͔ RedShift ͱ͔? •
Amazon S3 ʹஔ͔Ε͍ͯΔ? • ࣗͷ߹ݟ͔ͨͬͨͷ͕ S3 ʹஔ͔Εͯ ͍ͨ
S3 ʹஔ͍ͯ͋ΔͳΒ Amazon Athena Ͱ • S3 ʹஔ͍ͯ͋ΔϑΝΠϧΛΫΤϦͰ͖ΔϚωʔδυαʔϏε • த
Presto (https://prestodb.io/) • Presto Hive ͷ͕ࣝ͋Δͱ͍͜ͳͤΔͱ͍͏͜ͱ͕ଟ͍ • ϑϧϚωʔδυͳͷͰɺूܭͷͨΊʹετϨʔδͱωοτϫʔΫ ڧΊͷϚγϯΛ༻ҙͨ͠Γɺͱ͍ͬͨ͜ͱΛ͠ͳ͍͍ͯ͘ • ͓ΉΖʹ S3 ͷϑΝΠϧΛࢦఆͯ͠ CREATE TABLE ͯ͠ΫΤ Ϧ͢Δ͚ͩ
• ҙͷϑΥʔϚοτΛύʔεͯ͠ SQL ͰΫΤϦ • CSV/TSV, JSONL, ֤छΧϥϜφ (ྻࢤ) ϑΝΠϧͳͲ
ඪ४αϙʔτ • LTSV ਖ਼نදݱͰύʔεͯ͠ΫΤϦͰ͖Δ • → ਖ਼نදݱͰύʔεͯ͠Λൈ͖ग़ͤΔϑΝΠϧͳ ΒԿͰΫΤϦͰ͖Δ • ύʔε͠ͳ͍͜ͱͰ grep as a service ͱͯ͠׆༻
-- LTSV Λ Athena ͰΫΤϦ͢ΔͨΊʹύʔεͯ͠ΈΑ͏ CREATE EXTERNAL TABLE IF NOT
EXISTS `sugoi-service-logs` ( `time` string, `host` string, `method` string, `path` string, `taken_sec` float, `ua` string, `referer` string ) PARTITIONED BY (date string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1', 'input.regex' = '^time:([^\\t]*)\\thost:([^\\t]*)\\tmethod:([^\\t]*)\\turi: ([^\\t]*)\\ttaken_sec:([^\\t]*)\\tua:([^\\t]*)\\treferer:([^\\t]*)$' ) LOCATION 's3://your-logs-bucket/sugoi-service-logs/' TBLPROPERTIES ('has_encrypted_data'='false')
-- LTSV Λ Athena ͰΫΤϦ͢ΔͨΊʹύʔεͯ͠ΈΑ͏ CREATE EXTERNAL TABLE IF NOT
EXISTS `sugoi-service-logs` ( `time` string, `host` string, `method` string, `path` string, `taken_sec` float, `ua` string, `referer` string ) PARTITIONED BY (date string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1', 'input.regex' = '^time:([^\\t]*)\\thost:([^\\t]*)\\tmethod:([^\\t]*)\\turi: ([^\\t]*)\\ttaken_sec:([^\\t]*)\\tua:([^\\t]*)\\treferer:([^\\t]*)$' ) LOCATION 's3://your-logs-bucket/sugoi-service-logs/' TBLPROPERTIES ('has_encrypted_data'='false')
-- LTSV Λ Athena ͰΫΤϦ͢ΔͨΊʹύʔεͯ͠ΈΑ͏ CREATE EXTERNAL TABLE IF NOT
EXISTS `sugoi-service-logs` ( `time` string, `host` string, `method` string, `path` string, `taken_sec` float, `ua` string, `referer` string ) PARTITIONED BY (date string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1', 'input.regex' = '^time:([^\\t]*)\\thost:([^\\t]*)\\tmethod:([^\\t]*)\\turi: ([^\\t]*)\\ttaken_sec:([^\\t]*)\\tua:([^\\t]*)\\treferer:([^\\t]*)$' ) LOCATION 's3://your-logs-bucket/sugoi-service-logs/' TBLPROPERTIES ('has_encrypted_data'='false') ……
ใ • S3 ʹͲΜͲΜϩάΛอଘ͢Δͱ͖ɺHive ܗࣜͷσΟϨΫτϦͰ อଘͯ͠ΔͱύʔςΟγϣχϯά͕ࣗಈͰߦΘΕͯศར • ྫ: s3://bucket/somelogs/year=2019/month=1/ day=23/engineer_seminar_001.log
• ͦ͏ͳͬͯͳͯ͘ symlink ͰͳΜͱ͔Ͱ͖Δͱ͍͏͋Δ • https://dev.classmethod.jp/cloud/aws/create-athena-table- with-symboliclink/
Amazon Athena ஈ • εΩϟϯͨ͠༰ྔʹରͯ͠՝ۚ (5 USD / 1 TB)
• gzip ѹॖࡁϑΝΠϧͦͷ··ΫΤϦͰ͖Δ • ྻࢤͰͳ͍ϑΝΠϧʹରͯ͠ΫΤϦ͢ΔͳΒɺूܭ ͢ΔΧϥϜΛߜͬͯྉۚઅʹͳΒͳ͍ • ج൫ͱͯ͠׆༻͍ͯ͘͠ײ͡ͳΒɺ ྻࢤϑΝΠϧʹม͢ΔϑΣʔζ͕ͳ͍ͱݫͦ͠͏
͜͜·Ͱͷ·ͱΊ • Amazon Athena Λ͏͜ͱͰɺ S3 ্ʹ͋ΔͳΒ͍͍ͩͨͲΜͳϩάͰͱ͘ʹ લ४උ͍͖ͤͣͳΓूܭͰ͖Δ
• όϧΫϩʔυͯ͠͠·͑ͬͪ͜ͷͷͱ͍͏ ؾ࣋ͪͰരूܭͰ͖Δάοζ • όϧΫϩʔυؾ͕ॏ͍ͱ͍͏ϩάϑΝΠϧͰɺ ϑΝΠϧͷ͋Γ͔Λઃఆ͢Δ͚ͩͰɺ Կ४උΛ͍͖ͤͣͳΓूܭͰ͖Δάοζ • ઌͷ݁ߏ͘͢ղܾͰ͖ΔΑ͏ʹ
• ઌͷΛղܾ͠ଓ͚ͯΔͱී௨ʹج൫ͬΆ͍ ͷ͕ཉ͘͠ͳͬͯ͘Δ͠ɺ͜͏ͳͬͯΔͱྑ͍ ͔ͳͱ͍͏ͷ͕ݟ͑ͯ͘Δ • ج൫͕͋Δͷʹӽͨ͜͠ͱͳ͍ • ͍Ζ͍Ζࢼ͢͜ͱͰσʔλͱͷ͖߹͍ํͷ Πϝʔδ͕ΒΜͩͷྑ͔ͬͨ