この記事は、「AWS Advent Calendar 2023」の11日目の記事です。
昨日は@mirimiripcさんによるAWS タグエディタを使って使用中のすべてのリソースを発掘してみるでした。
Amazon S3 Express One ZoneのデータをAmazon Athenaで空間検索してQGISで可視化してみました
以前、S3 Standardで検証した記事を投稿しました。今回はre:Invent 2023で発表された新しいS3 Express One Zoneで検証しました。S3 Express One Zoneを利用した時のAthenaとの連携・Geospatialな空間検索・検索速度の向上などに焦点を当ててその結果を紹介します!
S3 Express One Zoneは、高パフォーマンスを重視したAmazon S3のストレージオプションです。このオプションは東京リージョンでも利用可能で、S3 Standardストレージクラスと比較して最大10倍の優れたパフォーマンスを提供する設計になっています。また、リクエスト料金はS3 Standardよりも50%削減されています。このサービスを利用するには、「ディレクトリバケット」と呼ばれる特定のバケットタイプを利用します。
事前準備
Amazon Athenaで利用するGISデータを準備します。今回は事前にQGISで4種類のサンプルデータを作成しました。
ポイント・ライン・ポリゴンのGISデータをそれぞれCSV(TSV形式)で準備しました。
追加で100万ポイントのGISデータをCSV(TSV形式)で準備しました。
今回のサンプルデータをGitHubに登録したのでぜひご利用ください。
バケット作成 & データ登録 (S3 Express One Zone)
Amazon S3 Express One Zoneでバケット作成とデータ登録します。
リージョン・バケットタイプをディレクトリ・アベイラビリティーゾーン・ベース名を設定。
今回は4種類のCSV(TSV形式)を任意の名称でディレクトリバケットに保存しました。
これでS3 Express One Zoneのデータ登録は完了です!
クエリ保存先を設定
Amazon Athenaでクエリ保存先を設定します。
これでクエリ保存先の設定は完了です!
テーブル作成
Amazon Athenaでテーブルを作成します。
Athenaのエディタ → テーブルとビュー作成 → 「S3バケットデータ」をクリック。
テーブル名・データベース選択・対象のS3バケット指定・データ形式・カラム設定。プレビュー確認 → 「テーブルを作成」をクリック。
S3 Express One Zoneのバケットは、現状で一覧に表示されないので直接アドレスを入力する必要があります。アドレスの頭は「s3://」で指定します。
今回は4つの任意のテーブルを作成しました。対象のテーブル → 「テーブルをプレビュー」をクリック。
これでテーブルの作成は完了です!S3 Express One Zoneでも問題なくAthenaで読み込めることが確認できました。
空間検索
最後に、Amazon AthenaでGeospatialな空間検索を実行します。
ポリゴンから重心のポイントを取得してみます。結果データをダウンロードします。
S3 Standard
キュー内の時間: 0.243秒、実行時間: 0.799秒、データ: 1.5KB
S3 Express One Zone
キュー内の時間: 0.120秒、実行時間: 0.899秒、データ: 1.5KB
SELECT "geospatial_database"."polygon_table"."name", ST_Centroid(ST_GeometryFromText("geospatial_database"."polygon_table"."wkt")) FROM "geospatial_database"."polygon_table";
ダウンロードしたデータをQGISで可視化すると処理結果データを表示確認できます。
ラインから始点のポイントを取得してみます。結果データをダウンロードします。
S3 Standard
キュー内の時間: 0.175秒、実行時間: 0.601秒、データ: 1.05KB
S3 Express One Zone
キュー内の時間: 0.119秒、実行時間: 0.948秒、データ: 1.05KB
SELECT "geospatial_database"."line_table"."name", ST_StartPoint(ST_GeometryFromText("geospatial_database"."line_table"."wkt")) FROM "geospatial_database"."line_table";
ダウンロードしたデータをQGISで可視化すると処理結果データを表示確認できます。
ポリゴン内に含まれるポイントのみを取得してみます。結果データをダウンロードします。
S3 Standard
キュー内の時間: 0.313秒、実行時間: 1.230秒、データ: 2.01KB
S3 Express One Zone
キュー内の時間: 0.073秒、実行時間: 0.993秒、データ: 2.01KB
SELECT "geospatial_database"."point_table"."name", "geospatial_database"."point_table"."wkt" FROM "geospatial_database"."point_table", "geospatial_database"."polygon_table" WHERE ST_Within(ST_GeometryFromText("geospatial_database"."point_table"."wkt"), ST_GeometryFromText("geospatial_database"."polygon_table"."wkt"));
ダウンロードしたデータをQGISで可視化すると処理結果データを表示確認できます。
100万件のポリゴン内に含まれるポイントのみを取得してみます。大量GISデータの検索でも高速にレスポンスされました。結果データをダウンロードします。
S3 Standard
キュー内の時間: 0.220秒、実行時間: 2.832秒、データ: 46.41MB
S3 Express One Zone
キュー内の時間: 0.117秒、実行時間: 2.843秒、データ: 46.41MB
SELECT "geospatial_database"."randompoint_table"."name", "geospatial_database"."randompoint_table"."wkt" FROM "geospatial_database"."randompoint_table", "geospatial_database"."polygon_table" WHERE ST_Within(ST_GeometryFromText("geospatial_database"."randompoint_table"."wkt"), ST_GeometryFromText("geospatial_database"."polygon_table"."wkt"));
ダウンロードしたデータをQGISで可視化すると処理結果データを表示確認できます。
Amazon Athenaを利用することでS3に登録したデータを空間検索することが可能になります!
今回の検証で、S3 Express One Zoneを利用した場合でも、Athenaとの連携やGeospatialな空間検索が実現可能であることが確認できました。
空間検索については、一部の検索で120%以上のパフォーマンス向上がありましたが、全体としては大きな速度向上は確認できませんでした。これは、S3 Express One Zoneが小さいサイズの多数のファイル処理に特化しているため、今回の検証で利用した大規模な空間検索データには適していない可能性があります。
ただ、ストレージコストの削減という点ではS3 Express One Zoneを利用することに大きな利点があると思いました!
Amazon AthenaとAmazon S3とQGISについて、他にも記事を書いています。よろしければぜひ
tags - QGIS
tags - Amazon S3
tags - Amazon Athena
やってみたシリーズ
tags - Try