跳到主要内容

MaxCompute Catalog

MaxCompute 是阿里云上的企业级 SaaS(Software as a Service)模式云数据仓库。通过 MaxCompute 提供的 API,Doris 可以获取到 Project 下面的表,并进行数据查询。

适用场景

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

使用须知

  1. 自 Doris 2.1.7 版本开始,MaxCompute Catalog 基于 开放存储 SDK 开发,在这之前,基于 Tunnel API 进行开发。

  2. 开放存储 SDK 的使用有一定的限制,请参照该 文档使用限制 的章节。

  3. MaxCompute 中的 Project 相当于 Doris 中的 Database。

配置 Catalog

语法

CREATE CATALOG [IF NOT EXISTS] catalog_name PROPERTIES (
'type' = 'max_compute',
{McRequiredProperties},
{McOptionalProperties},
{CommonProperties}
);
  • {McRequiredProperties}

    属性名说明支持的 Doris 版本
    mc.default.project想要访问的 MaxCompute 项目名称。可以在 MaxCompute 项目列表 中创建和管理。
    mc.access_keyAccessKey。可以在 阿里云控制台 中创建和管理。
    mc.secret_keySecretKey。可以在 阿里云控制台 中创建和管理。
    mc.regionMaxCompute 开通的地域。可以从 Endpoint 中找到对应的 Region2.1.7(不含)之前
    mc.endpointMaxCompute 开通的地域。请参照下文的如何获取 Endpoint 和 Quota 来配置。2.1.7(含)之后
  • {McOptionalProperties}

    属性名默认值说明支持的 Doris 版本
    mc.tunnel\_endpoint参考附录中的自定义服务地址 2.1.7(不含)之前
    mc.odps\_endpoint参考附录中的自定义服务地址 2.1.7(不含)之前
    mc.quotapay-as-you-goQuota 名称。请参照下文的 如何获取 Endpoint 和 Quota 来配置2.1.7(含)之后
    mc.split\_strategybyte_size设置 split 的划分方式,可设置为按照字节大小划分 byte_size 和按照数据行数划分 row_count2.1.7(含)之后
    mc.split_byte_size268435456每个 split 读取的文件大小,单位为字节,默认为 256MB,当且仅当 'mc.split_strategy' = 'byte_size' 时生效2.1.7(含)之后
    mc.split_row_count1048576每个 split 读多少行,当且仅当 'mc.split_strategy' = 'row_count' 时生效2.1.7(含)之后
    mc.split_cross_partitionfalse生成的 split 是否跨分区2.1.8(含)之后
    mc.connect_timeout10s连接 maxcompute 的超时时间2.1.8(含)之后
    mc.read_timeout120s读取 maxcompute 的超时时间2.1.8(含)之后
    mc.retry_count4超时后的重试次数2.1.8(含)之后
  • {CommonProperties}

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

支持的 MaxCompute 版本

仅支持公有云版本的 Max Compute。私有云版本支持请联系 Doris 社区支持。

支持的 MaxCompute 表

  • 支持读取分区表、聚簇表、物化视图。

  • 不支持读取 MaxCompute 的外部表、逻辑视图、Delta Table。

列类型映射

Max Compute TypeDoris TypeComment
boleanboolean
tinytinyint
tinyinttinyint
smallintsmallint
intint
bigintbigint
floatfloat
doubledouble
decimal(P, S)decimal(P, S)
char(N)char(N)
varchar(N)varchar(N)
stringstring
datedate
datetimedatetime(3)固定映射到精度 3。可以通过 SET [global] time_zone = 'Asia/Shanghai'来指定时区
timestamp_ntzdatetime(6)MaxCompute 的 timestamp_ntz 精度为 9, Doris 的 DATETIME 最大精度只有 6,故读取数据时会将多的部分直接截断。
arrayarray
mapmap
structstruct
otherUNSUPPORTED

基础示例

CREATE CATALOG mc_catalog PROPERTIES (
'type' = 'max_compute',
'mc.default.project' = 'project',
'mc.access_key' = 'sk',
'mc.secret_key' = 'ak',
'mc.endpoint' = 'http://service.cn-beijing-vpc.MaxCompute.aliyun-inc.com/api'
);

如使用 2.1.7(不含)之前的版本,请使用如下语句。(建议升级到 2.1.8 后使用)

CREATE CATALOG mc_catalog PROPERTIES (
'type' = 'max_compute',
'mc.region' = 'cn-beijing',
'mc.default.project' = 'project',
'mc.access_key' = 'ak',
'mc.secret_key' = 'sk'
'mc.odps_endpoint' = 'http://service.cn-beijing.maxcompute.aliyun-inc.com/api',
'mc.tunnel_endpoint' = 'http://dt.cn-beijing.maxcompute.aliyun-inc.com'
);

查询操作

基础查询

-- 1. switch to catalog, use database and query
SWITCH mc_ctl;
USE mc_ctl;
SELECT * FROM mc_tbl LIMIT 10;

-- 2. use mc database directly
USE mc_ctl.mc_db;
SELECT * FROM mc_tbl LIMIT 10;

-- 3. use full qualified name to query
SELECT * FROM mc_ctl.mc_db.mc_tbl LIMIT 10;

附录

如何获取 Endpoint 和 Quota(适用于 Doris 2.1.7 之后)

  1. 如果使用数据传输服务独享资源组,请参照该 文档使用独享数据服务资源组 章节中的 2.授权 来开启相应的权限,并在 配额(Quota)管理 列表中,查看并复制对应的 QuotaName,指定 "mc.quota" = "QuotaName"。此时您可以选择 VPC / 公网来访问 MaxCompute,但是走 VPC 的带宽有保障,公网带宽资源小。

  2. 如果使用按量付费,请参照该 文档使用开放存储(按量付费) 的章节,来开启开放存储 (Storage API) 开关,并给 Ak,SK 对应的用户赋予权限。此时 mc.quota 为默认值 pay-as-you-go,不需要额外指定该值。按量付费情况下,只能使用 VPC 来访问 MaxCompute,无法通过公网访问。只有预付费用户才能通过公网访问 MaxCompute。

  3. 根据 阿里云 Endpoints 文档 中的 地域Endpoint对照表 来配置 mc.endpoint 。使用 VPC 访问的用户,需要根据 各地域Endpoint对照表(阿里云VPC网络连接方式) 表中的 VPC网络Endpoint 列来配置 mc.endpoint 。使用公网访问的用户,可以选择 各地域Endpoint对照表(阿里云经典网络连接方式) 表中的 经典网络Endpoint 列、或者选择 各地域Endpoint对照表(外网连接方式) 表中的 外网Endpoint 列来配置 mc.endpoint

自定义服务地址 (适用于 Doris 2.1.7 之前)

在 Doris 2.1.7 之前的版本中,使用 Tunnel SDK 与 MaxCompute 交互,因此需要使用以下两个 endpoint 属性:

  • mc.odps_endpoint:MaxCompute Endpoint,用于获取 MaxCompute 元数据(库表信息)。

  • mc.tunnel_endpoint: Tunnel Endpoint,用于读取 MaxCompute 数据。

默认情况下,MaxCompute Catalog 根据 mc.regionmc.public_access 去生成 endpoint。

生成后的格式如下:

mc.public_accessmc.odps_endpointmc.tunnel_endpoint
falsehttp://service.{mc.region}.maxcompute.aliyun-inc.com/apihttp://dt.{mc.region}.maxcompute.aliyun-inc.com
truehttp://service.{mc.region}.maxcompute.aliyun.com/apihttp://dt.{mc.region}.maxcompute.aliyun.com

用户也可以单独指定 mc.odps_endpointmc.tunnel_endpoint 来自定义服务地址,适用于一些私有部署的 MaxCompute 环境。

MaxCompute Endpoint 和 Tunnel Endpoint 的配置请参见各地域及不同网络连接方式下的 Endpoint