Linux Foundation Delta Lake テーブルをクエリする - Amazon Athena

Linux Foundation Delta Lake テーブルをクエリする

Linux Foundation Delta Lake は、ビッグデータ分析用のテーブル形式です。Amazon Athena を使用すると、マニフェストファイルを生成したり、MSCK REPAIR ステートメントを実行したりすることなく、Amazon S3 に保存されている Delta Lake テーブルを直接読み込むことができます。

Delta Lake 形式には、各データファイルの列ごとの最小値と最大値が格納されます。Athena の実装では、この情報を利用して述語でのファイルスキップが可能になり、不要なファイルが考慮対象から除外されます。

考慮事項と制限事項

Athena の Delta Lake サポートには、次の考慮事項と制限があります。

  • [AWS Glue カタログ付きのテーブルのみ] - Delta Lake のネイティブサポートは、AWS Glue に登録されたテーブルでのみサポートされます。別のメタストアに登録されている Delta Lake テーブルがある場合でも、それを保持してプライマリのメタストアとして扱うことができます。Delta Lake のメタデータはメタストアではなくファイルシステム (Amazon S3 など) に保存されるため、Athena では Delta Lake テーブルから読み込むには AWS Glue にある場所プロパティのみが必要です。

  • [V3 engine only] (V3 エンジンのみ) - Delta Lake クエリは Athena エンジンバージョン 3 でのみサポートされます。作成するワークグループが Athena エンジンバージョン 3 を使用するように設定する必要があります。

  • [No time travel support] (タイムトラベルのサポートなし) - Delta Lake のタイムトラベル機能を使用するクエリはサポートされていません。

  • [Read only] (読み込み専用) - UPDATEINSERT または DELETE のような DML ステートメントの記述はサポートされていません。

  • Lake Formation サポート — Lake Formation の統合は、AWS Glueと同期したスキーマの Delta Lake テーブルに利用できます。詳細については、「AWS Lake Formation デベロッパーガイド」の「Amazon Athena での AWS Lake Formation の使用」および「Delta Lake テーブルのアクセス許可をセットアップする」を参照してください。

  • [Limited DDL support] (限定的な DDL サポート) - 次の DDL ステートメントは以下の CREATE EXTERNAL TABLESHOW COLUMNSSHOW TBLPROPERTIESSHOW PARTITIONSSHOW CREATE TABLE、および DESCRIBE をサポートしています。CREATE EXTERNAL TABLE ステートメントの使用方法については、「使用を開始する」のセクションを参照してください。

  • S3 Glacier オブジェクトのスキップはサポートされていません — Linux Foundation Delta Lake テーブルのオブジェクトが Amazon S3 Glacier ストレージクラスにある場合、read_restored_glacier_objects テーブルプロパティを false に設定しても効果はありません。

    例えば、次のコマンドを実行したとします。

    ALTER TABLE table_name SET TBLPROPERTIES ('read_restored_glacier_objects' = 'false')

    Iceberg および Delta Lake テーブルでは、コマンドは「サポートされていないテーブルプロパティキー: read_restored_glacier_objects」というエラーを生成します。Hudi テーブルでは、ALTER TABLE コマンドはエラーを発生しませんが、Amazon S3 Glacier オブジェクトはまだスキップされません。ALTER TABLE コマンドの後に SELECT クエリを実行すると、引き続きすべてのオブジェクトが返されます。

Delta Lake のバージョニングと Athena

Athena は、Delta Lake ドキュメントに記載されているバージョニングを使用しません。Delta Lake テーブルが Athena と互換性があるかどうかを判断するには、次の 2 つの特性を考慮します。

  • リーダーバージョン – すべての Delta Lake テーブルにはリーダーバージョンがあります。現在、これは 1~3 の数値です。Athena がサポートしていないリーダーバージョンのテーブルを含むクエリは失敗します。

  • テーブル機能 – すべての Delta Lake テーブルは、リーダー/ライター機能のセットを宣言することもできます。Athena による Delta Lake のサポートは読み取り専用であるため、テーブルライター機能の互換性は適用されません。ただし、サポートされていないテーブルリーダー機能を持つテーブルに対するクエリは失敗します。

次の表は、Athena がサポートする Delta Lake リーダーのバージョンと Delta Lake テーブルリーダーの機能を示しています。

クエリタイプ サポートされるリーダーのバージョン サポートされているリーダー機能
DQL (SELECT ステートメント) <= 3 列マッピングtimestampNtz削除ベクトル
DDL <= 1 該当しません。リーダー機能は、リーダーバージョンが 2 以上のテーブルでのみ宣言できます。

Athena でリーダーバージョンが 1 より大きい Delta Lake テーブルを作成するには、「Delta Lake メタデータを同期する」を参照してください。