

# Linux Foundation Delta Lake テーブルをクエリする
<a name="delta-lake-tables"></a>

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

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

## 考慮事項と制限事項
<a name="delta-lake-tables-considerations-and-limitations"></a>

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]** (読み込み専用) - `UPDATE`、`INSERT` または `DELETE` のような DML ステートメントの記述はサポートされていません。
+ **Lake Formation サポート** — Lake Formation の統合は、AWS Glueと同期したスキーマの Delta Lake テーブルに利用できます。詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[Amazon Athena での AWS Lake Formation の使用](https://docs.aws.amazon.com/lake-formation/latest/dg/athena-lf.html)」および「[Delta Lake テーブルのアクセス許可をセットアップする](https://docs.aws.amazon.com/lake-formation/latest/dg/set-up-delta-table.html)」を参照してください。
+ **[Limited DDL support]** (限定的な DDL サポート) - 次の DDL ステートメントは以下の `CREATE EXTERNAL TABLE`、`SHOW COLUMNS`、`SHOW TBLPROPERTIES`、`SHOW PARTITIONS`、`SHOW CREATE TABLE`、および `DESCRIBE` をサポートしています。`CREATE EXTERNAL TABLE` ステートメントの使用方法については、「[Delta Lake テーブルの使用を開始する](delta-lake-tables-getting-started.md)」のセクションを参照してください。
+ **Amazon Glacier オブジェクトのスキップはサポートされていません** – Linux Foundation Delta Lake テーブルのオブジェクトが Amazon 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 Glacier オブジェクトはまだスキップされません。`ALTER TABLE` コマンドの後に `SELECT` クエリを実行すると、引き続きすべてのオブジェクトが返されます。
+ **暗号化されたテーブル** – Athena は、CSE-KMS で暗号化された Delta Lake テーブルの読み取りをネイティブではサポートしていません。これには、SELECT ステートメントと DDL ステートメントが含まれます。

### Delta Lake のバージョニングと Athena
<a name="delta-lake-tables-versioning"></a>

Athena は、Delta Lake ドキュメントに記載されている[バージョニング](https://docs.delta.io/latest/releases.html)を使用しません。Delta Lake テーブルが Athena と互換性があるかどうかを判断するには、次の 2 つの特性を考慮します。
+ **リーダーバージョン ** – すべての Delta Lake テーブルにはリーダーバージョンがあります。現在、これは 1～3 の数値です。Athena がサポートしていないリーダーバージョンのテーブルを含むクエリは失敗します。
+ **テーブル機能 ** – すべての Delta Lake テーブルは、リーダー/ライター機能のセットを宣言することもできます。Athena による Delta Lake のサポートは読み取り専用であるため、テーブルライター機能の互換性は適用されません。ただし、サポートされていないテーブルリーダー機能を持つテーブルに対するクエリは失敗します。

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


****  

| クエリタイプ | サポートされるリーダーのバージョン | サポートされているリーダー機能 | 
| --- | --- | --- | 
| DQL (SELECT ステートメント） | <= 3 | [列マッピング](https://docs.delta.io/latest/delta-column-mapping.html)、[timestampNtz](https://github.com/delta-io/delta/blob/master/PROTOCOL.md#timestamp-without-timezone-timestampntz)、[削除ベクトル](https://docs.delta.io/latest/delta-deletion-vectors.html) | 
| DDL | <= 1 | 該当なし。リーダー機能は、リーダーバージョンが 2 以上のテーブルでのみ宣言できます。 | 
+ Delta Lake テーブル機能のリストについては、GitHub.com の「[テーブル機能の有効な機能名](https://github.com/delta-io/delta/blob/master/PROTOCOL.md#valid-feature-names-in-table-features)」を参照してください。
+ プロトコルバージョン別の Delta Lake 機能のリストについては、GitHub.com の[「プロトコルバージョン別の機能](https://docs.delta.io/latest/versioning.html#features-by-protocol-version)」を参照してください。

Athena でリーダーバージョンが 1 より大きい Delta Lake テーブルを作成するには、「[Delta Lake メタデータを同期する](delta-lake-tables-syncing-metadata.md)」を参照してください。

**Topics**
+ [考慮事項と制限事項](#delta-lake-tables-considerations-and-limitations)
+ [サポートされている列のデータ型](delta-lake-tables-supported-data-types-columns.md)
+ [Delta Lake テーブルの使用を開始する](delta-lake-tables-getting-started.md)
+ [SQL を使用して Delta Lake テーブルをクエリする](delta-lake-tables-querying.md)
+ [Delta Lake メタデータを同期する](delta-lake-tables-syncing-metadata.md)
+ [その他のリソース](delta-lake-tables-additional-resources.md)