计算组数据访问授权

本文为您介绍Hologres中如何为计算组授予数据的访问权限。

注意事项

  • 使用计算组A新建Table Group时,Table Group的主计算组默认为计算组A。

  • 计算组之间内存状态为毫秒级的自动实时同步。当使用主计算组写入时,系统会自动将主计算组内存中的数据同步给从计算组,从计算组的CPU和内存也会有少量开销。同时建议不同计算组的规格配置差异不要太过明显,通常不建议超过4倍。

  • 仅实例的默认计算组支持将数据写入外部表。

  • Hologres V2.0版本,计算组对数据读写任务的支持情况为:

    • 加载了Table Group的计算组(Follower计算组),仅可对Table Group中的表执行数据读任务,不支持写。

    • 被设置为Table Group的主计算组(Leader计算组),可对Table Group中的表执行数据读写任务。

    • 未加载Table Group的计算组,不可读写对应Table Group中的数据。

  • Hologres V4.0版本升级计算组实例架构,对数据读写任务的支持情况如下:

    • 需开启GUC hg_warehouse_enable_use_local_resource,详见GUC参数

    • 针对不经Fixed Plan优化的读写任务,无需计算组加载Table Group,即可执行。

    • 可经Fixed Plan优化的读写任务请参见Fixed Plan加速SQL执行

    • 所有写入任务(实时写入、批量写入)仍支持通过DML自动路由功能,路由到Leader计算组中执行。

任务类型/计算组类型

Leader计算组

Follower计算组
(加载Table Group)

其他计算组
(未加载Table Group)

实时写入
(经Fixed Plan优化的写入任务)

支持

不支持

不支持

批量写入
(未经Fixed Plan优化的写入任务)

支持

支持
(4.0能力,需开启GUC)

支持
(4.0能力,需开启GUC)

Key/Value点查、Prefixscan
(经Fixed Plan优化的读任务)

支持

支持

不支持

其他读任务
(未经Fixed Plan优化的读任务)

支持

支持

支持
(4.0能力,需开启GUC)

查看计算组访问Table Group权限

  • 命令格式

    您可以使用如下SQL查看当前实例下所有计算组的Table Group权限信息。

    SELECT * FROM hologres.hg_warehouse_table_groups;
  • 参数说明

    hg_warehouse_table_groups表包含的字段信息如下:

    字段

    字段类型

    说明

    示例

    warehouse_name

    TEXT

    计算组名称。

    init_warehouse

    warehouse_id

    INTEGER

    计算组ID,是计算组的唯一ID。

    1

    database_name

    TEXT

    数据库名称。

    wh_demo

    tablegroup_name

    TEXT

    Table Group名称。

    wh_demo_tg_default

    leader

    BOOLEAN

    该计算组是否为该Table Group的主计算组。

    t

    replica_count

    INTEGER

    Replica数。

    1

计算组加载Table Group(设置Table GroupFollower计算组)

计算组加载Table Group,即将计算组设为Table GroupFollower计算组。

  • 计算组加载了Table Group之后,才能使用计算组操作Table Group中的表。

  • 计算组加载Table Group需要具备实例的Superuser权限。

  • 命令格式:

    CALL hg_table_group_load_to_warehouse ('<database_name>.<table_group_name>', '<warehouse_name>', <replica_count>);
  • 参数说明:

    参数

    类型

    说明

    database_name

    TEXT

    数据库名称。

    table_group_name

    TEXT

    Table Group名称。

    warehouse_name

    TEXT

    需要加载Table Group的计算组名称。

    replica_count

    INTEGER

    Replica数量,默认值1,非必填。

  • 使用示例:

    -- 为计算组warehouse_1加载数据库db1中的table_group_1,replica数为1
    CALL hg_table_group_load_to_warehouse ('db1.table_group_1', 'warehouse_1');
    -- 为计算组warehouse_1加载数据库db1中的table_group_1,replica数为2
    CALL hg_table_group_load_to_warehouse ('db1.table_group_1', 'warehouse_1',2);

设置Table Group的主(Leader)计算组

  • 注意事项

    • 只有设置为主计算组,才能对Table Group中的表做DML操作(包括写入数据等)。

    • 一个Table Group只能有一个主计算组,修改Table Group的主计算组时,主计算组需要重启,请注意业务影响。

    • 设置Table Group的主计算组需要具备实例的Superuser权限。

  • 命令格式

    CALL hg_table_group_set_leader_warehouse ('<database_name>.<table_group_name>', '<warehouse_name>');
  • 参数说明

    参数

    类型

    说明

    database_name

    TEXT

    数据库名称。

    table_group_name

    TEXT

    Table Group名称。

    warehouse_name

    TEXT

    需要设置为主计算组的名称。

计算组卸载Table Group

  • 注意事项

    • 计算组卸载Table Group需要具备实例的Superuser权限

    • 不能卸载设置为Table Group的主计算组的计算组,需要先转换主计算组。

  • 命令格式

    CALL hg_table_group_unload_from_warehouse ('<database_name>.<table_group_name>', '<warehouse_name>');
  • 参数说明

    参数

    类型

    说明

    database_name

    TEXT

    数据库名称。

    table_group_name

    TEXT

    Table Group名称。

    warehouse_name

    TEXT

    需要卸载Table Group的计算组名称。

修改计算组加载Table GroupReplica

  • 注意事项:修改计算组加载Table GroupReplica数需要具备实例的Superuser权限。

  • 命令格式

    CALL hg_table_group_set_warehouse_replica_count ('<database_name>.<table_group_name>', <replica_count>,'<warehouse_name>');
  • 参数说明

    参数

    类型

    说明

    database_name

    TEXT

    数据库名称。

    table_group_name

    TEXT

    Table Group名称。

    replica_count

    INTEGER

    Replica数量。

    warehouse_name

    TEXT

    需要修改加载Table GroupReplica数的计算组名称。

计算组DML自动路由(Beta)

  • 注意事项

    由于一个Table Group仅支持一个主计算组,仅主计算组支持对Table Group执行DML操作。从Hologres V2.2版本起,支持将DML自动路由到Table Group的主计算组执行。使用该功能后,写入任务会自动使用主计算组的资源执行,但写入任务的QPS等指标仍统计在从计算组上。

    说明

    开启多条DML混合事务功能后,无法使用计算组DML自动路由功能。多条DML混合事务功能详情,请参见SQL事务能力

  • 开启或关闭计算组DML自动路由

    您可以使用如下GUC(Grand Unified Configuration)参数,控制Session级别或数据库级别计算组DML自动路由是否开启。

    说明

    计算组DML自动路由GUC参数hg_experimental_enable_warehouse_dml_auto_routing默认开启。

    • Session级别

      -- 开启计算组 DML 自动路由
      SET hg_experimental_enable_warehouse_dml_auto_routing = ON;
      
      -- 关闭计算组 DML 自动路由
      SET hg_experimental_enable_warehouse_dml_auto_routing = OFF;
    • 数据库级别

      -- 开启计算组 DML 自动路由
      ALTER DATABASE <database_name> SET hg_experimental_enable_warehouse_dml_auto_routing = ON;
      
      -- 关闭计算组 DML 自动路由
      ALTER DATABASE <database_name> SET hg_experimental_enable_warehouse_dml_auto_routing = OFF;

      参数说明

      参数

      类型

      说明

      database_name

      TEXT

      数据库名称。

  • 使用示例

    1. 进入HoloWeb开发页面,详情请参见连接HoloWeb并执行查询

    2. HoloWeb开发页面顶部菜单栏,单击安全中心

    3. 在安全中心页面,单击左侧导航栏的计算组管理

    4. 计算组资源管理页签,单击新增计算组,新增名称为read_wh1的计算组。

      说明

      每个实例最多可以创建10个计算组,每个计算组资源最小32CU,最大512CU。若您未分配的计算资源小于32 CU,将不支持新建计算组,如需扩容请参见计算组纵向扩容(Scale up)

      image

    5. 计算组 Table Group 授权管理页签,单击新增计算组授权,设置计算组read_wh1为目标Table Group的从计算组(follower)。

      说明

      新建Table Group请参见Table Group管理

      image

    6. SQL编辑器中,设置当前计算组为read_wh1,分别在打开或关闭计算组DML自动路由时执行DML语句。

      • 当打开计算组DML自动路由时,DML语句会自动路由到Table Group的主计算组(init_warehouse)执行。

        image

      • 当关闭计算组DML自动路由时,DML语句不会自动路由到Table Group的主计算组(init_warehouse)执行,而是使用当前计算组(read_wh1)执行。由于只有主计算组才能对Table Group中的表做DML操作,因此会出现报错。

        image