maya's blog

About programming, aws and ubuntu

メモ Amazon Athena [AWS Black Belt Online Seminar]

Amazon Athena Logo
Amazon Athena

セミナー概要: Amazon Athena は、S3 上のデータに対して直接 SQL を実行することができるサービスです。このセミナーでは、Athena の概要やアーキテクチャの説明,最適なクエリの実行方法やアーキテクチャパターンについて、リリースしてから 2 年間の間のアップデートも含めてお伝えします。

本記事は、[AWS Black Belt Online Seminar] Amazon Athena オンラインセミナーの概要を書き留めたもの

Abstruct

  • Amazon Athena(アテナ)とは AWS S3上のデータに対して、標準SQLによるインタラクティブなクエリを投げてデータの分析を行うことができるサービス
  • PrestoというクエリエンジンOSSを使用

Feature

  • サーバレス
  • 大規模データに対して高速クエリ
  • 事前データロード必要なし
  • 従量課金

Usecase

  • 新しく取得したデータに対して、DWに入れる価値があるか探索的に検証
  • 利用頻度の低い過去のデータに対する、BIツール経由のアドホックな分析
  • S3に格納してあるサーバログから障害追求
  • 大規模でないデータに対しての低頻度で実施するETL処理

Architecture

Presto | Overview

AWS Glue Data Catalog

  • AWS GlueのData Catalogをメタデータ(DB名, table, schema, view, partition)管理に使用
  • Data CatalogはApache Hive Metastore互換

Table Definition

i.g.

CREATE EXTERNAL TABLE IF NOT EXISTS action_log (
  user_id string,
  actino_category string,
  action_detail string,
  year int,
  month int
)
PARTITIONED BY (year int, month int)           # パーティション
STORED AS PARQUET                              # データ形式
LOCATION 's3://athena-examples/action-log'     # データの場所
TBLPROPERTIES ('PARQUET.COMPRESS'='SNAPPY');   # 圧縮形式

Data type, Data format, Compression format

  • 対応データ型 primitive(tinyint, int, double, etc...), array, map, struct, union
  • 対応データ形式 CSV, JSON, Apache Avro, Apache Parquet
  • 対応データ圧縮形式 SNAPPY, ZLIB, GZIP, LZO

Query

Athena API

  • Amazon Athena API
    • Query Execution API
    • Named Query API (クエリの保存)

Data Design and Query Specific

Partition

  • S3オブジェクトキーの構成をCREATE TABLEに反映
  • 1テーブルあたり最大パーティション数は1000000

例えば

CREATE EXTERNAL TABLE IF NOT EXISTS action_log (
  user_id string,
  action_category string,
  year int,
  month int,
  day int
)
PARTITIONED BY (year int, month int, day int)
STORED AS PARQUET
LOCATION "s3://athena-examples/action-log/'
TBLPROPERTIES ('PARQUET.COMPRESS'='SNAPPY');

このテーブルに対して

  • s3://athena-example/action-log/year=2016/month=04/day=01/
  • s3://athena-example/action-log/year=2016/month=04/day=02/
  • s3://athena-example/action-log/year=2016/month=04/day=03/
  • ...
  • s3://athena-example/action-log/year=2016/month=06/day=31/

こんなオブジェクトが存在していれば

SELECT
  month,
  actioncategory,
  actiondetail,
  COUNT(user_id)
FROM
  action_log
WHERE
  year=2016 AND month >= 4 AND month < 7
GROUP BY
  month,
  action_category,
  action_detail

このクエリで指定のオブジェクトのみを読み込む

分析対象オブジェクトだけを読み込むことができる

列指向フォーマット

LanguageManual ORC - Apache Hive - Apache Software Foundation

列指向 - データを1カラムごとにまとめて、このカラムはこのファイルにあるよ、みたいな → ファイル全体を読み込む必要がなくなる - 圧縮効率もよい

行指向 CSV, TSV

パフォーマンスチューニング

運用前にはこれを読んどけとのこと

aws.amazon.com

Amazon Athenaの活用法

...

まとめ

  • Amazon Athenaは、Amazon S3上のデータに対して、標準SQLによりインタラクティブクエリを実行して、データ分析を行うことができる
  • データの持ち方やクエリの記述を工夫することで、より低いコストで、より高速にクエリを実行することが可能
  • AWS GlueやAmazon Kinesis Data Firehoseなどと連携することで、より洗練された便利な形でデータ処理を行うことができる

references