TOPコラム一覧Amazon AthenaでApache Icebergを使用してみた(その1)

ユースカジノ 禁止ゲーム Amazon AthenaでApache Icebergを使用してみた(その1)

はじめに

こんにちは、稲守です。
ユースカジノ 禁止ゲームレイクのテーブルフォーマットとしてApache Icebergが取り上げられることが多くなってきました。AWSでもIcebergをサポートしているサービスとして、Amazon Athena、Amazon EMR、AWS Glueなどがあります。また、Amazon Redshiftでも読み取り専用アクセスですがプレビュー機能(2024年2月現在)として使用できるようになっています。
本稿ではApache Icebergについての説明し、次回のエントリでAthenaでの使用感について紹介します。

テーブルフォーマットとは、ユースカジノ 禁止ゲームベースやユースカジノ 禁止ゲームウェアハウスなどのユースカジノ 禁止ゲーム管理システムで、ユースカジノ 禁止ゲームをテーブルとして格納するための構造や形式を指します。テーブルフォーマットはユースカジノ 禁止ゲームの配置、格納方法、メタユースカジノ 禁止ゲームの管理方法などを定義します。

一般的には、以下のような要素で構成されています。

  • 列(カラム)の定義
  • ユースカジノ 禁止ゲーム格納方法
  • ユースカジノ 禁止ゲームの圧縮・エンコーディング
  • ユースカジノ 禁止ゲームニング

Apache Icebergとは

Apache Icebergは2017年にNetflix社で開発が始まり、2018年11月にオープンソース化されてApache Software Foundationのプロジェクトになりました。IcebergプロジェクトのWebサイト(https://iceberg.apache.org/)から特徴を見てみます。

  • ● Expressive SQL(表現力のある SQL)
  • ● Full Schema Evolution(スキーマ進化)
  • ● Hidden Partitioning(隠しユースカジノ 禁止ゲーム)
  • ● Time Travel and Rollback(タイムトラベルとロールバック)
  • ● Data Compaction(ユースカジノ 禁止ゲーム圧縮)

ただIcebergはあくまでユースカジノ 禁止ゲームフォーマットのため、これらの機能がどこまで実装されているかは、エンジン次第となっています。そのため、Amazon Athenaで対応している機能、Amazon EMRで対応している機能、そのほかApache Spark、Trinoなど使用するエンジンのドキュメントを確認しつつ使用することとなります。

ではあらためて順番に特徴を見てみましょう。

① Expressive SQL(表現力のあるSQL)

従来のユースカジノ 禁止ゲームレイクでは、挿入、削除、更新などが難しく、手動でメタユースカジノ 禁止ゲームを更新する必要がありました。またACIDトランザクションが不足していたり、パーティション管理が複雑になったりという問題点がありました。これが、Icebergでは柔軟なSQLをサポートしており、MERGEやUPDATE、DELETEなどが自由に行えます。
それができるのは、なぜでしょうか。

Icebergのアーキテクチャをみてみます。Apache Icebergは、3 つのカテゴリのメタユースカジノ 禁止ゲームを通じてテーブルを定義しています。

  1. ① テーブルを定義する「メタユースカジノ 禁止ゲームファイル」
  2. ② ユースカジノ 禁止ゲームのスナップショットを定義する「マニフェストリスト」
  3. ③ 1 つ以上のスナップショットの一部となるユースカジノ 禁止ゲームファイルのグループを定義する「マニフェストファイル」

クエリの最適化と Iceberg のすべての機能は、これら 3 つのメタユースカジノ 禁止ゲーム層のユースカジノ 禁止ゲームによって実現されています。

ユースカジノ 禁止ゲーム

https://iceberg.apache.org/spec/#overview

メタユースカジノ 禁止ゲームツリーを通して、Icebergはスナップショットの分離とACIDサポートを提供しています。クエリが実行されると、Iceberg は基本的に最新のスナップショットを使用します。任意のテーブルへの書き込みは新しいスナップショットを作成しますが、これは並行クエリには影響しません。同時書き込みは楽観的並行処理(新しいスナップショットを最初に書き込んだ者が書き込みを行い、他の書き込みは再試行される)によって処理されます。
Apache Icebergでは、典型的な作成、挿入、結合の他に、行レベルの更新と削除も可能です。これらのトランザクションはすべてSQLコマンドで可能です。

② Full Schema Evolution(スキーマ進化)

テーブルのスキーマの進化をサポートしています。カラムを追加したり、削除したり、列名を変更したり、型を拡張したり、列の順序を変更したりすることができます。Icebergではスキーマの更新はメタユースカジノ 禁止ゲームの変更のため、ユースカジノ 禁止ゲームファイルを書き換える必要はありません。

③ Hidden Partitioning(隠しユースカジノ 禁止ゲーム)

Hidden Partitioningとは、ユースカジノ 禁止ゲームのために、特別にカラムを用意する必要がないということです。例えばevent_time(時間単位)のようなタイムスタンプ値がもともと存在していても、日付のユースカジノ 禁止ゲームにしたい場合は、event_date(日付単位)のようなカラムを作成してユースカジノ 禁止ゲームキーとする必要があったりします。この場合、正しくユーザが値を生成しないと誤ったユースカジノ 禁止ゲームに入ってしまいます。Icebergでは、日別のユースカジノ 禁止ゲームを作成したい場合は、partition by (date(event_time))とすれば、タイムスタンプのカラムをもとにしていても、日付によってユースカジノ 禁止ゲームが生成されます。

使用できるユースカジノ 禁止ゲーム変換関数は次のようなものです。(Athenaの例)

機能 説明 サポートされている型
year(ts) 年によるユースカジノ 禁止ゲーム date, timestamp
month(ts) 月によるユースカジノ 禁止ゲーム date, timestamp
day(ts) 日によるユースカジノ 禁止ゲーム date, timestamp
hour(ts) 時間によるユースカジノ 禁止ゲーム Timestamp
bucket(N, col) ハッシュ値 mod N のバケットによるユースカジノ 禁止ゲーム int, long, decimal, date, timestamp, string, binary
truncate(L, col) L に切り捨てられた値によるユースカジノ 禁止ゲーム int, long, decimal, string

また、パーティション分割も、既存のテーブルで更新することができます。パーティションを変更しても以前の設定で書き込まれた古いユースカジノ 禁止ゲームは変更されません。新しいユースカジノ 禁止ゲームは新しい設定のパーティションで書き込まれます。そしてパーティションバージョンのメタユースカジノ 禁止ゲームは個別に保持されます。

ユースカジノ 禁止ゲーム

https://iceberg.apache.org/docs/latest/evolution/#partition-evolution

上記の例では2008年のユースカジノ 禁止ゲームは月ごとに分割されていて、2009年以降は日別にパーティション化されています。このように両方のパーティションレイアウトを同じテーブル内に共存できます。そして、Icebergでは高速化する為に特定のパーティションレイアウトに対するクエリを作成する必要はありません。Hidden Partitioningによって、クエリを実行すると、一致するユースカジノ 禁止ゲームを含まないファイルは自動的にスキャンの対象外になります。

④ Time Travel and Rollback(タイムトラベルとロールバック)

Icebergではユースカジノ 禁止ゲームのバージョニングをサポートしていて、タイムトラベル機能を使うことができます。そのため、ある時点の操作が誤っていたなどの問題がわかった場合はその時点までユースカジノ 禁止ゲームを戻すことが可能です。またユースカジノ 禁止ゲームサイエンスの利用シーンでも、ある断面の学習を再現する為に、ユースカジノ 禁止ゲームを戻したいケースがありますね。その場合にも有用な機能です。

SELECT * FROM iceberg_table FOR TIMESTAMP AS OF TIMESTAMP ’2024-02-01 12:00 Asia/Tokyo’

とすれば、2024年2月1日12時のスナップショットを確認できます。

⑤ Data Compaction(ユースカジノ 禁止ゲーム圧縮)

Iceberg テーブルにユースカジノ 禁止ゲームが蓄積するにつれて、ファイルを開くために必要な処理時間が長くなるため、クエリの効率が徐々に低下します。テーブルに delete files が含まれている場合は、追加の計算コストが発生します。Iceberg では、delete files には行レベルの削除が格納され、エンジンは削除した行をクエリ結果に適用する必要があります。
Iceberg ユースカジノ 禁止ゲームでのクエリのパフォーマンスを最適化するために、圧縮によって、表の内容を変更することなく、ユースカジノ 禁止ゲームの構造レイアウトを最適化することができます。

また、スナップショットの有効期限切れや、孤立ファイルの削除などをすることもできます。これによって、メタユースカジノ 禁止ゲームのサイズを小さくし、保持期間よりも古いファイルが削除されます。

これらのユースカジノ 禁止ゲーム圧縮について、手動で実行するだけでなく、メンテナンス処理が自動化する仕組みが用意されているエンジンもあります。Athenaでは手動で実行するコマンドも用意されていますが、AWS Glueユースカジノ 禁止ゲームカタログでは2023年11月に自動圧縮する機能が有効化されました。

次回について

今回は、オープンなユースカジノ 禁止ゲームフォーマットであるApache Icebergの概要について紹介しました。概念ばかりでピンと来なかったかもしれません。次回はAmazon Athena上でIcebergユースカジノ 禁止ゲームを操作して、どんな操作感なのか試して見ましょう。それではまた。

カジノゲームは、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。

お問い合わせ



【著者プロフィール】

稲守 啓樹(いなもり ひろき)

伊藤忠テクノソリューションズ株式会社 クラウドアーキテクト

流通業向けのアプリ開発および運用を約15年担当。現在AWSを活用したお客様のユースカジノ 禁止ゲーム活用基盤の構築および維持保守担当として活動中。

TOPコラム一覧Amazon AthenaでApache Icebergを使用してみた(その1)

pagetop