この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、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のブログをもう何本か書こうと思います。
参考
以上