この記事は、「AWS Advent Calendar 2023」の11日目の記事です。
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のリポジトリにあるのでぜひご利用ください。
sample data
バケット作成 & データ登録 (S3 Express One Zone)
Amazon S3 Express One Zoneでバケット作成とデータ登録します。
AWSマネジメントコンソール → S3をクリック。
「バケットを作成」をクリック。
リージョン・バケットタイプをディレクトリ・アベイラビリティーゾーン・ベース名を設定。
指定名称のバケットが作成されます。
対象のバケットを選択 → 「アップロード」をクリック。
登録したいファイルを選択 → 「アップロード」をクリック。
アップロードされたファイルを確認。
今回は4種類のCSV(TSV形式)を任意の名称でディレクトリバケットに保存しました。
これでS3 Express One Zoneのデータ登録は完了です!
クエリ保存先を設定
Amazon Athenaでクエリ保存先を設定します。
事前に任意の名称でクエリ保存先のS3バケットを準備します。
AWSマネジメントコンソール → Athenaをクリック。
「クエリエディタを起動」をクリック。
「設定」をクリック。
「管理」をクリック。
クエリ保存先のS3バケットを指定 → 「保存」をクリック。
クエリの保存先が設定される。
これでクエリ保存先の設定は完了です!
テーブル作成
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で可視化すると処理結果データを表示確認できます。
AthenaでS3 Express One Zoneに登録したデータを空間検索することができました!
今回の検証で、S3 Express One Zoneを利用した場合でも、Athenaとの連携やGeospatialな空間検索が実現可能であることが確認できました。
空間検索については、一部の検索で120%以上のパフォーマンス向上がありましたが、全体としては大きな速度向上は確認できませんでした。これは、S3 Express One Zoneが小さいサイズの多数のファイル処理に特化しているため、今回の検証で利用した大規模な空間検索データには適していない可能性があります。
ただ、ストレージコストの削減という点ではS3 Express One Zoneを利用することに大きな利点があると思いました!
Amazon AthenaとAmazon S3とQGISについて、他にも記事を書いています。よろしければぜひ。
tags - Amazon Athena
tags - Amazon S3
tags - QGIS
- 参考文献
Amazon Athena
Amazon S3
QGIS