AWS S3 × Athena を触ってみる

技術情報
技術情報

はじめに

Athenaというjsonやcsvなどのファイルに直接クエリをかけられるサービスがあることを知ったので、試しにどんなものか触ってみて、使用感や操作方法など共有出来たらと思います。

S3設定

AthenaでS3に保存したファイルにクエリをかけるため、まずはS3バケットを作成します。

Athenaでテーブルを作成する際に、S3のjsonファイルを配置している場所と、テーブル名をリンクさせる必要があるため、”proof_activities” というフォルダを作成します

作成したフォルダの中に、今回クエリをかけるjsonファイルをアップロードしておきます。
Athenaでjsonファイルにクエリをかける場合、1行1オブジェクトの形としておく必要があります。

testJson.jsonl

実際の運用ではjsonファイルを作成、アップロードまではlamdaで実装するようになると思います。

Athena

先ほど作成したjsonファイルのカラムをテーブルに定義していきます。
Athenaのカラムの設定方法はここでは詳しく説明はしません。

Athenaのクエリで下記を実行しテーブルを作成します。

CREATE EXTERNAL TABLE IF NOT EXISTS proof_activities (
  id string,
  type string,
  content struct<
    content:string,
    sequence:string,
    comment_id:string,
    private_comment:boolean,
    `from`:string,
    `to`:string,
    stage:struct<
      id:string,
      name:string
    >,
    reviewer:struct<
      id:string,
      contact:struct<email:string>
    >,
    new_attachments:array<struct<file_id:string, name:string>>,
    removed_attachments:array<struct<file_id:string, name:string>>,
    new_labels:array<struct<label_id:string, label:string>>,
    removed_labels:array<struct<label_id:string, label:string>>,
    date:string,
    folder:struct<id:string, name:string>,
    changes:array<struct<type:string, `from`:string, `to`:string>>
  >,
  action_maker struct<
    contact_id:string
  >,
  created_date string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://{バケット名}/proof_activities/';

テーブルができたので、SELECT文でデータを取得します。

SELECT
  id,
  content."from" AS from_status,
  content."to" AS to_status,
  content.stage.name AS stage_name,
  content.reviewer.contact.email AS reviewer_email,
  created_date
FROM proof_activities
LIMIT 10;

jsonのカラムが抽出できていることを確認できました。

まとめ

Athenaを使って驚きました。DBに保存してからクエリする常識が崩れ、S3に置いたままSQLで分析できるのは革命的。インフラ管理不要で、次世代のデータ活用ってこういうことなんだと実感しました。

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