アナリティクス強化月間 Athena ACID トランザクション + Iceberg

読了時間(目安): 2 分 0秒
記事の文字数: 9106 文字
Page content

AWS エバンジェリストシリーズ AWSの基礎を学ぼう

アナリティクス強化月間 Athena ACID トランザクション + Iceberg

プレビュー提供発表記事

Apache Iceberg による Amazon Athena ACID トランザクション (プレビュー) を発表 投稿日: Nov 29, 2021

一般公開発表記事

Apache Iceberg を利用した Amazon Athena ACID トランザクションの一般提供の開始を発表 投稿日: Apr 5, 2022

この新機能は、Athena の SQL のデータ操作言語 (DML) に、挿入、更新、削除、タイムトラベルのオペレーションを追加します。

Amazon Athena

Amazon Athena

Time Travel and Version Travel Queries

タイムトラベル:特定データの○時間前、○日前などを参照する際に利用

詳しくはこちら▶ Time Travel and Version Travel Queries

Apache Iceberg

Apache Iceberg

参考

CPU使用率90%を超える高負荷がLNEのHive Metastoreで発生 Hive table formatの課題はApache Icebergで解消

Handson Part

教材

実際にやってみた

  • Update

Screenshot 2022-04-16 13.44.04.png

  • DELETE

Screenshot 2022-04-16 13.43.33.png

  • S3のファイル

Screenshot 2022-04-16 13.34.51.png

avroは、データがバイナリエンコードされるデータフォーマット

Apache Avro

トラブル?

  • Amazon Athenaで、データベース「Default」が表示されない

    • 初期起動時の裏で非同期で実行されるようで初回アクセス直後は表示されない場合はしばらく待ってください
  • identifiers must not start with a digit; surround the identifier with double quotes

    • A column name in an SQL statement can contain only letters, digits, and underscores (_). テーブル名が数字、_で含まれている場合はダブルクォート"で囲んでください

以降は個人で実施した内容です。

Amazon Athena Workshop

事前準備

CloudFormation Template にある Launch Stack からリソース作成します。

N.Virginia(バージニア北部)リージョンでのみ実施が推奨されています
  • [次へ]をおして進めていくだけです

Screenshot 2022-04-16 14.11.06.png

  • 以下の表示であれば作成完了です

Screenshot 2022-04-16 14.14.20.png

  • 保存したクエリから名前をクリックして実行します
    • Athena_create_amazon_reviews_parquet

Screenshot 2022-04-16 14.19.46.png

  • 表示されるqueryをそのまま全体を実行するとエラーとなります

Screenshot 2022-04-16 14.22.00.png

  • セミコロン;で区切られているセクションごとにハイライト(選択)して実行してください

Screenshot 2022-04-16 14.29.59.png

  • ここまで実行したらクエリエディタで新しくテーブルを作成します
CREATE TABLE amazon_reviews_iceberg(
marketplace string,
customer_id string,
review_id string,
product_id string,
product_parent string,
product_title string,
star_rating int,
helpful_votes int,
total_votes int,
vine string,
verified_purchase string,
review_headline string,
review_body string,
review_date bigint,
year int,
product_category string)
PARTITIONED BY (product_category)
LOCATION 's3://athena-workshop-${account-id}/amazon_reviews_iceberg/'
TBLPROPERTIES (
'table_type'='ICEBERG',
'format'='parquet',
'compaction_bin_pack_target_file_size_bytes'='536870912'
)

Screenshot 2022-04-16 14.31.26.png

`athena-workshop-${account-id}`は、CloudFormationで作成されるS3バケットを利用しました
`compaction_bin_pack_target_file_size_bytes` のままではエラーとなるため、`write_target_data_file_size_bytes` へ変更する必要がありました
  • 作成済みのamazon_reviews_parquetからデータを移送します
insert into amazon_reviews_iceberg select * from "default"."amazon_reviews_parquet"
データベース default 以外で進行している場合は変更が必要です

タイムトラベルクエリ

  • Snapshotの履歴(History)を確認します
SELECT * FROM "$DATABASE_NAME"."TABLE_NAME"$iceberg_history

Screenshot 2022-04-16 14.40.21.png

  • FOR SYSTEM_TIME AS OF timestamp の形式で抽出

Screenshot 2022-04-16 14.42.07.png

  • FOR SYSTEM_VERSION AS OF ${snapshot-id} の形式で抽出

Screenshot 2022-04-16 14.42.59.png

  • 他にも時間を過去に遡る検索も可能です
SELECT * FROM "TABLE_NAME" 
FOR SYSTEM_TIME AS OF (current_timestamp - interval '1' day)

カラム追加

Screenshot 2022-04-16 14.52.04.png

最適化

詳しくはこちら▶Optimizing Iceberg Tables

データが蓄積されていくなかで不要データを削除した場合に、一度肥大化したデータをshrinkしてスキャン効率をよくするものと認識しました。

  • 最適化前の検索
    • 1分以上掛かっています

Screenshot 2022-04-16 15.04.21.png

  • 最適化実行

Screenshot 2022-04-16 15.04.47.png

  • 最適化直後の検索
    • 1分以上掛かっています

Screenshot 2022-04-16 15.05.03.png

  • 最適後の検索(体感で5分程度間隔を空けました)
    • 10秒と少しで検索します

Screenshot 2022-04-16 15.08.26.png

まとめ

Athenaはあまり触っていなかったのですが、S3にあるファイルをSQLでここまで制御できるとは驚きました。
Parquet形式は、なにかと使っていたのですが(AWS CURとか…)、分析に使いやすくなるなと個人的に思いました。

Share on:
comments powered by Disqus