大規模データセットも簡単クエリ! Amazon Athena をグラレコで解説

2023-05-02
AWS グラレコ解説

Author : 米倉 裕基 (監修 : 林田 千瑛)

※ 本連載では、様々な AWS サービスをグラフィックレコーディングで紹介する awsgeek.com を、日本語に翻訳し、図の解説をしていきます。awsgeek.com は 、Jerry Hargrove 氏が運営しているサイトです。

これまでのグラレコ解説はこちら »

builders.flash 読者のみなさん、こんにちは ! テクニカルライターの米倉裕基と申します。

本記事では、Amazon S3 上に保存された大量のデータを簡単かつ高速にクエリできるデータ分析サービス「Amazon Athena (以下 Athena)」をご紹介します。

Athena は、大規模なデータセットを管理するためによく使われるデータウェアハウスや Apache Hadoop クラスターを準備する必要なく、Amazon S3 (以下 S3) に保存されたデータを、標準 SQL を用いて簡単にクエリできるサービスです。


本記事では、Athena の主な機能や特徴を以下の項目に分けてご説明します。

それでは、項目ごとに詳しく見ていきましょう。


Athena のユースケース

Athena は、S3 に保存されたデータに対して、標準 SQL を用いて簡単にクエリを実行できるデータ分析サービスの一種です。

AWS が提供するデータ分析サービスには、Athena 以外にも Amazon Redshift (以下 Redshift) や Amazon EMR (以下 EMR) がありますが、それぞれ異なる用途に最適化されたサービスであり、ユースケースに応じて使い分けることができます。

Redshift は大量の構造化データを高速に処理するために最適化されたデータウェアハウスです。EMR は Apache Hadoop や Apache Spark などのフレームワークを使用して大規模なデータ処理ジョブを実行するためのマネージドサービスです。

一方、Athena は、構造化・非構造化を含む多彩なフォーマットのデータに対して、迅速かつ簡単にアドホックな SQL クエリを実行するのに適したサービスです。

常時分析が必要な大容量データには Redshift や EMR を利用し、スポット的な分析には高速かつ柔軟なクエリが可能な Athena を利用するといった使い分けが可能です。Athena は、Redshift や EMR と競合するサービスではなく、それぞれの特性を活かし、相互補完する形で併用することができます。

Athena を含む AWS が提供するデータ分析サービスの特性とユースケースについて詳しくは、「Athena の用途」をご覧ください。


機能と特徴

Athena には、サーバーレス、高可用性、利便性、パフォーマンスという側面でさまざまな機能と特徴があります。

サーバーレス

Athena はサーバーレスアーキテクチャを採用しています。ユーザーはサーバーを自分で構築する必要がなく、メンテナンスに時間を費やす必要もありません。インフラ設定、ソフトウェアの更新、障害、スケーリングなどサーバー管理に付随する業務に悩まされることなく、データのクエリや分析に集中することができます。

利便性

Athena は、データをクエリする前に、データの事前加工や ETL (抽出、変換、ロード) 処理を必要としません。従来のデータウェアハウスやデータベースと異なり、データのロードや変換に時間やリソースを費やす必要がなく、S3 バケットに格納されたネイティブのデータに直接クエリを実行できます。

高可用性

Athena は、複数の施設のコンピューティングリソースを使用してクエリを実行するため、特定の施設に到達できない場合は自動的にクエリが適切にルーティングされます。ユーザーは手動でリソースを割り当てる必要がなく、安定的にクエリを実行できます。また、データセットを S3 に保存するため、99.999999999% の耐久性、99.9% の高可用性、ストレージのオートスケーリング、マルチ AZ 配置による障害発生時の DR 対策など、 S3 が提供するさまざまなメリットを得られます。

パフォーマンス

Athena は、データをパーティションと呼ばれる単位で分割し、各パーティションに対して並列でクエリを実行することで、高速な処理を実現します。さらに、圧縮されたデータやカラムナ (列指向) フォーマットをサポートしています。カラムナとは、データを列単位で保存する方法で、通常、行単位のデータ形式よりも効率的なクエリを実現します。加えて Athena では、クエリ結果をリアルタイムで取得するストリーミング API を提供しており、分析に必要な情報をリアルタイムで取得できる仕組みを備えています。

その他、Athena が提供する機能と特徴について詳しくは、「Amazon Athena の特徴」をご覧ください。


サポートデータ形式

Athena は、ネイティブのまま多数のデータ形式をクエリできるため、構造化・非構造化を含むさまざまな形式のデータを直接扱うことができます。そのため、データ形式の変換や前処理を行う必要がなく、スムーズなクエリの実行が可能です。

Athena では、以下のようなデータ形式をサポートしています。

  • TSV:データの列をタブで区切るデータ形式
  • CSV:データの列をコンマで区切るデータ形式
  • JSON:キーと値のペアで構成され、配列やオブジェクトなどを含む階層的なデータ形式
  • Amazon Ion:Amazon が開発し、オープンソース化された JSON のスーパーセットであるリッチタイプの自己記述データ形式
  • Apache Avro:JSON に似た独自のスキーマ言語を使用するデータ形式
  • ORC:Hadoop ベースのビッグデータ処理に使用されるカラムナ (列指向) フォーマット
  • Apache Parquet:ORC 同様、Hadoop ベースのビッグデータ処理に使用されるカラムナ (列指向) フォーマット

クリックすると拡大します

上記のデータ形式に加えて、カスタム区切りのデータ形式や、LogstashAWS CloudTrailApache WebServer からのログもサポートしています。

また Athena では、Delta LakeApache IcebergApache Hudi など、大規模なデータの管理や処理に適したオープンソースのデータマネジメントフレームワークをサポートしています。これらのフレームワークを活用することで、Apache Parquet や ORC などのデータ形式をより効率的に管理し、クエリ実行のパフォーマンスを向上させることができます。詳しくは、「Athena ACID トランザクションの使用」をご覧ください。

Athena がサポートしているデータ形式について詳しくは、「サポートされる SerDes とデータ形式」をご覧ください。


クエリの実行

一般的に、大規模なデータセットに対するクエリ処理には、Apache Hadoop やデータウェアハウスなどを使った煩雑なセットアップや高度な専門知識が必要です。しかし、Athena を利用することで、専用のインフラストラクチャの準備が必要なく、標準SQLを使用して簡単に大規模データセットをクエリできます。

以下は Athena を使用してクエリを実行するまでの一般的な手順です。

  1. S3 にデータをアップロード
    CSV、JSON、Parquet など、Athena がサポートしているデータ形式でデータをアップロードします。
  2. データカタログにテーブルスキーマを定義
    Athena コンソールで、S3 に保存されたデータの場所を指定し、スキーマを定義してデータカタログにテーブルを作成できます。
    Athena は、AWS Glue Data Catalog を使用してデータカタログを管理します。そのため、AWS Glue クローラを使用することで、S3 だけでなく、JDBC データベース、DynamoDB、Aurora、Redshift など、さまざまなデータストアからデータを抽出し、スキーマの作成、データカタログへの登録が可能です。
  3. データに対しクエリを実行
    Athena コンソール、JDBC ドライバ、または API を使って SQL クエリを実行します。データカタログから作成されたテーブルを指定し、クエリを実行することで、データのフィルタリング、グループ化、集計などが行えます。

Athena を使用したクエリの実行について詳しくは、「Amazon Athena を使用した SQL クエリの実行」をご覧ください。


クエリ結果のビジュアライズ

Athena は、ビジネスインテリジェンス (BI) サービスである Amazon QuickSight (以下 QuickSight) と完全に統合されています。

QuickSight と連携することで、ユーザーは直感的な操作でクエリ結果をグラフ化し、ダッシュボードを作成できます。その結果、データの中のビジネス上有用なインサイトを効率的に見つけ出すことができます。

以下は QuickSight を使ってビジュアライズする簡単な手順です。

  1. QuickSight にログインし、新しい分析を作成する。
  2. 「データソースの追加」から Athena を選択し、必要な列を選択してデータ定義を読み出す。
  3. データをプレビューして、ビジュアルを作成するための適切な列を確認する。
  4. ビジュアルを作成し、必要に応じてカスタマイズしてダッシュボードに追加する。

Athena と QuickSight の連携について詳しくは、「Amazon Athena データを使用したデータセットの作成」をご覧ください。


Athena のテーブル

Athena のテーブルは、Hive DDL を使用して定義され、外部テーブルとして S3 に保存されたデータを使用してクエリを実行します。Athena では、大量のデータを効率的に処理するために、テーブルをパーティションに分割します。パーティションごとに処理を分散させ、複数のリソースを使用して並列処理を行うことで、高速なクエリの実行が可能です。

Hive DDL
 
Athenaでは、 Apache Hive の DDL (データ定義言語) を使用してテーブルを定義します。Hive DDL とは、テーブルのスキーマを定義するための言語で、テーブル名やカラム、パーティションなどを指定します。スキーマは、 CREATE TABLE ステートメントを使用して定義します。

スキーマオンリード

Athena は、スキーマオンリード (schema-on-read) のクエリエンジンです。スキーマオンリードとは、データの読み込み時にスキーマはメタデータとして定義され、クエリの実行時にデータの射影が行われます。また、同じデータに複数のスキーマを使用することもできます。

外部テーブル

Athena のテーブルは、外部テーブルとして定義されます。つまり、Athenaは、テーブルのデータを直接管理せず、S3に保存されたデータを使用してクエリを実行します。外部テーブルの使用により、データストレージと計算リソースを分離でき、データを格納するためのストレージシステムは、Athena に依存することなく、独自に管理できます。

パーティション分割

Athena は、大量のデータを効率的に処理するために、テーブルを複数のパーティションに分割して並列処理を行います。また、クエリ実行時には、データを自動的にバイナリ形式に変換するシリアライズを行い、保存時には元のデータに戻すデシリアライズを行います。これにより、S3 上に保存された様々な形式のデータを効率的にクエリすることができます。

Athena でのテーブル作成について詳しくは、「Athena でのテーブルの作成」をご覧ください。


クエリエンジン

Athena では、分散型の SQL クエリエンジン Presto および Trino クエリエンジンを採用しています。Presto は、Facebook 社 (現在の Meta 社) が Apache Hadoop 上の大規模データウェアハウスに対してインタラクティブなクエリを実行するために設計・開発されたオープンソースのクエリエンジンです。Trino は、Presto のフォークであり、オープンソースの分散型 SQL クエリエンジンとして、Prestoと同じコードベースから派生しています。

現行最新の Athena エンジンである Athena エンジンバージョン 3 は、Trino をベースにしたクエリエンジンを提供しています。

高度なクエリ

Presto および Trino は、高度な JOIN やウィンドウ関数、ネスト構造のクエリなどに対応しており、大規模なデータを高速に処理することができます。また、メモリー上で動作するインメモリクエリエンジンであり、データパーティションにも対応しています。これにより、コストを抑えながら高速かつ効率的なデータ処理を行うことができます。

多様なデータ型のサポート

Presto および Trino は、配列や構造体など、複雑なデータ型をサポートしています。これにより、データの多様性に柔軟に対応し、さまざまなデータフォーマットに対応することができます。

多様な関数のサポート

Athena で使用される Presto および Trino は、多数の関数を備え、文字列、日付、数値などの処理をより効率的に行うことができます。また、組み込み関数に加え、ユーザー定義関数 (UDF) もサポートされており、任意の関数を定義することでより柔軟なクエリを実行できます。

Athena で扱う Presto および Trino の関数について詳しくは、「Amazon Athena の関数」をご覧ください。


Athena の料金体系

Athena の利用料金は、クエリ実行に必要なリソースの使用量に基づいて請求されます。そのため、クエリの最適化やデータ圧縮、データのパーティショニングなどを行い、必要なデータだけを取得するクエリを書くことで、Athena の利用料金を最小限に抑えることができます。

スキャンされたデータ量

Athena の利用料金は、スキャンされたデータ量に応じて発生します。スキャンされたデータ 1TB あたり 5USD が課金され、MB 単位で切り上げられます。また、最低料金は 10MB から発生します。つまり、少なくとも 10MB のデータをスキャンする場合は、10MB あたり 5USD の料金が発生します。

コスト削減

コスト削減の手段として、データの圧縮は効果的です。データ圧縮により、スキャンされるデータ量を減らすることで、結果としてクエリの実行時間やコストを削減することができます。

また、データのパーティショニングも、コスト削減のための有効な方法の 1 つです。データのパーティショニングにより、特定の列 (たとえば、日付列) を基準にデータを分割することで、必要なデータだけを取得することができます。不要なデータをスキャンする必要がなくなり、効率的なコスト削減が実現できます。

なお、CREATE TABLE など DDL ステートメントは無料で利用でき、失敗したクエリの再試行も無料で実行されます。

データスキャン量を削減してコストとクエリパフォーマンスを向上させる方法について詳しくは、「Amazon Athena のパフォーマンスチューニング Tips トップ 10」をご覧ください。

その他 Athena の利用料金について詳しくは、「Amazon Athena の料金」をご覧ください。


まとめ

最後に、本記事で紹介した機能の全体図を見てみましょう。

IMG_0145

今回紹介した機能以外にも、Athena を他のサービスと連携することで、さらに幅広い利用が可能です。たとえば、AWS Lambda で実行されるデータソースコネクタを使用して横串検索を実行したり、Apache Spark を組み合わせることでデータのクエリと処理をより高速化することができます。

その他、Athena と連携が可能な AWS サービスについては、「AWS のサービス における Athena との統合」をご覧ください。

本記事を読んで Athena に興味を持たれた方、実際に使ってみたいと思われた方は、ぜひ製品ページの「Amazon Athena」も合わせてご覧ください。

この連載記事のその他の記事はこちら

選択
  • 選択
  • 今話題のブロックチェーンをAWSで実現する仕組みをグラレコで解説 »
  • サーバーレスって何が便利なの ? AWS でサーバーレスを構築するためのサービスをグラレコで解説 »
  • 機械学習のワークフローってどうなっているの ? AWS の機械学習サービスをグラレコで解説 »
  • 外部から AWS のバックエンドサービス利用を実現する仕組みをグラレコで解説 »
  • AWS でデプロイの自動化を実現するベストプラクティスをグラレコで解説 »
  • コンテナを使ってモノリスを分割する方法をグラレコで解説 »
  • クラウドへ移行する理由とそのステップをグラレコで解説 »
  • Windows ワークロードをクラウドへ移行するためのベストプラクティスをグラレコで解説 »
  • サーバーレスのイベントバスって何 ? Amazon EventBridge をグラレコで解説 »
  • サーバーレスで SaaS を構築する方法をグラレコで解説 »
  • 「あなたへのおすすめ」はどう生成するの ? Amazon Personalize で簡単に実現する方法をグラレコで解説 »
  • クラウド設計・運用のベストプラクティス集「AWS Well-Architectedフレームワーク」をグラレコで解説 »
  • 特定の顧客セグメントにメッセージ送信。「Amazon Pinpoint」の仕組みをグラレコで解説 »
  • アプリにユーザー認証機能を簡単に追加できる「Amazon Cognito」をグラレコで解説 »
  • わずか数分で WordPress サイトを構築できる「Amazon Lightsail」をグラレコで解説 »
  • 異なるアプリケーション同士の疎結合を実現。「Amazon SQS」をグラレコで解説 »
  • Web アプリを高速に開発できる「AWS Amplify」をグラレコで解説 »
  • 機械学習の知識ゼロでもテキストデータを分析。Amazon Comprehend をグラレコで解説 »
  • ビジネスデータをまとめて可視化 & 分析。Amazon QuickSight をグラレコで解説
  • 人工衛星の地上局を 1 分単位で利用。AWS Ground Station をグラレコで解説
  • カオスエンジニアリングで本当にカオスにならないための進め方をグラレコで解説
  • GraphQL API を簡単に作成 & 運用。AWS AppSync をグラレコで解説
  • IoT 環境を必要な機能を選択するだけで構築。AWS IoT をグラレコで解説
  • 高い可用性と耐久性のオブジェクトストレージ。Amazon S3 をグラレコで解説
  • サーバーレスでイベント駆動型アプリケーションを実現。AWS Lambda をグラレコで解説
  • データサイエンス教育の強い味方。Amazon SageMaker Studio Lab をグラレコで解説
  • 高速で柔軟な NoSQL データベースサービス。Amazon DynamoDB をグラレコで解説
  • リレーショナルデータベースを簡単・迅速に実現。Amazon RDS をグラレコで解説
  • アプリのワークフローを視覚的に構成。 AWS Step Functions をグラレコで解説
  • データ保護に使う暗号化キーを一元管理。AWS KMS をグラレコで解説
  • アプリケーションへのトラフィックを効率的に負荷分散。Application Load Balancer をグラレコで解説
  • AWS で簡単にコンテナアプリケーションを構築 ! Amazon ECS をグラレコで解説
  • 大規模データセットも簡単クエリ! Amazon Athena をグラレコで解説
  • キャッシュ機能でアプリの高速化を実現 ! Amazon ElastiCache をグラレコで解説
  • 使い慣れたプログラミング言語でクラウド環境を構築 ! AWS CDK をグラレコで解説
  • ストリーミングデータを簡単にキャプチャ、処理、保存 ! Amazon Kinesis Data Streams をグラレコで解説
  • AWS で始める機械学習はじめの一歩 ! AWS の主要な AI/ML サービスをグラレコで解説
  • リレーショナルデータベースをサーバーレス化 ! Amazon Aurora Serverless をグラレコで解説
  • ML 駆動の検索エンジンで企業の情報管理を革新! Amazon Kendra をグラレコで解説
  • オンプレミス、エッジ、どこでも楽々コンテナ管理 ! Amazon EKS Anywhere をグラレコで解説

builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

米倉 裕基
アマゾン ウェブ サービス ジャパン合同会社
テクニカルライター・イラストレーター

日英テクニカルライター・イラストレーター・ドキュメントエンジニアとして、各種エンジニア向け技術文書の制作を行ってきました。
趣味は娘に隠れてホラーゲームをプレイすることと、暗号通貨自動取引ボットの開発です。
現在、AWS や機械学習、ブロックチェーン関連の資格取得に向け勉強中です。

監修者プロフィール

林田 千瑛 (はやしだ ちえ)
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト

AWS Glue、AWS Lake Formation、Amazon EMR、Amazon Athena を中心に、日本及び海外のお客様向けにソリューション提案支援及び開発チームへのフィードバック対応を行っている。データ活用をはじめたいといったご相談から、技術的なサポートまで、お客様に寄り添ったご支援をモットーとしている。

さらに最新記事・デベロッパー向けイベントを検索

下記の項目で絞り込む
1

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する