Hologres外部项目

更新时间:
复制为 MD 格式

MaxCompute推出外部项目,通过映射Hologres Database实现元数据与数据的实时访问,支持对Hologres的查询和数据插入。访问Hologres时透传当前任务执行者身份,由Hologres认证鉴权。该方式支持在Database级别整体映射实时数仓,实现实时分析与离线计算的一体化协同。

支持数据类型

  • DECIMAL类型限制:

    MaxCompute中创建的Hologres外部表,DECIMAL数据类型默认且固定为decimal(38,18),不能修改。如果源表小数位数较少,可以在MaxCompute外部表中将该列定义为STRING类型,在使用时再通过CAST函数强制转换。

  • 复杂类型限制:

    MaxCompute创建的Hologres外部表,不支持ArrayMapStruct等复杂数据类型。

  • 其他不兼容类型:

    Hologres中的MONEY等数据类型,目前在MaxCompute中没有对应的数据类型,暂时不支持。

详情参见Hologres数据类型与MaxCompute数据类型映射

授权

RAM用户授权

如果操作用户是RAM用户,请确保已绑定如下权限策略。添加权限参考为RAM用户授权

  • AliyunMaxComputeFullAccess:用于完成创建外部数据源和外部项目。

  • AliyunHologresReadOnlyAccess:用于完成创建Hologres外部项目。

权限说明

  • 管控面权限:即通过MaxCompute控制台操作时需要校验的权限,主要发生在“创建MC的外表项目,绑定一个Hologres实例”过程中。

    这部分权限由RAM访问控制管理,需要由主账号登录RAM访问控制台配置相关操作,RAM用户授权

  • 数据面权限:即登录创建好的外部项目后,读写Hologres表时需要校验的权限,主要发生在“创建/维护/使用被绑定的Hologres实例中的Schema/Table以及其他资源的过程,一般在MCSQL中执行” 。

    这部分权限由Hologres控制台管理,需要由主账号登录Hologres控制台配置相关操作,RAM用户授权

创建Hologres外部数据源

  1. 开通Hologres服务,且MaxComputeHologres必须部署在同一地域。

  2. 登录MaxCompute控制台,在左上角选择地域。

  3. 在左侧导航栏,选择管理配置 > 外部数据源 。

  4. 外部数据源页面,单击创建外部数据源

  5. 在弹出的新增外部数据源对话框,根据界面提示配置相关参数。参数说明如下:

    参数

    是否必填

    说明

    外部数据源类型

    必填

    选择Hologres

    外部数据源名称

    必填

    可自定义命名。命名规则如下:

    • 以字母开头,且只能包含小写字母、下划线和数字。

    • 不能超过128个字符。

    例如paimon_dlf

    外部数据源描述

    选填

    根据需要填写。

    连接方式

    必填

    默认为经典网络访问(内网)

    InstanceID

    必填

    选择当前地域下需要连接的Hologres实例。

    Host

    必填

    系统默认生成。

    Port

    必填

    系统默认生成。

    DBNAME

    必填

    连接的Hologres数据库名称。

    认证和鉴权

    必填

    • RAM角色

    • 任务执行者身份:Hologres外部项目所需外部数据源需要配置为任务执行者身份的认证模式。

    RoleARN

    必填

    RAM角色的ARN信息。RAM角色创建及授权,请参见HologresSTS模式普通角色授权

    1. 登录RAM控制台

    2. 在左侧导航栏选择身份管理 > 角色

    3. 基础信息区域,可以获取ARN信息。

    示例:acs:ram::124****:role/aliyunodpsdefaultrole

    关联服务角色

    必填

    若选择任务执行者身份关联服务角色acs:ram::124****:role/aliyunserviceroleformaxcomputeidentitymgmt

    外部数据源补充属性

    选填

    特殊声明的外部数据源补充属性。指定后,使用此外部数据源的任务可以按照参数定义的行为访问源系统。

    说明

    支持的具体参数请关注后续官网文档更新说明,具体参数将随产品能力演进逐步放开。

  6. 单击确认,完成外部数据源的创建。

  7. 外部数据源页面,单击目标数据源对应的操作详情,可查看数据源详细信息。

创建Hologres外部项目

  1. 登录MaxCompute控制台,在左上角选择地域。

  2. 在左侧导航栏,选择管理配置 > 项目管理

  3. 外部项目页签,单击新建项目

  4. 在弹出的新增项目对话框,根据界面提示文案配置项目信息,单击确认完成项目创建。

    参数

    是否必填

    说明

    项目类型

    必填

    默认为外部项目。

    地域

    必填

    默认为当前地域,此处无法修改。

    项目名称(全网唯一)

    必填

    字母开头,包含字母、数字及下划线(_),长度在3-28个字符。

    MaxCompute外部数据源类型

    选填

    选择Hologres。

    MaxCompute外部数据源

    选填

    • 选择已有:会出现已经创建过的外部数据源。

    • 新建外部数据源:即可新建并使用新的外部数据源。

    MaxCompute外部数据源名称

    必填

    • 选择已有:在下拉列表中选择已经创建好的外部数据源名称。

    • 新建外部数据源:则会使用新建的外部数据源名称。

    计算资源付费类型

    必填

    包年包月按量付费

    默认Quota

    必填

    选择已有Quota.

    描述

    选填

    自定义项目描述。

使用SQL访问数据源系统

重要

由于外部项目和数据源之间是映射关系,所以删除外部项目并不会删除任何数据;

但与普通外部表不同,如果在外部项目中执行DROP TABLE / DROP SCHEMA 操作,该请求会发送到对端服务,因此会真正删除对应表或数据库中的数据,请谨慎执行DROP操作。

  1. 选择连接工具登录外部项目。

    如下为DataWorks新版工作空间数据开发SQL节点操作示例。

    1. 登录DataWorks控制台,在左上角选择地域。

    2. 在左侧导航栏选择工作空间

    3. 工作空间列表页面,单击创建工作空间或单击已有目标工作空间名称。

    4. 空间详情页面,单击左侧导航栏计算资源

    5. 计算资源页面,单击绑定计算资源,选择MaxCompute

    6. 填写绑定MaxCompute计算资源基本信息

      其中MaxCompute项目选择外部项目。

  2. 列出外部项目中的schema。

    -- 打开session级别支持schema语法开关。
    SET odps.namespace.schema=true;
    SHOW schemas;
    
    -- 示例返回结果。 
    ID = 20250922****g27aqqcnyn2
    hg_internal
    hg_recyclebin
    public
    
    
    OK
  3. 在外部项目中列出schema下的表。

    -- schema_name为外部项目中show出来的Schema名称。
    USE schema <schema_name>;
    SHOW tables;
  4. 在外部项目中新建schema。

    -- 本示例中schema_nameschema_demo_test。
    CREATE schema <schema_name>;
  5. 使用新建的schema。

    USE schema <schema_name>;
  6. 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        | 李四        | 
      +------------+------------+
  7. 使用已有的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(INTINT4)

INT

支持

支持

支持

32位有符号整型。

TEXT

STRING、VARCHAR

支持

支持

支持

字符串类型,目前长度限制为8MB。

SMALLINT

SMALLINT

支持

支持

支持

16位有符号整型。

INT2

SMALLINT

支持

支持

支持

16位有符号整型。

BIGINT(INT8)

BIGINT

支持

支持

支持

64位有符号整型。

BYTEA

BINARY

支持

支持

支持

  • 二进制数据类型,目前长度限制为8MB。

  • HologresBINARY 最大为1GB。

REAL(FLOAT4)

FLOAT

支持

支持

支持

32位二进制浮点型。

DOUBLE PRECISION(FLOAT8)

DOUBLE

支持

支持

支持

64位二进制浮点型。

BOOLEAN(BOOL)

BOOLEAN

支持

支持

支持

BOOLEAN类型。

TIMESTAMP

TIMESTAMP_NTZ

不支持

不支持

不支持

存储精度为纳秒,存在时区的时间误差。HologresTIMESTAMP类型不包含时区,存储精度为微秒。

TIMESTAMP WITH TIME ZONE(TIMESTAMPTZ)

TIMESTAMP

不支持

不支持

不支持

时间戳类型,精确到纳秒,格式为yyyy-mm-dd hh:mm:ss.xxxxxxxxx。MaxComputeHologres在底层已经进行了精度转换。MaxCompute输出不包含时区格式。

DECIMAL(NUMERIC)

DECIMAL(precision,scale)

支持

支持

支持

10进制精确数字类型。

  • precision:表示最多可以表示多少位的数字。取值范围:1 <= precision <= 38

  • scale:表示小数部分的位数。默认取值范围: 0 <= scale <= 18

MaxComputeDECIMAL如果未指定精度,则默认为(38,18),使用IMPORT FOREIGN SCHEMA语句创建表时系统会自动转换精度。

CHAR(n)

CHAR(n)

支持

支持

支持

MaxComputeCHAR(n)为固定长度字符类型,n为长度。最大取值为255。长度不足则使用空格填充。

HologresCHAR(n) 最大为1G。

VARCHAR(n)

VARCHAR(n)

支持

支持

支持

MaxComputeVARCHAR(n)为可变长度字符类型,n为长度。取值范围为1~65535。

HologresVARCHAR(n) 最大为1G。

DATE

DATE

支持

支持

支持

日期类型,格式为yyyy-mm-dd

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数据库的操作权限。

解决方案

  1. 登录Hologres控制台,在左上角选择地域。

  2. 在左侧导航栏单击实例列表,在实例列表详情页,单击目标实例ID进入详情页,然后单击登录实例

  3. 在顶部导航栏单击安全中心,在左侧导航栏单击用户管理,在用户管理详情页,单击右上角新增用户,在弹出的对话框中添加该RAM用户。

  4. 在顶部导航栏单击安全中心,在左侧导航栏单击DB授权,选择用户授权,给RAM用户授权数据库的操作权限。请根据实际情况授予RAM用户权限,相关权限点详情见RAM用户权限授权快速入门