Amazon AthenaでいろいろなSELECTを実行してみる

2016.12.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

re:Invent 2016で発表されたAthenaについては弊社でも既に様々な記事が出ております。公式サイトによるといろいろなSQLを使う事ができるようなのですが、今回はデータのSELECTを実際に試してみました。

SELECTの実行

Athenaの実行方法については弊社の記事などを参考にしてください。今回はデフォルトで用意されているsampledb.elb_logsテーブルに対してSELECTを実行してみました。

以下、今回試したSELECTの種類です。

  • with
  • distinct
  • join
  • where
  • group by
  • having
  • union
  • order by
  • limit
  • tablesample
  • unnest

with

以下のSQLを実行しました。

with elb_logs_with as (
select requestip, backendport from elb_logs where backendport >= 8000
)
select requestip, backendport from elb_logs_with where requestip like '244%'
union
select requestip, backendport from elb_logs_with where requestip like '254%'

実行結果は以下となりました。

athena_sql_with

distinct

以下のSQLを実行しました。

select distinct requestip from elb_logs

実行結果は以下となりました。

athena_sql_distinct

join

joinする対象のテーブルとして「porttype」テーブルを用意して以下のデータを登録しました。

athena_sql_porttype

以下のSQLを実行しました。

select log.elbname, log.backendport, porttype.type from elb_logs log
inner join porttype porttype
on log.backendport = porttype.port

実行結果は以下となりました。

athena_sql_join

where

以下のSQLを実行しました。

select requestip, backendport from elb_logs where requestip like '254%'

実行結果は以下となりました。

athena_sql_where

group by

以下のSQLを実行しました。

select requestip, count(*) from elb_logs group by requestip

実行結果は以下となりました。

athena_sql_group_by

having

以下のSQLを実行しました。

select requestip, count(*) from elb_logs group by requestip
having count(*) > 10

実行結果は以下となりました。

athena_sql_having

union

以下のSQLを実行しました。

select requestip, backendport from elb_logs where backendport = 80
union
select requestip, backendport from elb_logs where backendport = 8888

実行結果は以下となりました。

athena_sql_union

order by

以下のSQLを実行しました。

select distinct backendport from elb_logs order by backendport

実行結果は以下となりました。

athena_sql_order_by

limit

以下のSQLを実行しました。

select * from elb_logs limit 5

実行結果は以下となりました。

athena_sql_limit

tablesample

以下のSQLを実行しました。

select * from elb_logs tablesample SYSTEM(10);

実行結果は以下となりました。

athena_sql_tablesample

unnest

以下のSQLを実行しました。

select * from unnest(ARRAY['a', 'b' , 'c'])

実行結果は以下となりました。

athena_sql_unnest

まとめ

いろいろなSELECTを使いデータの抽出を行うことができました。例えばS3に配置されたログから必要な項目やレコードを抽出するとか、件数を取得するなど、様々な用途が想定できると思います。

参考サイト

SQL and HiveQL Reference