AWSのコンソールにログインして、サービスの一覧を見るたびに
「もはや知らないお友達の方が多いんじゃないか」と思うpinocoですこんにちは。
今日はその知らないお友達リストの中から、
「随分前から名前は知っているぞ」「興味もありそうだぞ」
というAthenaについて全何回になるかわかりませんが、お送りしたいと思います。
1. 執筆前のAthena(アテナ)に関する精一杯の知識
色々なエンジニアさんが書く、「初めて触る技術についてのブログ」
なんかを読んでいて、個人的に結構気になる点として、
* だいたいどれくらいの知識レベルの時点で執筆を開始してるのか?
* 執筆後だいたいどのくらい理解している状態になっているか?
があげられます。
つまり、どの程度の前提知識を有していれば、
そのブログなり記事なりの筆者が伝えたいと思ったことを追体験できるのか、
もう少し知識をつけて出直すべきなのか?とか考えたりします。
なので、参考になるかはわかりませんが、
先にAthenaに対する私の現段階の理解や知っていることを開示しておきます。
(1). 聖闘士星矢に出てきた(と思う)
(2). GodOfWarに出てきてクレイトスを裏切った(と思う)
(3). S3にputしたファイルに対しQuery実行ができる(と聞いた気がする)
もはや何も知らなかった方がよかったんではないかと思う惨状を呈したところで
では早速始めましょう。
2. Athenaとは
よくわかりません。失礼致します。
ということで、よくわかってないサービスを触る時に私がとるアプローチは以下が多いです。
* slideshareでAWSの方が上げているその時一番読みやすくかつ、
最新と思われる、該当サービスの資料(BlackBelt)を読む
※今回だとAmazon Athena 初心者向けハンズオンが自分には合っていたかもしれません。
* 上記と並行して公式ドキュメントで肉付けを行う
* ある程度輪郭が掴めたら実際に触ってみる
今回もそのアプローチに則ってやってみたいと思います。
2-1. Athenaの特徴
まずは、サービスの大きな特徴やポイントぽいものをメモを取りながら、
ざっくりと抑えていきます。
(1). S3上のデータ(ファイル)に対し、ANSI 標準SQLを利用できる
(2). データ(ファイル)に利用できる拡張子→サポートされる SerDes およびデータ形式(公式)
(3). クエリエンジンとしてPrestoを利用(この子が標準SQLを使えるようにラップしてくれてる)
(4). データ処理はオンメモリで行われる
(5). (4)よりS3上のデータ(ファイル)を読み込まないと始まらない
(6). (5).より読み込むデータ(ファイル)の量が多くなればなるほど問題が出そう
* 処理データ増大→レスポンス遅延、メモリ枯渇
(7). (6).への対処として、
* Athenaが読み込む領域をパーティションで分割する、
* inputするファイルとして列指向、圧縮形式を採用するなんていうアプローチがある
* 実質、設計する部分としてはこの辺な気がするので、続編で掘り下げる。
(8). 料金は「クエリごとにスキャンされたデータ量」で算出される。
* スキャンされたデータ 1 TB あたり 5 USD(2018/07/20 時点)
* 1TB = 5USDで0.5TB=2.5USDとなる
* S3に置いてあるデータは、S3の料金体系に準拠。
ここまでを振り返ると、
* Athenaでクエリ発行時に読み込むデータ量を減らすアプローチが、
なんとなく性能的にも、お財布的にも優しそうである
ということがぼんやりわかりました。
まずはこのくらいで機能周りの把握は止めておいて、
あとで検証するときにより細部の知識を積んでいく形にします。
では次は観点を変えて、相性のいいサービスやユースケースを整理してみます。
2-2. Athenaを利用した構成、ユースケース
実際に触る前に、もう少しだけ抽象度が高い部分で情報を整理しておきます。
いざAthenaを使おう!となった場合、どういう風に使うのが誰(何)にとってどう便利なのか?的なことを
ほんのり意識してるといいかもしれません。ちなみに私はそういうことはできないです。
(1). 実際にクライアント側からAthenaを利用するパターン
* ODBC / JDBCでの接続
* AWS APIを介した接続ではないため、
AthenaはODBC / JDBCに対応した独立したデータソースとして振る舞う
* SQL WorkBench等クライアントツールでの接続や、
各ドライバを利用したアプリケーションでの利用ができる
* AWS APIを介していないため、
別のところで認証・認可を管理していると思うけれど、
その部分については不明瞭。ユーザやスキーマ周りについてどういう扱いになるのか
後続で整理が必要。
* AWS Management Consoleからの利用、AWS CLIからのクエリ発行も可能。
* AWS CLIからクエリの実行ができると、
バッチやスクリプト組むときの選択肢が広がるのはわかるのですが、
ODBC/JDBC対応しているという前段があるので
「RDSにクエリ投げられるAWS CLI(API)あります!」みたいなことを言われた感じに思えて
少しだけ違和感を覚えました。
例えばBigQueryとかはAPIでクエリ投げますけど、ODBC/JDBCには対応してないですよね。
こういうのって、そもそもサービスの思想が違うだけなんですかね。難しい。
* AWS QuickSightを利用したアクセス
* BIツール。Athenaに接続して利用することができる。
* ちなみに、TableuもAtheneに対応している様子
* 分かってないことが芋づる式に増えていきますね。
(2). AWS Glueを介在させる
* これはGlueというサービスを別途整理しないとかけそうにないです。
自身の理解が追いつくまでに時間を使いそうなので整理後Uodateかけておきます。
と、ここまでで、第一回は終わりにしたいと思います。
結局 Athenaに触ってもいませんね。触れるのは、いつになるやら。。
次回は
・Athenaでクエリ発行時に読み込むデータ量を減らすアプローチを整理してみる
を中心に深掘りしていきたいと思います。
以上、よろしくお願いいたします。