Linux Foundation Delta Lake テーブルへのクエリ
Linux Foundation Delta LakeMSCK 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] (読み込み専用) -
UPDATE
、INSERT
または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 TABLE
、SHOW COLUMNS
、SHOW TBLPROPERTIES
、SHOW PARTITIONS
、SHOW 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
クエリを実行すると、引き続きすべてのオブジェクトが返されます。
サポートされる非パーティション列のデータ型
非パーティション列では、Athena がサポートしている CHAR
以外のデータ型をすべてのデータ型がサポートされます (CHAR
は Delta Lake プロトコル自体ではサポートされていません)。サポートされているデータ型は次のとおりです。
boolean tinyint smallint integer bigint double float decimal varchar string binary date timestamp array map struct
サポートされているパーティション列のデータ型
Athena は、パーティション列で次のデータ型を持つテーブルをサポートしています。
boolean integer smallint tinyint bigint decimal float double date timestamp varchar
Athena でのデータ型についての詳細は、「Amazon Athena のデータ型」を参照してください。
開始
クエリを実行するには、Delta Lake テーブルが AWS Glue に存在している必要があります。テーブルが Amazon S3 にあるものの AWS Glue にはない場合には、次の構文を使用して CREATE EXTERNAL TABLE
ステートメントを実行します。テーブルがすでに AWS Glue に存在する場合 (たとえば、Apache Spark や AWS Glue で他のエンジンを使用している場合)、この手順は省略できます。
CREATE EXTERNAL TABLE [
db_name
.]table_name
LOCATION 's3://DOC-EXAMPLE-BUCKET
/your-folder
/' TBLPROPERTIES ('table_type' = 'DELTA')
列定義、SerDe ライブラリ、およびその他のテーブルプロパティが省略されていることに注意してください。従来の Hive テーブルとは異なり、Delta Lake テーブルのメタデータは Delta Lake のトランザクションログから推測され、AWS Glue に直接同期されます。
注記
Delta Lake テーブルでは、LOCATION
および table_type
以外のプロパティを含む CREATE TABLE
ステートメントは使用できません。
Delta Lake テーブルを読み込む
Delta Lake テーブルをクエリするには、次の標準 SQL SELECT
構文を使用します。
[ WITH with_query [, ...] ]SELECT [ ALL | DISTINCT ] select_expression [, ...] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ] [ HAVING condition ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ] [ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ] [ OFFSET count [ ROW | ROWS ] ] [ LIMIT [ count | ALL ] ]
SELECT
構文の詳細については、Athena ドキュメントの「SELECT」を参照してください。
Delta Lake 形式には、各データファイルの列ごとの最小値と最大値が格納されます。Athena では、この情報を利用して述語でのファイルスキップが可能になり、不要なファイルが考慮対象から除外されます。
Delta Lake メタデータの同期
Athena を使用して Delta Lake テーブルを作成する場合、Athena はスキーマ、パーティション列、およびテーブルプロパティなどのテーブルメタデータを含むテーブルメタデータを AWS Glue に同期します。時間が経過すると、このメタデータは、トランザクションログ内の基になるテーブルメタデータとの同期を失う可能性があります。テーブルを最新の状態に保つには、以下のいずれかのオプションを選択できます。
-
Delta Lake テーブルの AWS Glue クローラーを使用する。詳細については、「AWS Big Data ブログ」の「AWS Glue クローラーによるネイティブな Delta Lake テーブルサポートの概要
」と「AWS Glue デベロッパーガイド」の「AWS Glue クローラーのスケジュール」を参照してください。 -
Athena にテーブルをドロップして再作成する。
-
SDK、CLI、または AWS Glue コンソールを使用して、AWS Glue のスキーマを手動で更新する。
以下の機能を使用するには、AWS Glue スキーマがトランザクションログと常に同じスキーマである必要があることに注意してください。
-
Lake Formation
-
ビュー
-
行フィルターと列フィルター
この機能がワークフローで必要なく、この互換性を維持しない場合は、Athena で CREATE TABLE
DDL を使用し、AWS Glue で Amazon S3 パスを SerDe パラメータとして追加できます。
Athena と AWS Glue コンソールを使用して Delta Lake テーブルを作成するには
https://console.aws.amazon.com/athena/
で Athena コンソールを開きます。 -
Athena クエリエディタで、次の DDL を使用して Delta Lake テーブルを作成します。この方法を使用する場合、
TBLPROPERTIES
は'table_type' = 'delta'
ではなく'spark.sql.sources.provider' = 'delta'
の値はである必要があります。Apache Spark (Athena for Apache Spark) または他のほとんどのエンジンを使用してテーブルを作成すると、(タイプ
array<string>
のcol
という名前の単一の列を含む) この同じスキーマが挿入されることに注意してください。CREATE EXTERNAL TABLE [db_name.]table_name(col array<string>) LOCATION 's3://
DOC-EXAMPLE-BUCKET
/your-folder
/' TBLPROPERTIES ('spark.sql.sources.provider' = 'delta') https://console.aws.amazon.com/glue/
で AWS Glue コンソール を開きます。 -
ナビゲーションペインで、[データカタログ]、[テーブル] を選択します。
-
テーブルのリストで、目的のテーブルのリンクを選択します。
-
テーブルのページで、[アクション]、[テーブルの編集] を選択します。
-
[Serde パラメータ] セクションで、値
s3://
を含むキーDOC-EXAMPLE-BUCKET
/your-folder
/path
を追加します。 -
[Save] を選択します。
以下も参照してください。
AWS Glue での Delta Lake テーブルの使用および Athena でのそれらのクエリの説明については、AWS Big Data Blog の「Handle UPSERT data operations using open-source Delta Lake and AWS Glue