跳到主要内容

Delta Lake Catalog

Delta Lake Catalog 通过 Trino Connector 兼容框架,使用 Delta Lake Connector 来访问 Delta Lake 表。

警告

该功能为实验功能,自 3.0.1 版本开始支持。

适用场景

场景说明
数据集成读取 Detla Lake 数据并写入到 Doris 内表。
数据写回不支持。

环境准备

编译 Delta Lake Connector 插件

需要 JDK 17 版本。

$ git clone https://github.com/apache/Doris-thirdparty.git
$ cd Doris-thirdparty
$ git checkout trino-435
$ cd plugin/trino-delta-lake
$ mvn clean install -DskipTest

完成编译后,会在 trino/plugin/trino-delta-lake/target/ 下得到 trino-delta-lake-435 目录。

也可以直接下载预编译的 trino-delta-lake-435-20240724.tar.gz 并解压。

部署 Delta Lake Connector

trino-delta-lake-435/ 目录放到所有 FE 和 BE 部署路径的 connectors/ 目录下。(如果没有,可以手动创建)。

├── bin
├── conf
├── connectors
│ ├── trino-delta-lake-435
...

部署完成后,建议重启 FE、BE 节点以确保 Connector 可以被正确加载。

配置 Catalog

语法

CREATE CATALOG [IF NOT EXISTS] catalog_name
PROPERTIES (
'type' = 'trino-connector', -- required
'trino.connector.name' = 'delta_lake', -- required
{TrinoProperties},
{CommonProperties}
);
  • {TrinoProperties}

    TrinoProperties 部分用于填写将传递给 Trino Connector 的属性,这些属性以trino.为前缀。理论上,Trino 支持的属性这里都支持,更多有关 Delta Lake 的信息可以参考 Trino 文档

  • {CommonProperties}

    CommonProperties 部分用于填写通用属性。请参阅 数据目录概述 中【通用属性】部分。

支持的 Delta Lake 版本

更多有关 Delta Lake 的信息可以参考 Trino 文档

支持的元数据服务

更多有关 Delta Lake 的信息可以参考 Trino 文档

支持的存储系统

更多有关 Delta Lake 的信息可以参考 Trino 文档

列类型映射

Delta Lake TypeTrino TypeDoris TypeComment
booleanbooleanboolean
intintint
bytetinyinttinyint
shortsmallintsmallint
longbigintbigint
floatrealfloat
doubledoubledouble
decimal(P, S)decimal(P, S)decimal(P, S)
stringvarcharstring
bianryvarbinarystring
datedatedate
timestamp_ntztimestamp(N)datetime(N)
timestamptimestamp with time zone(N)datetime(N)
arrayarrayarray
mapmapmap
structrowstruct

基础示例

CREATE CATALOG delta_lake_hms properties ( 
'type' = 'trino-connector',
'trino.connector.name' = 'delta_lake',
'trino.hive.metastore' = 'thrift',
'trino.hive.metastore.uri'= 'thrift://ip:port',
'trino.hive.config.resources'='/path/to/core-site.xml,/path/to/hdfs-site.xml'
);

查询操作

配置好 Catalog 后,可以通过以下方式查询 Catalog 中的表数据:

-- 1. switch to catalog, use database and query
SWITCH delta_lake_ctl;
USE delta_lake_db;
SELECT * FROM delta_lake_tbl LIMIT 10;

-- 2. use dalta lake database directly
USE delta_lake_ctl.delta_lake_db;
SELECT * FROM delta_lake_tbl LIMIT 10;

-- 3. use full qualified name to query
SELECT * FROM delta_lake_ctl.delta_lake_db.delta_lake_tbl LIMIT 10;