MaxCompute推出外部项目,通过映射Hologres Database实现元数据与数据的实时访问,支持对Hologres的查询和数据插入。访问Hologres时透传当前任务执行者身份,由Hologres认证鉴权。该方式支持在Database级别整体映射实时数仓,实现实时分析与离线计算的一体化协同。
支持数据类型
DECIMAL类型限制:
在MaxCompute中创建的Hologres外部表,
DECIMAL数据类型默认且固定为decimal(38,18),不能修改。如果源表小数位数较少,可以在MaxCompute外部表中将该列定义为STRING类型,在使用时再通过CAST函数强制转换。复杂类型限制:
MaxCompute创建的Hologres外部表,不支持
Array,Map,Struct等复杂数据类型。其他不兼容类型:
Hologres中的
MONEY等数据类型,目前在MaxCompute中没有对应的数据类型,暂时不支持。
授权
方式一:若使用【阿里云RAM角色】认证和鉴权,参考Hologres的STS模式普通角色授权。
方式二:若使用【任务执行者身份】认证和鉴权,参考Hologres的STS模式服务关联角色授权。
为RAM用户授权
如果操作用户是RAM用户,请确保已绑定如下权限策略。添加权限参考为为RAM用户授权。
AliyunMaxComputeFullAccess:用于完成创建外部数据源和外部项目。
AliyunHologresReadOnlyAccess:用于完成创建Hologres外部项目。
权限说明
管控面权限:即通过MaxCompute控制台操作时需要校验的权限,主要发生在“创建MC的外表项目,绑定一个Hologres实例”过程中。
数据面权限:即登录创建好的外部项目后,读写Hologres表时需要校验的权限,主要发生在“创建/维护/使用被绑定的Hologres实例中的Schema/Table以及其他资源的过程,一般在MC的SQL中执行” 。
这部分权限由Hologres控制台管理,需要由主账号登录Hologres控制台配置相关操作,为RAM用户授权。
创建Hologres外部数据源
开通Hologres服务,且MaxCompute和Hologres必须部署在同一地域。
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择 。
在外部数据源页面,单击创建外部数据源。
在弹出的新增外部数据源对话框,根据界面提示配置相关参数。参数说明如下:
参数
是否必填
说明
外部数据源类型
必填
选择Hologres。
外部数据源名称
必填
可自定义命名。命名规则如下:
以字母开头,且只能包含小写字母、下划线和数字。
不能超过128个字符。
例如
paimon_dlf。外部数据源描述
选填
根据需要填写。
连接方式
必填
默认为经典网络访问(内网)。
InstanceID
必填
选择当前地域下需要连接的Hologres实例。
Host
必填
系统默认生成。
Port
必填
系统默认生成。
DBNAME
必填
连接的Hologres数据库名称。
认证和鉴权
必填
云RAM角色
任务执行者身份:Hologres外部项目所需外部数据源需要配置为任务执行者身份的认证模式。
RoleARN
必填
RAM角色的ARN信息。RAM角色创建及授权,请参见Hologres的STS模式普通角色授权。
登录RAM控制台。
在左侧导航栏选择。
在基础信息区域,可以获取ARN信息。
示例:
acs:ram::124****:role/aliyunodpsdefaultrole。关联服务角色
必填
若选择任务执行者身份,关联服务角色为
acs:ram::124****:role/aliyunserviceroleformaxcomputeidentitymgmt。外部数据源补充属性
选填
特殊声明的外部数据源补充属性。指定后,使用此外部数据源的任务可以按照参数定义的行为访问源系统。
说明支持的具体参数请关注后续官网文档更新说明,具体参数将随产品能力演进逐步放开。
单击确认,完成外部数据源的创建。
在外部数据源页面,单击目标数据源对应的操作的详情,可查看数据源详细信息。
创建Hologres外部项目
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择。
在外部项目页签,单击新建项目。
在弹出的新增项目对话框,根据界面提示文案配置项目信息,单击确认完成项目创建。
参数
是否必填
说明
项目类型
必填
默认为外部项目。
地域
必填
默认为当前地域,此处无法修改。
项目名称(全网唯一)
必填
字母开头,包含字母、数字及下划线(_),长度在3-28个字符。
MaxCompute外部数据源类型
选填
选择Hologres。
MaxCompute外部数据源
选填
选择已有:会出现已经创建过的外部数据源。
新建外部数据源:即可新建并使用新的外部数据源。
MaxCompute外部数据源名称
必填
选择已有:在下拉列表中选择已经创建好的外部数据源名称。
新建外部数据源:则会使用新建的外部数据源名称。
计算资源付费类型
必填
包年包月或按量付费。
默认Quota
必填
选择已有Quota.
描述
选填
自定义项目描述。
使用SQL访问数据源系统
由于外部项目和数据源之间是映射关系,所以删除外部项目并不会删除任何数据;
但与普通外部表不同,如果在外部项目中执行DROP TABLE / DROP SCHEMA 操作,该请求会发送到对端服务,因此会真正删除对应表或数据库中的数据,请谨慎执行DROP操作。
选择连接工具登录外部项目。
如下为DataWorks新版工作空间数据开发SQL节点操作示例。
登录DataWorks控制台,在左上角选择地域。
在左侧导航栏选择工作空间。
在工作空间列表页面,单击创建工作空间或单击已有目标工作空间名称。
在空间详情页面,单击左侧导航栏计算资源。
在计算资源页面,单击绑定计算资源,选择MaxCompute。
填写绑定MaxCompute计算资源的基本信息。
其中MaxCompute项目选择外部项目。
列出外部项目中的schema。
-- 打开session级别支持schema语法开关。 SET odps.namespace.schema=true; SHOW schemas; -- 示例返回结果。 ID = 20250922****g27aqqcnyn2 hg_internal hg_recyclebin public OK在外部项目中列出schema下的表。
-- schema_name为外部项目中show出来的Schema名称。 USE schema <schema_name>; SHOW tables;在外部项目中新建schema。
-- 本示例中schema_name为schema_demo_test。 CREATE schema <schema_name>;使用新建的schema。
USE schema <schema_name>;在schema中新建表并插入数据。
命令格式:
-- 新建表。 CREATE TABLE [IF NOT EXISTS] <table_name> ( <col_name> <data_type>, ... ) [COMMENT <table_comment>] [PARTITIONED BY (<col_name> <data_type>, ...)] ; -- 插入数据,不支持执行INSERT OVERWRITE操作。 INSERT INTO <table_name> [PARTITION (<pt_spec>)] [(<col_name> [,<col_name> ...)]] <select_statement> FROM <from_statement>使用示例:
CREATE TABLE schema_table(id int,name string); INSERT INTO schema_table VALUES (101,'张三'),(102,'李四'); -- 查询表schema_table。 SELECT * FROM schema_table; -- 返回结果。 +------------+------------+ | id | name | +------------+------------+ | 101 | 张三 | | 102 | 李四 | +------------+------------+
使用已有的schema:public。
use schema public; show tables; -- 返回结果示例。 ID = 20250922065846301g50iovzbx8g 1221220769279014 test1 OK -- 读取表。 SELECT * FROM test1; -- 返回结果如下。 +------------+------------+ | id | name | +------------+------------+ | 101 | 张三 | | 102 | 李四 | +------------+------------+ -- 写入表并查询写入是否成功。 INSERT INTO test1 VALUES (103,'测试'); SELECT * FROM test1; -- 返回结果如下。 +------------+------------+ | id | name | +------------+------------+ | 102 | 李四 | | 103 | 测试 | | 101 | 张三 | +------------+------------+
Hologres数据类型与MaxCompute数据类型映射
Hologres数据类型 | MaxCompute数据类型 | JDBC读 | JDBC写 | 直读 (odps.table.api.enable.holo.table=true) | 说明 |
INTEGER(INT或INT4) | INT | 32位有符号整型。 | |||
TEXT | STRING、VARCHAR | 字符串类型,目前长度限制为8MB。 | |||
SMALLINT | SMALLINT | 16位有符号整型。 | |||
INT2 | SMALLINT | 16位有符号整型。 | |||
BIGINT(INT8) | BIGINT | 64位有符号整型。 | |||
BYTEA | BINARY |
| |||
REAL(FLOAT4) | FLOAT | 32位二进制浮点型。 | |||
DOUBLE PRECISION(FLOAT8) | DOUBLE | 64位二进制浮点型。 | |||
BOOLEAN(BOOL) | BOOLEAN | BOOLEAN类型。 | |||
TIMESTAMP | TIMESTAMP_NTZ | 存储精度为纳秒,存在时区的时间误差。Hologres的TIMESTAMP类型不包含时区,存储精度为微秒。 | |||
TIMESTAMP WITH TIME ZONE(TIMESTAMPTZ) | TIMESTAMP | 时间戳类型,精确到纳秒,格式为 | |||
DECIMAL(NUMERIC) | DECIMAL(precision,scale) | 10进制精确数字类型。
MaxCompute的DECIMAL如果未指定精度,则默认为 | |||
CHAR(n) | CHAR(n) | MaxCompute的 Hologres的 | |||
VARCHAR(n) | VARCHAR(n) | MaxCompute的 Hologres的 | |||
DATE | DATE | 日期类型,格式为 | |||
INT4[] | ARRAY<INT> | 复杂类型ARRAY。 | |||
INT8[] | ARRAY<BIGINT> | ||||
FLOAT4[] | ARRAY<FLOAT> | ||||
FLOAT8[] | ARRAY<DOUBLE> | ||||
BOOLEAN[] | ARRAY<BOOLEAN> | ||||
TEXT[] | ARRAY<STRING> | ||||
JSONB | JSON | 复杂类型JSON。 | |||
JSON | STRING | 字符串类型,目前长度限制为8MB。 | |||
SERIAL(自增序列) | INT | Hologres的自增序列字段。 |
常见问题
问题一:RAM用户使用任务执行者身份执行show schemas报错
问题描述:RAM用户使用任务执行者身份执行show schemas时提示错误:password authentication failed for user "mcslr$STS.NZTtDfsd2VBifvYMSzXEDgBLf
根本原因:当前的执行者身份为RAM用户,该用户没有Hologres数据库的操作权限。
解决方案:
登录Hologres控制台,在左上角选择地域。
在左侧导航栏单击实例列表,在实例列表详情页,单击目标实例ID进入详情页,然后单击登录实例。
在顶部导航栏单击安全中心,在左侧导航栏单击用户管理,在用户管理详情页,单击右上角新增用户,在弹出的对话框中添加该RAM用户。
在顶部导航栏单击安全中心,在左侧导航栏单击DB授权,选择用户授权,给RAM用户授权数据库的操作权限。请根据实际情况授予RAM用户权限,相关权限点详情见RAM用户权限授权快速入门。