Amazon Athenaを簡単に使ってみた

Athena

フェイス・ソリューション・テクノロジーズ株式会社 IS 本部 OS ユニットの masです。
前回に引き続き、今回はAthenaでデータベースを作成して実際にデータを検索する手順をご紹介したいと思います。

手順紹介

データベースを作成する

初期設定

まずAthena コンソールを開いてください。

初めてAthenaを使う場合は「最初のクエリを実行する前に~」のところの設定を編集をクリック

クエリ結果を出力するS3bucketを指定して保存をクリック

データベースを作成

クエリエディタ画面でエディタ部分に下記のクエリを入力

CREATE DATABASE <データベース名>

実行をクリックする。

データベースのところに作成したデータベース名が出てきたら作成完了

バケットに検索対象のCSVを配置

今回は総務省統計局のサイトから取得したオープンデータを使用しました。
任意の名前でバケットを作成し、用意したCSVを配置します。

テーブルの作成の項目で紹介するクエリ部分で使用する為、作成したバケット名を控えておいてください。

テーブルの作成

エディタ部分に下記を入力して実行を押します。
問題がなければクエリ結果に「クエリは成功しました。」と表示され、
さらにテーブルのところに作成したテーブルの名前が表示されます。

CREATE EXTERNAL TABLE IF NOT EXISTS test(
`ID` STRING,
`class` STRING,
`class_L` STRING,
`class_M` STRING,
`Class_S` STRING,
`category` STRING,
`Jan` STRING,
`Feb` STRING,
`Mar` STRING,
`Apr` STRING,
`May` STRING,
`Jun` STRING,
`Jul` STRING,
`Aug` STRING,
`Sep` STRING,
`Oct` STRING,
`Nov` STRING,
`Dec` STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES (  'escapeChar'='\\',  'quoteChar'='\"',  'integerization.format' = ',',  'field.delim' = ',' ) 
LOCATION < 検索対象になっているbucket >
TBLPROPERTIES ('has_encrypted_data'='false',  'skip.header.line.count'='4', 'serialization.encoding'='SJIS')
簡単にコード解説
CREATE EXTERNAL TABLE IF NOT EXISTS 'table_name'

「CREATE EXTERNAL TABLE」はテーブル作成時の決まり文句。
「IF NOT EXISTS ‘table_name’」で同名のテーブルが見つからない時だけ作成します。

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (  'escapeChar'='\\',  'quoteChar'='\"',  'integerization.format' = ',',  'field.delim' = ',' ) 

SerDe(シリアライザー/デシリアライザー)の設定を書いています。
Ahenaが読み込んだデータを取り扱う際のルールです。
エスケープ文字だったり、列の区切り文字などを設定してます。

LOCATION < 検索対象になっているbucket >

どのバケットをテーブルとして扱うかを設定する。
ファイルじゃなくバケットを指定するところが重要

TBLPROPERTIES ('has_encrypted_data'='false',  'skip.header.line.count'='4', 'serialization.encoding'='SJIS')

テーブルのプロパティ設定をしている箇所になります。
不要な行があった場合は「skip.header.line.count」で飛ばす行数を設定します。

実際に検索をかけてみる

下記のクエリを実行する。

SELECT * FROM test WHERE category IN('穀類','魚介類','肉類')

クエリ結果のところに結果が表示されます。

結果CSVの出力先

初期設定時にクエリ結果の出力先に指定したbucket内に実行結果のcsvが生成されています。

最後に

以上で、Athenaを使って実際にデータを検索する手順を紹介しました。
今回はパーティションという機能を使用しませんでしたが、パーティションを使用すると
パフォーマンスを向上させ、さらにはコストカットもできるようになります。
そこで次回は、パーティションについて説明し、実際にパーティションを使用する手法について
ご紹介したいと思います。


次回も何卒宜しくお願い致します。

プロフィール
この記事を書いた人
mas

IS本部オペレーションサービスユニットでサーバ監視および映像監視担当。
趣味はカラオケだけれど、コロナの為に自粛中。
AWSの資格はクラウドプラクティショナーを取得済み。
ソリューションアーキテクトアソシエイト取得に向けて勉強中。

masをフォローする
フェイスでは一緒に働く仲間を募集しています

フェイス・ソリューション・テクノロジーズ株式会社では、一緒に働いてくれる仲間を募集しています。
いろいろな案件があるので、いろいろなことに挑戦できる会社です。
「面白いこと」に積極的なので、あなたの「面白そうなことだからやってみたい」を形にできるチャンスがあります!

Athena
フェイススタッフブログ

コメント

タイトルとURLをコピーしました