ファイルアップロードからS3/Athena 利用へのベストプラクティス | 'Upload a file' to S3/Athena - Best Practice | Japanese

本記事では、Amazon QuickSight の SPICE (Super-fast, Parallel, In-memory Calculation Engine) に直接ファイルをアップロードされている方に、Amazon S3 や Amazon Athena を利用するメリットをお伝えし、それぞれの特徴を考慮したベストプラクティスを紹介します。

1. ファイルの直接アップロード

手持ちのファイルをすぐに可視化、分析したい場合、「データセットの作成」で「ファイルのアップロード」を選択することで、簡単に SPICE にインポートされたファイルのデータセットが作成できます。

1-1. ファイル直接アップロードの課題

本方式にて手軽に可視化を行うことができますが、利用を続けていく上で、以下のような課題が生じます。

  • QuickSight コンソールから SPICE に直接アップロードしたファイルを更新したい場合、ファイルを再度アップロードする必要があり、ファイル更新に手間がかかります。
  • ファイル直接アップロードで作成されたデータセットは、DescriveDataSet API(AWS CLI コマンドは descrive-data-set) を使いその定義内容を出力することができません。そのため、
    • データセットを別の環境に移行したい場合は、新たに手動でファイルをアップロードし、計算フィールド、データタイプの変更、マップ用階層設定等のデータセット変更内容を再度設定し直す必要があります。
    • 定義変更を QuickSight コンソールからではなく、API/CLI で実施することができません。

2. S3 を利用する

S3 バケット上にファイルを置き、データソース S3 にてデータセットを作成することにより、SPICE にファイルをインポートすることが可能です。S3 へのファイル保管は、手動によるアップロードの他に、各種 AWS サービスや外部システムと連携することが可能であり、データ連携のパイプラインを構築することができます。

2-1. S3 データセットの作成手順

S3 へのアクセス許可を設定

QuickSight から 該当 S3 へのアクセス許可を設定する必要があります。
QuickSight 管理者画面「セキュリティとアクセス許可」より、QuickSihgt の AWS サービスへのアクセス画面を呼び出し、Amazon S3 をチェックします。

アップロードファイルを保存する S3 バケットにチェックを付け、「完了」を選択します。

もし、他の AWS アカウントが所有者の S3 バケットを使用する場合は、「 AWS 全体でアクセスできる S3 バケット」を選択し、S3 バケット名を入力します。S3 には予め自身のアカウントからのアクセス権が付与されている必要があります。

本操作により、QuickSight から該当 S3 バケットへのアクセス許可が設定されます。

S3 データソースによるデータセット作成

「データセットの作成」において、データソース「S3」を選択し、「データソース名」と、「マニフェストファイルのアップロード」にマニフェストファイルのパスを指定します。マニフェストファイルとは、利用するデータが S3 上のどこにあるかを明記したファイルで、詳細は以下のセクションで説明します。

「マニフェストファイルのアップロード」は、 S3 上にマニフェストファイルを置いて URL を指定する方法と、直接ローカルにあるマニフェストファイルをアップロードする方法がありますが、マニュアル運用を回避し、管理や移植を簡単に実施できるようにするために、S3 上にマニフェストファイルを置いて URL を指定する方法を推奨します。

マニフェストファイル

マニフェストファイルは、JSON 形式で S3 上にあるファイルのパスや、フォルダ (プレフィックス)、インポート設定を記載します。

同一スキーマのファイルであれば、URIsURIPrefixes にて指定したファイルの内容は全て、同一データセットに取り込むことが可能です。URIs, URIPrefixes は混在指定可能であり、SPICE にインポートするファイル数の合計は、上限 1,000 ファイル です。その他 SPICE のクォータに関しては、ドキュメントを参照してください。

以下、マニフェストファイルの記載例を記します。左図にある 4 つの CSV ファイルは、同一スキーマの場合、全て同一データセットに取り込むことが可能です。

データセット作成の完了

「データソース名」およびマニフェストファイルの指定が完了し、読み込むデータが特定化されると、以下のような画面が表示されます。
「視覚化する」を選択するとデータセットが作成され、SPICE へのファイルインポートが開始され、分析の画面に移行します。SPICE にインポートする前に、ファイルの内容をプレビュー、データタイプ等の編集を行いたい場合は、「データの編集/プレビュー」を選択してください。

2-2. ファイル直接アップロードの課題に対するソリューション

ここでは、S3 を利用することにより、『1. ファイル直接アップロード』に記載した課題が、どのように解決できるかを説明します。

データ更新の自動化を実現

S3 データソースは、データセット更新をスケジュールに基づき実行可能となるため、運用の自動化を実現することができます。スケジュールは以下が設定可能です。

  • SPICE 更新タイプ : Full refresh (フル更新)
  • SPICE 更新頻度 : [Hourly (毎時)][Daily (毎日)][Weekly (毎週)][Monthly (毎月)]

なお、QuickSight コンソールを使ったスケジュール更新以外に、API/CLI によりデータセットを更新する方法があります。詳細は、『応用例: API /CLI 活用による SPICE データセットの更新』を参照してください。

データセットの定義を出力可能

S3 データソースは、データセットの定義を JSON 形式のファイルとして出力することが可能であり、他環境への移行を自動化することができます。また、コードによるデータ定義変更や接続変更が可能となるため、運用の簡素化も実現できます。
使用する API/CLI は、以下の通りです。QuickSight コンソールで指定した内容が JSON 形式で出力できます。

出力した JSON 定義を編集し、以下の API/CLI を使用することにより、データソース、データセットの新規作成・更新が可能です。

なお、他環境へ移行したい場合は、別途用意されている API/CLI を使用することにより、さらにエクスポート・インポートが容易になっています。詳細は、ハンズオン『Amazon QuickSight - Visualization Basics (Japanese)』の『作成したダッシュボードを別環境に移行する』を参照してください。

2-3. S3 利用の課題

データソース S3 を利用することで効率的に可視化を行うことができますが、以下のような課題が生じます。

  • QuickSight コンソールにおけるスケジュール更新では、フル更新は最小 1 時間毎のため、毎時よりも短いサイクルでのデータ更新ニーズに応えられません。
  • 更新内容は微小であっても毎回フル更新が必要なため、ファイル数増加や、サイズ増加により更新に時間がかかります。
  • 例えば、更新ファイルが 30 分単位で S3 に格納され、1 ヶ月分のデータを 1 つのデータセットに格納したい場合、1,000ファイルを超えてしまうため、1 つのマニフェストファイルで扱うことができません。
  • 異なるスキーマのファイルを 1 つのデータセットで定義したい場合に、連結 (Union) を使うことができません。

3. Athena を利用する

Athena は、標準的な SQL を使用して S3 内のデータを直接分析することを容易にするインタラクティブなクエリサービスです。S3 上のデータを Glue Data Catalog に表として登録することにより、S3 にある実体ファイルに対して、SQLによるクエリを実行することが可能です。QuickSight にてデータソース Athena のデータセットを作成した場合、クエリ結果を SPICE にロードする他に、SPICE を利用せず直接クエリ (ダイレクトクエリ) を利用することが可能です。ダイレクトクエリは、リアルタイムにファイルの中身を参照したい場合において、有効な手段です。

Athena では様々なファイル形式、圧縮形式に対応しており、他の AWS サービスや外部システムとの連携において、効率的なデータ連携を行うことが可能となっています。詳細はドキュメントを参照してください。

3-1. Athena データセットの作成手順

Athena, S3 へのアクセス許可を設定

QuickSight から Athena 、および S3 へのアクセス許可を設定する必要があります。
QuickSight 管理者画面「セキュリティとアクセス許可」より、QuickSight の AWS サービスへのアクセス画面を呼び出し、Amazon Athena をチェックします。

アップロードファイルを保存する S3 バケットにチェックを付け、完了を選択します。

本操作により、QuickSight から Athena、および該当 S3 バケットへのアクセス許可が設定されます。

Athena によるデータベース、テーブル作成

Athena のクエリエディタを起動し、データベース、テーブルを作成します。

作成手順は、ハンズオン「Amazon QuickSight - Visualization Basics (Japanese)」の「大規模データをAthena経由で可視化する」を参照してください。

Athena データソースによるデータセット作成

「データセットの作成」において、データソース「Athena」を選択し、「データソース名」と、「Athena ワークグループ」を指定し、「データソースを作成」を選択します。なお、Athena ワークグループは、管理者から指定されていない場合、デフォルトの primary を選択してください。

カタログ、データベース、テーブルを選択します。

データセット作成の完了

「迅速な分析のために SPICE へインポート」、もしくは「データクエリを直接実行」(ダイレクトクエリ) を選択し、「Visualize」を選択するとデータセットが作成されます。データセット作成前にデーブルの内容をプレビュー、データタイプ等の編集を行いたい場合は、「データの編集/プレビュー」を選択してください。

3-2. S3 利用の課題に対するソリューション

ここでは、Athena を利用することにより、『2. S3を利用する』に記載した課題が、どのように解決できるかを説明します。

ダイレクトクエリによりファイルのリアルタイム参照が可能に

データソース Athena のデータセットを作成した場合、SPICE を利用せず直接クエリ (ダイレクトクエリ) を利用することが可能です。ダイレクトクエリは、SPICE にいったんインポートする操作が不要なので、リアルタイムにファイルのデータを参照することができます。

SPICE データセットで増分のみの更新が可能に

Enterprise Edition において、データセットの増分更新を行うことが可能です。増分更新は、指定されたルックバック期間内に行われたデータセットへの挿入、削除、および変更のすべてをデータソースからデータセットへ転送します。現在 SPICE 内にあるデータでその期間内にあてはまるものは削除され、更新されたデータに置き換えられます。これにより更新するサイズを最小限に抑えることができ、更新時間短縮が可能です。データセットの増分更新は、フル更新とは別にスケジュール定義することができます。増分更新のスケジュールはフル更新に比べより短い間隔での更新が定義可能となっています。データセット増分更新の設定手順は、ドキュメントを参照してください。

  • SPICE 更新タイプ : Incremental refresh (増分更新)
  • SPICE 更新頻度 :[Every 15 minutes (15 分ごと)][Every 30 minutes (30 分ごと)][Hourly (毎時)][Daily (毎日)][Weekly (毎週)][Monthly (毎月)]

なお、当スケジュールによる更新において課題が発生する場合、API/CLI を利用することで柔軟に対処できることがあります。詳細は、応用例を参照下さい。

異なるスキーマのファイルや、1,000超ファイルの連結による 1 データセット作成が可能に

S3 上にある異なるスキーマのファイルや、1,000を超えるファイルを連結し、同一データセットとして扱いたい場合、Athena を利用することで柔軟な指定が可能です。QuickSight コンソールでは、Union を容易に実現することができませんが、Athena を利用することで Union を使ったファイル連結が可能です。
代表的な方法として、以下 2 通りの方法を紹介します。

① Athena 上に Union したビューを作成し、QuickSight からそのビューを参照する

Athena 上で、異なるスキーマのファイルが置かれたフォルダ毎にテーブル (order01, order02) を作成し、それぞれのテーブル共通にある取り込みたいカラムを指定し、連結するビュー (order_view) を作成します。データセットには作成したビューを指定することで、連結した結果を取得することが可能です。

QuickSight のデータセットは変更せず、Athena 上でテーブル追加、ビューの更新等を実施していきたい場合、本方式が有効です。

Athenaにてビューを作成した後、データセットのテーブル指定で作成したビューを指定、データセット作成します。以降の手順は『3-1. Athnea データセットの作成』の『データセット作成の完了』を参照してください。

② Union を QuickSight 上のカスタム SQL で実現する

Athena 上で、異なるスキーマのファイルが置かれたフォルダ毎にテーブル (order01, order02) を作成し、データセットのカスタム SQL にて、それぞれのテーブル共通にある取り込みたいカラムを指定し、連結する SQL を記載します。これによりデータセットからは連結した結果を取得することが可能です。

QuickSight の分析、ダッシュボード変更に合わせ、欲しいデータカラムやレコードをデータセットにて更新したい場合、本方式が有効です。

カスタム SQL を作成する場合、テーブルを選択して「カスタム SQL を使用」を選択します。

カスタム SQL 名、カスタムSQL を入力し、データセット作成します。以降の手順は『3-1. Athnea データセットの作成』の『データセット作成の完了』を参照してください。

4. 各データソースのまとめ

ファイルの直接アップロード、Amazon S3 の利用、 Amazon Athena の利用に関して、ここまで紹介してきた特徴、課題、課題に対するソリューションをまとめます。

  • ファイルの直接アップロードでダッシュボードの作成が完了し、本番への導入を検討する時は、S3 や Athena を利用する方向で検討を始めましょう。
  • Athena を利用すると、様々な要件に対し柔軟に対応することができますが、その分コストも発生します。ダッシュボードやそのデータの利用要件などを確認しながら、適切なデータソースを選択しましょう。

*1 Incremental refresh (増分更新)は、Enterprise Edition のみ選択可能です。
*2 Hourly (毎時) は、Enterprise Edition のみ選択可能です。
*3 Every 15 minutes (15 分ごと)、Every 30 minutes (30 分ごと) は、SPICE 更新タイプが Incremental refresh (増分更新) のときのみ選択可能です。
*4 最新料金はAWS公式サイト(SPICES3Athena) を参照してください。

応用例: API /CLI 活用による SPICE データセットの更新

スケジュールに基づくデータセット更新では解決できない課題として、以下のようなケースが挙げられます。

  • データソースの更新頻度は定期的ではないが、更新発生時は即データセット更新を行いたい場合
  • データセット更新は、データパイプライン処理の結果により制御したい場合
  • データセットに親子関係があり、親のデータセット更新完了後、自動的に子のデータセットも更新したい場合

このような課題に対しては、CreateIngestion API (AWS CLI コマンドは create-ingestion) を活用することで、ニーズに合わせ柔軟な対応を実装することが可能です。CreateIngestion APIは、フル更新でも 1 時間単位ではなく短いサイクルで更新することが可能ですが、使用できる回数に制限があります。Enterprise Edition アカウント内のデータセットにて 24 時間内に 32 回更新、Standard Edition アカウント内のデータセットでは 24 時間内に 8 回更新が上限です。

また、AWS Step Functions、Amazon EventBridge、AWS Lambda を活用し、SPICE の更新に失敗したデータセットを自動的に再インポートする方法がブログで紹介されています。こちらも参考にしてください。

AWSブログ Amazon QuickSight による更新失敗したデータセットの再インポート自動化

1 Like