Amazon QuickSightのSPICEへのデータ取り込みをAPI(AWS CLI)からやってみる
こんにちは、CX事業本部 IoT事業部の若槻です。
Amazon QuickSightでは、Datasetへのデータソース(AthenaやS3 Bucketなど)からのデータ取り込み(Ingestion)方式として、分析時に毎回直接クエリする方式の他に、SPICEにインポートする方式を選択できます。
SPICEとはSuper-fast, Parallel, In-memory Calculation Engine
の略で、データソースから取り込まれたデータがメモリ上で再利用されるため、直接クエリする場合に比べて分析時に高速にデータを読み込み可能となります。
このSPICE上のデータのリフレッシュ(フルまたは増分でのデータ取り込み)は、手動またはスケジュールで実施が可能です。
そして手動リフレッシュの場合は、データソースの更新をフックにして自動でLambdaやStep FunctionsからAPI経由で行いたい場合がありそうですね。
そこで今回は、Amazon QuickSightのSPICEのデータ取り込み(ingestion)をAPI(AWS CLI)から手動で実行する方法を確認してみました。
やってみた
AWS CLIコマンドの確認
AWS CLIのドキュメントを見ると、Datasetへのデータの取り込み(ingestion)を操作するコマンドは以下の4つがあります。
- create-ingestion
- cancel-ingestion
- describe-ingestion
- list-ingestions
データのingestionはcreate-ingestionコマンドを使えば良いらしい。(1日毎のリフレッシュ回数に上限があることに注意)
Creates and starts a new SPICE ingestion for a dataset. You can manually refresh datasets in an Enterprise edition account 32 times in a 24-hour period. You can manually refresh datasets in a Standard edition account 8 times in a 24-hour period. Each 24-hour period is measured starting 24 hours before the current date and time.
コマンドのSynopsisは下記とのこと。--data-set-id
や--aws-account-id
は分かるが、--ingestion-id
というのがよく分からない。
create-ingestion --data-set-id <value> --ingestion-id <value> --aws-account-id <value> [--ingestion-type <value>] [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
そこでlist-ingestionsコマンドを実行してみると、ingestionの履歴が取得できました。IngestionIdはユニークな値を指定すれば良さそうですね。
$ aws quicksight list-ingestions \ --data-set-id ${DATA_SET_ID} \ --aws-account-id ${AWS_ACCOUNT_ID} { "Ingestions": [ { "Arn": "arn:aws:quicksight:ap-northeast-1:XXXXXXXXXXXX:dataset/quickSightAthenaDataSet/ingestion/c5e41e60-a944-44cd-9881-db9246bc85c2", "IngestionId": "c5e41e60-a944-44cd-9881-db9246bc85c2", "IngestionStatus": "COMPLETED", "ErrorInfo": {}, "RowInfo": { "RowsIngested": 5, "RowsDropped": 0, "TotalRowsInDataset": 5 }, "CreatedTime": "2022-08-18T01:42:15.562000+09:00", "IngestionTimeInSeconds": 19, "IngestionSizeInBytes": 363, "RequestSource": "MANUAL", "RequestType": "FULL_REFRESH" }, { "Arn": "arn:aws:quicksight:ap-northeast-1:XXXXXXXXXXXX:dataset/quickSightAthenaDataSet/ingestion/4bbfe54c-1ac0-4c57-bd94-235d5c11e05a", "IngestionId": "4bbfe54c-1ac0-4c57-bd94-235d5c11e05a", "IngestionStatus": "COMPLETED", "ErrorInfo": {}, "RowInfo": { "RowsIngested": 5, "RowsDropped": 0, "TotalRowsInDataset": 5 }, "CreatedTime": "2022-08-18T01:41:57.388000+09:00", "IngestionTimeInSeconds": 19, "IngestionSizeInBytes": 363, "RequestSource": "MANUAL", "RequestType": "FULL_REFRESH" }, { "Arn": "arn:aws:quicksight:ap-northeast-1:XXXXXXXXXXXX:dataset/quickSightAthenaDataSet/ingestion/3d77beaf-9efd-4c10-8763-870b207d1f1e", "IngestionId": "3d77beaf-9efd-4c10-8763-870b207d1f1e", "IngestionStatus": "COMPLETED", "ErrorInfo": {}, "RowInfo": { "RowsIngested": 0, "RowsDropped": 0, "TotalRowsInDataset": 0 }, "CreatedTime": "2022-08-18T01:08:09.015000+09:00", "IngestionTimeInSeconds": 47, "IngestionSizeInBytes": 0, "RequestSource": "MANUAL", "RequestType": "EDIT" }, { "Arn": "arn:aws:quicksight:ap-northeast-1:XXXXXXXXXXXX:dataset/quickSightAthenaDataSet/ingestion/35b6efee-0f77-49b7-b95f-352ff7d861e2", "IngestionId": "35b6efee-0f77-49b7-b95f-352ff7d861e2", "IngestionStatus": "COMPLETED", "ErrorInfo": {}, "RowInfo": { "RowsIngested": 0, "RowsDropped": 0, "TotalRowsInDataset": 0 }, "CreatedTime": "2022-08-17T23:35:27.752000+09:00", "IngestionTimeInSeconds": 17, "IngestionSizeInBytes": 0, "RequestSource": "MANUAL", "RequestType": "INITIAL_INGESTION" } ], "Status": 200, "RequestId": "9f8b1faa-5efb-4296-99e6-a868e2bb66a8" }
ingestionしてみる
現在、SPICEに取り込まれているレコード数は5
です。
データソースはAthena(S3 Bucket)なので、対象のBucketにデータ(3レコード)を追加します。
aws s3 cp data2.json s3://${BUCKET_NAME}/data/data2.json
create-ingestion
コマンドを実行すると、"IngestionStatus": "INITIALIZED"
となりingestionが開始されたようです。
$ ingestionId=$(date +%s) $ aws quicksight create-ingestion \ --data-set-id ${DATA_SET_ID} \ --ingestion-id ${ingestionId} \ --aws-account-id ${AWS_ACCOUNT_ID} { "Status": 201, "Arn": "arn:aws:quicksight:ap-northeast-1:XXXXXXXXXXXX:dataset/quickSightAthenaDataSet/ingestion/1660833098", "IngestionId": "1660833098", "IngestionStatus": "INITIALIZED", "RequestId": "46dd624f-ef33-40c1-9b19-33cbf8b3c2e0" }
コンソールからDatasetの詳細を見ると、2分前にリフレッシュが行われ、レコード数が8
に増えています!増分取り込みがちゃんと行われていますね。
おわりに
Amazon QuickSightのSPICEのデータ取り込みをAPI(AWS CLI)から手動で行う方法を確認してみました。
SPICEについてあまり詳しく調べたことが無かったので、データの取り込み(ingestion)の履歴の概念など勉強になりました。
余談ですが、SPICEはADMINコンソールからワンクリックで追加容量を購入できちゃうんですね。間違えて1GB分買っちゃいました。禊としてQuickSightのブログをもう何本か書こうと思います。
参考
以上