Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
20240725_JAWSビックデータ支部_Athena_PartitionProjection
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kensan773
July 25, 2024
570
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20240725_JAWSビックデータ支部_Athena_PartitionProjection
kensan773
July 25, 2024
More Decks by kensan773
See All by kensan773
Redshiftのノード追加によるパフォーマンス改善で勘違いしていた話
kensan773
0
150
CodeCatalystで始める最速(!?)のアプリ開発
kensan773
0
440
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
530
Facilitating Awesome Meetings
lara
57
7.1k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Writing Fast Ruby
sferik
630
63k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Rails Girls Zürich Keynote
gr2m
96
14k
Amusing Abliteration
ianozsvald
1
300
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Code Review Best Practice
trishagee
74
20k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
Transcript
AthenaのPartition Projectionを調べてみた︕ 2024/07/25 ⽔村 健太 BigData-JAWS 勉強会 #27
⾃⼰紹介 ⽔村 健太 (X:@kensan773) 所属 某シンクタンク 社会⼈5年⽬ ⾦融システム アプリ/インフラ開発担当 経歴
2021年8⽉~AWS上のシステム開発 2023年4⽉ 2023 AWS Jr. Champions選出 2023年5⽉~社内若⼿AWSコミュニティ⽴ち上げ 2023年9⽉~データ分析基盤構築案件にアサイン 本イベントの登壇経緯 じゅにちゃん仲間で運営の渡邊さんのお誘い 本LTは個⼈開発でAthenaを軽く触れた際の学びを共有
まずは復習から︕ パーティション(化)ってなんだっけ︖
パーティション化とは ◦ 雑に⾔うと…特定の項⽬でデータを階層ごとに整理する操作 ◦ パーティション化しないとどうなる︖ ◦ バケット全体をスキャン後、条件に合うデータを抽出 ◦ 余分なコストの発⽣と応答速度の低下につながる ◦
データが多数の場合、S3のリクエストレート制限 ◦ パーティション化をしてあげると︖ ◦ Glue Data Catalogからパーティション情報を取得 ◦ スキャン範囲をその情報に合致する箇所のみに限定 ◦ クエリのコストと速度を最適化 例)SELECT <列名> FROM <テーブル名> WHERE year = 2024 AND month = 03 AND day = 06 Amazon Athena Amazon S3 s3://<バケット名>/${year}/${month}/${day} AWS Glue Data Catalog 01 02 03 04 05 06 2024 01 02 03 パーティション情報取得 ※事前登録が必要 パーティション化の イメージ
パーティション化とは ◦ 雑に⾔うと…特定の項⽬でデータを階層ごとに整理する操作 ◦ パーティション化しないとどうなる︖ ◦ バケット全体をスキャン後、条件に合うデータを抽出 ◦ 余分なコストの発⽣と応答速度の低下につながる ◦
データが多数の場合、S3のリクエストレート制限 ◦ パーティション化をしてあげると︖ ◦ Glue Data Catalogからパーティション情報を取得 ◦ スキャン範囲をその情報に合致する箇所のみに限定 ◦ クエリのコストと速度を最適化 例)SELECT <列名> FROM <テーブル名> WHERE year = 2024 AND month = 03 AND day = 06 Amazon Athena Amazon S3 s3://<バケット名>/${year}/${month}/${day} 01 02 03 04 05 06 2024 01 02 03 パーティション化の イメージ パーティション情報取得 ※事前登録が必要 AWS Glue Data Catalog
増えていくパーティションに対応するには︖ よくあるパーティションの管理⽅法を2つ紹介
よくあるパーティション管理① ◦ Glue Crawlerで定期的にバケット全体をスキャンして更新 ◦ メリット ◦ ⾃動的にパーティションを検出する ◦ 商品名など連続性の無いキーの追加にも対応可能
◦ Glueの⼀部である ◦ GUIポチポチで設定、定期実⾏が可能 ◦ テーブル作成も同時に作成してくれる ◦ デメリット ◦ 実⾏時間時間が⻑い ◦ データが⼤量な場合は特に影響が⼤きい ◦ 頻繁に⾏うとコストがかさむ ◦ $0.44/h(最低10分、その後1秒単位で課⾦) Amazon Athena Amazon S3 AWS Glue Data Catalog Crawler s3://<バケット名>/${year}/${month}/${day} 01 02 03 04 05 06 2024 07 01 02 03
よくあるパーティション管理② ◦ ALTER TABLE ADD PARTITION⽂を定期実⾏して更新 ◦ 以下のSQLをAthenaで実⾏することで特定のパーティションを追加 ALTER TABLE
<テーブル名> ADD PARTITION (year='2024', month=ʻ03', day=ʻ07ʼ) LOCATION ʻs3://<バケット名>/2024/03/07ʼ; ◦ メリット ◦ 特定のパーティション追加のため実⾏時間が短い ◦ クエリ範囲が限られるためコストが節約できる ◦ デメリット ◦ 追加するパーティションが不明な場合は使えない ◦ ⾃作の定期更新処理が必要 ◦ EventBridgeスケジューラ等 Amazon Athena Amazon S3 AWS Glue Data Catalog s3://<バケット名>/${year}/${month}/${day} 01 02 03 04 05 06 2024 07 01 02 03 SQL
ここからが本題! AthenaのPartition Projectionって何︖
AthenaのPartition Projection(パーティション射影) とは ◦ 雑に⾔うと…パーティション管理を⾃動化してくれるAthenaの機能の⼀つ ◦ 継続して追加されるパーティションの管理が不要 ◦ あくまでもAthenaの機能であるためRedShiftやEMRでは使えない ◦
2020年に追加されている機能のため新しいものではない(私が不勉強で知らなかっただけ笑) ◦ 次のスライドからポイントを2つ紹介 ◦ 事前にテーブルにパーティションパターンを設定 ◦ インメモリの計算処理による⾼速化
ポイント① 事前にテーブルにパーティションパターンを設定 ◦ 主な設定⽅法 ⽅法①CREATE EXTERNAL TABLE⽂中にTBLPROPERTIESで設定する 例)CREATE EXTERNAL TABLE
<データベース名>,<テーブル名> PARTITIONED BY ( `partitioned_date` string ・・・任意の名前で良いが⾚字箇所は⼀致している必要あり ) TBLPROPERTIES ( 'projection.enabled'='trueʼ, ʻprojection.partitioned_date.typeʼ = ʻdateʼ, ・・・次のスライドで補⾜ 'projection.partitioned_date.format' = 'yyyy/MM/ddʼ, 'projection.partitioned_date.range' = '2020/10/01,NOWʼ, 'storage.location.template' = 's3://<バケットのパス>/${partitioned_date}ʼ ) ※設定は例かつ省略しているため、詳細は公式ドキュメントをご参考ください ⽅法②Glueコンソールから“テーブルの編集ページ“でTable propertiesで設定する ※上記TBLPROPERTIESの項⽬をキーバリュー形式で⼊⼒
ポイント① テーブルにパーティションパターンを事前設定 ◦ Partition Projectionでサポートされている型 ◦ 予測可能なパーティションパターン ◦ 整数(integer)… [1,
2, 3, 4, ..., 1000] , [0500, 0550, 0600, ..., 2500] など ◦ ⽇付(date)… [2010, ..., 2030] , [2024-01-01 00:00:00, ..., 2024-12-31 23:00:00] など ◦ 列挙値(enum)…郵便番号、証券コードなど ◦ 予測不可能なパーティションパターン ◦ 挿⼊型(injected型)…ユーザ名、デバイスID、UUIDで作成される項⽬など ◦ 注意)動的で柔軟にパーティション化できる⼀⽅、以下の条件を満たす必要がある ◦ クエリには必ずWHERE句でパーティションキーの値を少なくとも⼀つ含んでいること ◦ 値はデータを読み取らなくても評価できるリテラルまたは式であること ◦ 注意 ◦ 設定したパーティションの半数以上が空の場合、応答速度が低下するため前述の⽅法推奨
ポイント② インメモリの計算処理による⾼速化 ◦ 前述のGlue Crawler等でパーティション化されたテーブルにクエリを投げた場合 ◦ パーティション情報を取得するためGlue Data Catalogに対しGetPartitions APIを呼び出す
◦ パーティションが多数の場合、パフォーマンスに悪影響を及ぼす可能性 ◦ Partition Projectionでパーティション化されたテーブルにクエリを投げた場合 ◦ パーティション情報をTable propertiesを元にメモリ上で計算する ◦ インメモリの処理であるため⾼速であり、実⾏時間の短縮が⾒込める AWS Glue Data Catalog SQL AWS Glue Data Catalog SQL Glue Crawler等でパーティション管理する場合 Partition Projectionでパーティション管理する場合
おわりに Glue Crawler ALTER TABLE ADD PARTITION⽂ Partition Projection スキャン時間
中 低 無 コスト 中 低 低 管理の⼿間 低 ⾼ 低 設定難度 低 中 ⾼ 備考 空のパーティションが 半数以上ある場合は⾮推奨 ◦ 以下にあてはまる⽅はPartition Projectionを試してみてください︕ ◦ Glue Clawlerでコストや実⾏時間が気になっていた⽅ ◦ ALTER TABLE ADD PARTITION⽂で管理の⼿間を気にしていた⽅ 以上です、ありがとうございました︕