Delta Lake コネクタ¶
概要¶
このコネクタは、Presto で Delta Lake テーブルを読み取ることができます。このコネクタは、Delta Lake プロジェクトによって提供される Delta Standalone Library (DSR) を使用して、テーブルメタデータを読み取ります。
構成¶
Delta Lake コネクタを構成するには、次の内容でカタログプロパティファイル etc/catalog/delta.properties を作成し、プロパティを適宜置き換えます。
connector.name=delta
hive.metastore.uri=hostname:port
構成プロパティ¶
次の構成プロパティを使用できます。
| プロパティ名 | 説明 | デフォルト | 
|---|---|---|
| 
 | Delta Lake テーブルが登録されている Hive メタストアの URI です。このコネクタは、Hive メタストアに依存して Delta Lake テーブルの場所を見つけます。指定された場所にある Delta Log から、テーブルのスキーマとデータファイルリストが見つかります。 | 
 | 
| 
 | ネストされた列の非参照をテーブルスキャンにプッシュダウンして、 | 
 | 
| 
 | パーティション分割された列の名前を大文字と小文字を区別して照合できるようにします。 | 
 | 
Delta Lake コネクタは、Hive コネクタに存在する多くのモジュールを再利用します。S3、Azure Data Lake、Glue メタストアなどの接続とセキュリティに関するモジュールです。そのため、これらのモジュールの構成は、Hive コネクタのドキュメントで利用できるものと同じです。
Delta Lake テーブルのクエリ¶
クエリの例
SELECT * FROM sales.apac.sales_data LIMIT 200;
上記のクエリでは
- salesは Delta Lake カタログを指します。
- apacは Hive メタストア内のデータベースを指します。
- sales_dataは- apacデータベースに登録された Delta Lake テーブルを指します。
テーブルが Hive メタストアに登録されていない場合は、次の DDL コマンドを使用して登録できます。
注意
Hive メタストアにテーブルを登録する場合、Delta Lake コネクタは Delta Lake テーブルの場所にあるメタデータからスキーマを取得するため、DDL でテーブルの完全なスキーマは必要ありません。Hive メタストアで列がないというエラーを回避するには、登録する Delta テーブルのスキーマとしてダミー列を提供します。
例¶
Delta Lake コネクタを使用して、db-sa-datasets という名前の S3 バケットに Delta Lake テーブルの場所を持つ apac スキーマに sales_data_new という名前の新しい Delta テーブルを作成します。
CREATE TABLE sales.apac.sales_data_new (dummyColumn INT)
WITH (external_location = 's3://db-sa-datasets/presto/sales_data_new');
Hive メタストアにパーティション Delta テーブルを登録するには、上記と同じ CREATE TABLE を使用します。プロパティに必要なのは external_location のみで、CREATE TABLE で partitioned_by を指定する必要はありません。
別のオプションとして、テーブルの場所をテーブル名として使用してテーブルを直接クエリできます。
SELECT * FROM sales."$path$"."s3://db-sa-datasets/presto/sales_data" LIMIT 200;
上記のクエリでは、スキーマ $path$ はテーブル名がパスであることを示しています。s3://db-sa-datasets/presto/sales_date として指定されたテーブル名は、Delta Lake テーブルがあるパスです。パスベースのオプションを使用すると、Hive メタストアに登録せずに Delta テーブルをクエリできます。
Delta Lake テーブルの特定のスナップショットをクエリするには、テーブル名のサフィックスとしてスナップショット識別子を使用します。
SELECT * FROM sales.apac."sales_data@v4" LIMIT 200;
上記のクエリでは、テーブル sales.apac.sales_data のスナップショットバージョン 4 からデータを読み取ります。
特定の時点の Delta Lake テーブルのスナップショットをクエリするには、テーブル名のサフィックスとしてタイムスタンプを指定します。
SELECT * FROM sales.apac."sales_data@t2021-11-18 09:45" LIMIT 200;
上記のクエリでは、テーブル sales.apac.sales_data のタイムスタンプ 2021-11-18 09:45:00 時点での最新のスナップショットからデータを読み取ります。
DROP TABLE sales.apac.sales_data_new;
上記のクエリでは、外部テーブル sales.apac.sales_data_new を削除します。これはテーブルのメタデータのみを削除します。参照されたデータディレクトリは削除されません。