AWS Athena の詳細を調べてみた。

ついにAthenaが**東京リージョンでGA**になりましたね！

 [参考：【祝】Amazon Athena が東京リージョンにやってきました]
(http://dev.classmethod.jp/cloud/aws/release-amazon-athena-in-tokyo-region/)

これを気に本格的な利用を検討するにあたって、「そもそも何者か」「何ができるのか！」を棚卸ししたいと思います。

# Athena　ってなに？

公式では、

<img width="518" alt="スクリーンショット 2017-06-24 13.32.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/188802/a0690989-216c-5693-fe58-7bf6098f6c08.png">
参考：https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-amazon-athena

つまり、ETLとかいらずに直接ストレージ(S3)上のデータにSQLを投げて分析できるよ！ということ。


# いつから？

2016年のre:Inventにおいて[キーノート](https://aws.amazon.com/jp/blogs/news/amazon-athena-interactive-sql-queries-for-data-in-amazon-s3/)で発表されました。

が、この時点では**まだ東京に来ていなかった...:cold_sweat:**(　バージニア、オレゴンのみ。のちにオハイオも追加)

# 何がすごいの？


1. サーバーレス
2. 高速クエリ
3. S3に直接アクセス
4. BIツールが使える
5. 従量課金

そもそも今まではAWS環境であってもS３をデータレイクとしていても**Redfhit**,**EMR**あたりを介して分析できる形に変換したものを分析する必要がありました。

しかし、これらを直接S3にクエリを投げることができるので、どうしても成型できなかったデータの分析ができたり、分析自体のハードルが下がりました。

# どんな時に便利？

1.そもそも分析基盤に流すべきデータか判断するために見てみる
2.Webサーバの障害ログの検索
3.たまーに見てみたいデータへのアクセス

#　どんなことが向いてない？

1. リトライ機構がなく，データを絞って高速にスキャンするアーキテクチャのため，バッチ処理には向かない 
2. 分析処理でも，大量データを長時間処理するのには向かない
3. ユースケース 適したサービス 大規模なデータに対して，フルスキャンを定期的に行う処理
4. テンポラリテーブルを活用した多段のETL処理
5. サブクエリやJOINを駆使した複雑な集計処理
6. 高頻度なレポーティングのための大量の分析処理
7. 
# どうやって使うの？

Athenaのコンソール画面からクエリエディタを開く

####　あとはクエリを書くだけ！

そのほかにも

- 過去のクエリもHistory機能で確認できる。
- 結果はS3に自動でバケットが作られ、自動でS３に保存される
- BIツールとしてQuicksightを使うとAWS内で可視化まで完結できる

#中身の構成は？

- クエリエンジンはPresto

# クエリの書き方は？

- 通常のSQLクエリの後にデータ形式、圧縮形式、Pathなどを記載 

#　使えるデータの型は？

- プリミティブ型
- 配列型
- map型
- struct型
- union型


#　分析できるデータは？

| 項目 |値|
|:-----------|------------:|
| データ型 |　CSV、TSV、Parquet、ORC、 JSON、Regex、Avro、CloudtrailLogs| 
| 圧縮形式 | Snappy、Zlib、GZIP、LZO      |

#　できないこと

- CREATE TABLE AS SELECT 句は使用できない 
- EXTERNAL TABLE のみが利用可能 
- トランザクション処理，UDF / UDAF，ストアドプロシージャ，VIEW等は未サポート
- テーブルに対する変更処理は ACID を保証
- 複数人が同時に DDL を発行しても，成功するのは1つだけ

# 現状の制約
[全体の制約]

- 1アカウントあたりの最大クエリ同時実行数は5個
- クエリは30分でタイムアウト
- 1アカウントあたりの最大データベース数は100個
- 1データベースあたりの最大テーブル数は100個
- 1テーブルあたりの最大パーティション数は20000個 

[入力の制約]

- どのリージョンの S3 からでもデータの読み込みは可能 
- ただしリージョンをまたぐ場合，データ転送時間と，転送料金がかかる 
- 暗号化データ読み込みは SSE-S3, SSE-KMS, CSE-KMS に対応

[出力の制約]

- Athena 実行リージョンの S3 にヘッダ付き csv で出力のみ 
- 結果ファイルは SSE-S3, SSE-KMS, CSE-KMS の3方式で暗号化して出力可能 
- SELECT INSERT には未対応

[データアクセスに関する制約]

- アクセス手段はコンソールまたはJDBCドライバ経由のみ APIやCLIは提供していない
- データベース単位，テーブル単位など，リソースごとのアクセス制御は未対応
- CREATE TABLE の際に，読み込ませない行を指定できない (Hive DDL の ‘skip.header.line.count’ オプションは未対応*) 

**全て上限緩和申請によって増やすことは可能**

# 気になるお値段は？

- クエリ単位の従量課金
- S3 のデータスキャンに対して，$5 / 1TB の料金(バイト数はメガバイト単位で切り上げられ，10MB 未満 のクエリは 10MB と計算される)
- 別リージョンからデータを読み込む場合には，別途 S3のデータ転送料金がかかる
- DDL のクエリや，実行に失敗したクエリの料金は 無料
- パーティション，列指向フォーマット，圧縮を活用 することで，スキャンするデータ量を減らして，コ スト削減が可能

# Athena自体のバージョアンアップ頻度は？

すでになんどもバージョンアップやリージョンの追加がされている

| 日付 |内容|
|:-----------|------------:|
|2017/2/16 |新機能&性能改善|
| 2017/3/24 |新機能&性能改善|
| 2017/4/6  |新機能|
| 2017/5/19 |新機能|
| 2017/6/9 |新機能|
| 2017/6/22 |新機能|

#まとめ

- エラーログの解析や簡易な分析はとても便利そう！
- 更新頻度が多くて、安心の反面、心配も少し
- とにかく触ってみようかな

#　参考

[AWS Blackbelt 「Atehna」](https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-amazon-athena)

# フィードバックください
「こういう使い方がいいよ」等あれば教えてください！