[初心者向け] S3 に保存されたファイルを Amazon QuickSight の SPICE へ取り込む方法についてまとめてみた

2023.04.06

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

アノテーション、テクニカルサポートチームの村上です。

最近は、仕事でもプライベートでも Amazon QuickSight に向き合う時間が多くなっています。前職で IT 営業をしていた時も含め、BI ツールはほとんど使ったことがなかったので、各種機能を手探りで試している状態です。
Amazon QuickSight を初めて使う場合、まずは S3 にファイルを配置し、それを Amazon QuickSight のインメモリエンジン(SPICE)に取り込んでみることが多いと思います。そこで、手順をまとめてみました。
私自身、マニュフェストファイルを利用してのファイル指定は少し戸惑ったので、参考にしていただければ幸いです。

下準備

1. S3 の作成

バケット名:quicksighttestdata20230402
リージョン:東京 (ap-northeast-1)
上記のように、データファイルを格納する S3 を作成しました。

2. 2 つの CSV ファイルを作成し S3 へアップロード

CSV ファイルの作成にあたり、ChatGPT にサンプルデータを用意してもらいました。


フィットネスジムの入会会員レコードを 2 つの CSV ファイルに分けて、フォルダ memberlist に格納しフォルダごと S3 へアップロードします。
なお、フォルダごと S3 にアップロードしても、S3 内の実際のデータには階層構造がありません。ユーザーの利便性のために、フォルダがあるように見せています。
フォルダを使用して Amazon S3 コンソールでオブジェクトを整理する

Amazon S3 はフラットな構造であり、ファイルシステムに見られる階層はありません。ただし、構造を分かりやすくするため、Amazon S3 コンソールでは、オブジェクトのグループ化の方法としてフォルダの概念をサポートしています。

3. Amazon QuickSight へ S3 へのアクセス権を付与する

まだ、Amazon QuickSight から S3 への接続権限がないため、Amazon QuickSight 内の設定で S3 に対してアクセス権限を付与する必要があります。

1. Amazon QuickSight 内で、[Manage QuickSight (QuickSight の管理)] を選択します。

2. 画面左にあるメニューの中から[Security & permissions (セキュリティとアクセス権限)] を選択した後に、[管理] を押下します。

3. 次画面で、「S3 バケットを選択する」を押下するとダイアログボックスが開くので、QuickSight からアクセスを許可する S3 バケットにチェックを入れます。

4. Amazon S3 のチェックボックスにチェックが入っているのを確認して、画面下部にある「保存」を押下します。

Amazon S3 に接続できない

これで、Amazon QuickSight から S3 バケット quicksighttestdata20230402 へアクセスできるようになりました。
以上で、下準備は終わりです。お疲れ様でした!

マニュフェストファイルを作成してみた

Amazon QuickSight のインメモリエンジン(SPICE)へ S3 内のファイルを取り込むにあたり、マニュフェストファイルの作成が必要となります。
マニュフェストファイルの記述内容により、S3 内のどのファイルを SPICE へ取り込むか指定することができます。
本記事では、3 つのマニフェストファイルを準備し、SPICE へ取り込むファイル指定範囲を変更してみます。

1. ファイルの URI を直接指定する記述方法

SPICE へアップロードするファイルの URI を
s3://quicksighttestdata20230402/memberlist/20230402member.csv
と直接指定する場合、マニュフェストファイルへの記述は以下のようになります。

<ファイル名 manifest01.json>

{
    "fileLocations": [
        {
            "URIs": [
                "s3://quicksighttestdata20230402/memberlist/20230402member.csv"
            ]
        }
    ],
    "globalUploadSettings": {
        "format": "CSV",
        "delimiter": ",",
        "containsHeader": "true"
    }
}

複数のファイルの URI を、"URIs": [ ] 内に記述することも可能です。

2. フォルダを URI プレフィックス形式で指定する記述方法

SPICE へアップロードするファイルを
s3://quicksighttestdata20230402/memberlist/
とフォルダの URI プレフィックス形式で指定する場合、マニュフェストファイルへの記述は以下のようになります。

<ファイル名 manifest02.json>

{
    "fileLocations": [
        {
            "URIPrefixes": [
                "s3://quicksighttestdata20230402/memberlist/"
            ]
        }
    ],
    "globalUploadSettings": {
        "format": "CSV",
        "delimiter": ",",
        "containsHeader": "true"
    }
}

上記の指定方法を使うと、フォルダ memberlist 内にある 2 つのファイル(20230402member.csv と 20230403member.csv)を同時に取り込むことができます。

3. バケットを URI プレフィックス形式で指定する記述方法

SPICE へアップロードするファイルを
s3://quicksighttestdata20230402/
とバケットの URI プレフィックス形式で指定する場合、マニュフェストファイルへの記述は以下のようになります。

<ファイル名 manifest03.json>

{
    "fileLocations": [
        {
            "URIPrefixes": [
                "s3://quicksighttestdata20230402/"
            ]
        }
    ],
    "globalUploadSettings": {
        "format": "CSV",
        "delimiter": ",",
        "containsHeader": "true"
    }
}

上記の指定方法を使うと、S3 バケット quicksighttestdata20230402 内にある全ファイルを指定することが可能です。

なお、URI 形式と URI プレフィックス形式については、複数の書き方があるため、下記 AWS ドキュメントの記載例からお好きな形式を選択いただければと思います。
Amazon QuickSight 用のマニフェストファイル形式

S3 に保存されたファイルを SPICE へ取り込んでみた

1. CSV ファイルの URI を直接指定するマニュフェストファイルを利用した場合

1. Amazon QuickSight 内の左メニューから、「データセット」を選択し、画面右上の「新しいデータセット」ボタンを押下します。
   2. S3 を選択します。

3. データソース名には任意の名前を入力します。
今回は、マニュフェストファイルをローカルからアップロードしましたが、S3 上に保存してオブジェクト URL で指定することもできます。

4. データの取り込みに成功したので、プレビューで取り込んだレコードを確認してみます。

5. CSV ファイル「20230402member.csv」に含まれる 4 つのレコードが SPICE に正常に取り込まれたことを確認できました。

2. フォルダを URI プレフィックス形式で指定したマニュフェストファイルを利用した場合

次に、マニフェストファイルでフォルダを URI プレフィックス形式で指定する方法を使用して、memberlist フォルダ内の 2 つのファイル(20230402member.csv と 20230403member.csv)を SPICE に取り込んでみます。

2 つのファイル(20230402member.csv と 20230403member.csv)から、それぞれ 4 つのレコードを取り込み、計 8 つのレコードの取り込みに成功しました。

3. バケットを URI プレフィックス形式で指定したマニュフェストファイルを利用した場合

S3 バケット内の全ファイルを指定する方法を試す前に、新しいフォルダ memberlist02 を作成し、そこに 4 つのレコードを持つ CSV ファイル 20230404member.csv を格納しました。これにより、ファイルの取り込み範囲をバケット全体に設定した場合、フォルダ memberlist 内の 8 つのレコードとフォルダ memberlist02 内の 4 つのレコードを合わせて、計 12 レコードが SPICE に取り込まれるはずです。

指定した manifest03.json は、バケット全体をファイルの取り込み範囲に指定しているマニュフェストファイルです。

フォルダ memberlist 内の 8 つのレコードとフォルダ memberlist02 内の 4 つのレコードを合わせた計 12 レコードが SPICE に取り込まれました。

※複数の CSV ファイルを取り込む場合は、全ての CSV ファイルで共通のカラムを利用していることが前提となります。

まとめ

Amazon QuickSight を使い始めた当初は、マニュフェストファイルを使ったファイル指定が難しいように感じましたが、何度か試してみると非常に便利な方法であることが分かりました。ぜひ、複数の範囲指定を試してみてください。

この記事がどなたかのお役に立てば幸いです。

参考資料