Delta Lake 连接器¶
概述¶
此连接器允许在 Presto 中读取 Delta Lake 表。连接器使用 Delta Lake 项目提供的 Delta 独立库 (DSR) 来读取表元数据。
配置¶
要配置 Delta Lake 连接器,请创建一个目录属性文件 etc/catalog/delta.properties
,内容如下,根据需要替换属性
connector.name=delta
hive.metastore.uri=hostname:port
配置属性¶
以下配置属性可用
属性名称 |
描述 |
默认值 |
---|---|---|
|
注册 Delta Lake 表的 Hive 元数据存储的 URI(s)。连接器依赖 Hive 元数据存储来查找 Delta Lake 表的位置。从给定位置的 Delta 日志中,可以找到表的模式和数据文件列表。 |
|
|
启用将嵌套列反引用推入表扫描,以便仅选择 |
|
|
允许以区分大小写的方式匹配分区列的名称。 |
|
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 元数据存储中,DDL 中不需要提供表的完整模式,因为 Delta Lake 连接器会从 Delta Lake 表位置的元数据中获取模式。为了避免 Hive 元数据存储中的“无列”错误,请提供一个虚拟列作为要注册的 Delta 表的模式。
示例¶
使用 Delta Lake 连接器在 apac
模式中创建一个名为 sales_data_new
的新 Delta 表,该表在名为 db-sa-datasets
的 S3 存储桶中具有 Delta Lake 表位置
CREATE TABLE sales.apac.sales_data_new (dummyColumn INT)
WITH (external_location = 's3://db-sa-datasets/presto/sales_data_new');
要将分区 Delta 表注册到 Hive 元数据存储中,请使用与上面相同的 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 表所在的路径。基于路径的选项允许用户在不将 Delta 表注册到 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
。这只会删除表的元数据。引用的数据目录不会被删除。