[アップデート]Amazon AthenaでS3 Glacierの復元されたデータにクエリできるようになりました

Athenaから復元されたGlacier Flexible RetrievalとGlacier Deep Archiveへクエリできるようになりました
2023.06.30

データアナリティクス事業本部インテグレーション部コンサルティングチーム・新納(にいの)です。

2023/6/29、Amazon Athenaのアップデートが発表されました。S3 Glacierの復元されたオブジェクトにクエリできるようになりました。

設定もテーブルプロパティを追加するだけで完了しますので、さっそく試してみました。

制限事項と考慮ポイント

  • Athenaのエンジンバージョンが3に設定されている必要があります。
  • Apache Hive tablesにのみ対応しています。
  • クエリする前にGlacierのオブジェクトを復元しておく必要があります。
  • Glacier Flexible RetrievalとS3 Glacier Deep Archiveで利用可能です。
    • Amazon S3 Glacier Instant Retrievalは従来通りAthenaでクエリ可能
  • テーブル単位での設定が必要となります。

テーブルプロパティを指定せずクエリするとどうなるの?

本機能を利用するためにはテーブルプロパティに'read_restored_glacier_objects' = 'true'を設定します。

この設定をせずにクエリを試してみましょう。今回は検証用にストレージクラスがスタンダードのテストデータを準備しました。Athenaでは以下のようにクエリできます。

ここで、ストレージクラスをGlacier Flexible Retrievalに変更します。

Athenaでクエリすると、結果なしとなってしまいました。

Glacierのオブジェクトにクエリする

ここからは上記のテーブルをクエリできるように設定していきます。

オブジェクトを復元する

まずはアーカイブされたオブジェクトの復元をします。S3オブジェクトを選択してアクション→「復元を開始」から実施します。

復元ができたかどうかはファイル名をクリックして詳細を表示すると確認できます。

テーブルプロパティを追加する

復元を待ってる間にテーブルプロパティを追加していきましょう。前述の通り、テーブルプロパティに'read_restored_glacier_objects' = 'true'を設定することで本機能が利用できるようになります。方法は以下の3通りです。

Amazon Athena

AthenaでALTER TABLEを実行する方法です。以下のクエリを実行します。

ALTER TABLE <テーブル名>
SET TBLPROPERTIES ('read_restored_glacier_objects' = 'true');

実行後、SHOW CREATE TABLEを実行してDDLを確認すると、TBLPROPERTIES句に設定が反映されていることが確認できます。

CREATE EXTERNAL TABLE `glacier_dataset`(
:
:
TBLPROPERTIES (
  'CrawlerSchemaDeserializerVersion'='1.0', 
  'CrawlerSchemaSerializerVersion'='1.0', 
  'UPDATED_BY_CRAWLER'='niino-glacier-querying-test', 
  'areColumnsQuoted'='false', 
  'averageRecordSize'='70', 
  'classification'='csv', 
  'columnsOrdered'='true', 
  'compressionType'='none', 
  'delimiter'=',', 
  'last_modified_by'='hadoop', 
  'last_modified_time'='1688105991', 
  'objectCount'='1', 
  'read_restored_glacier_objects'='true', 
  'recordCount'='5150', 
  'sizeKey'='360522', 
  'skip.header.line.count'='1', 
  'transient_lastDdlTime'='1688105991', 
  'typeOfData'='file')

Glue Data Catalog

GlueのマネジメントコンソールからData Catalogにアクセスし、テーブルを直接編集する方法です。

対象のテーブルを選択し、ActionからEdit Tableを選択します。

Table propertiesのセクションにて、AddボタンからKeyに'read_restored_glacier_objects'を、Valueにtrue を指定します。

AWS CLI

AWS Glueのupdate-tableコマンドを使ってCLIでもテーブルプロパティの追加が可能です。

update-table — AWS CLI 2.12.5 Command Reference

以下はCloudShellで実行した際の一例です。

[cloudshell-user@ip-10-4-80-53 ~]$ aws glue update-table \
    --database-name <データベース名> \
    --table-input='{"Name":"<テーブル名>","Parameters":{"read_restored_glacier_objects":"true"}}'

クエリ結果

設定追加後、無事にクエリできることを確認できました。

さいごに

AthenaからGlacierへアーカイブされたオブジェクトへのクエリができるようになりました。Amazon S3 Glacier Instant Retrievalへは元々クエリ可能でしたので、これで3種類のGlacierアーカイブストレージに対してクエリが可能です。

Athenaからは自動で復元ができないため、クエリする前に復元を実施しておく必要があることに注意してください。

参考

Querying restored Amazon S3 Glacier objects - Amazon Athena

【イベント開催のお知らせ】7/19(水)「DevelopersIO大阪」4年ぶりのオフライン開催決定!

AWSはもちろん、ChatGPTやデータ分析など幅広い分野の技術を取り扱った12のライブセッションをお送りします。 また、クラスメソッドのエンジニアと直接技術の話ができる相談ブースも開設いたします。 大阪オフィス所属のAWS Japan Top Engineersや元Ambassadorも大集合!

さらになんと、数量限定でクラスメソッド社員謹製の本格スパイスカレーを提供いたします! 入場無料、途中の入退室は自由です。ぜひご参加ください!

タイムスケジュール・お申込みはこちらから! 【7/19(水)大阪】DevelopersIO 2023 大阪 #devio2023 - connpass