库表管理函数

Hologres兼容PostgreSQL,当前支持查看表和数据库存储大小,以及设置数据库和表的属性。

函数

功能

HG_UPDATE_DATABASE_PROPERTY

用于设置数据库的Table Group和Shard Count属性。

HOLOGRES.HG_RELATION_SIZE

支持查看表的明细存储,包括数据、Binlog等存储明细。

PG_DATABASE_SIZE

查看当前连接的数据库和该数据库下内部表的存储规格大小。

PG_RELATION_SIZE

查看表的存储大小。

SET_TABLE_PROPERTY

用于设置表的属性,包括索引、分布列、行存储、列存储以及生命周期等属性。

HG_UPDATE_DATABASE_PROPERTY

  • 描述:用于设置数据库的Table Group和Shard Count属性。

    CALL HG_UPDATE_DATABASE_PROPERTY ('property', 'value');
  • 使用限制

    仅实例的Superuser和数据库的Owner可以调用HG_UPDATE_DATABASE_PROPERTY函数。

  • 参数说明

    • property:属性名称。当前仅支持default_table_group和shard_count两个属性,属性说明如下:

      • default_table_group:设置某个Table Group为默认Table Group。

        说明

        仅Hologres V0.10及以上版本支持使用此参数。如果您的实例是V0.10以下版本,您可以进行实例升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?

      • shard_count:设置默认Table Group的Shard Count(不建议使用)。

    • value:属性值。

  • 示例

    设置默认Table Group为TG120的Table Group,语句如下。

    CALL HG_UPDATE_DATABASE_PROPERTY ( 'default_table_group', 'TG120' );

HOLOGRES.HG_RELATION_SIZE

  • 描述:支持查看表的明细存储,包括数据、Binlog等存储明细。

    SELECT HOLOGRES.HG_RELATION_SIZE('schema.table'[, 'type']) ;
  • 使用限制

    仅Hologre V2.1及以上版本支持使用该函数。

    说明

    如果您的实例是V2.1以下版本,您可以进行实例升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?

  • 参数说明

    • schema.table:表的Schema名称和表名称。

    • type:可选,取值说明如下:

      • data:查看表数据的存储大小。

      • binlog:查看表Binlog的存储大小。

      • mv:如果为该表创建了物化视图,查看物化视图占用的存储大小。

      • all:查看表的总存储量。

  • 示例

    以下示例使用通用聚合函数的示例数据

    • 示例1:查看单表的数据存储。

      SELECT HOLOGRES.HG_RELATION_SIZE ('public.example_table', 'data');
    • 示例2:查看单表的Binlog存储大小。

      SELECT HOLOGRES.HG_RELATION_SIZE ('public.example_table', 'binlog');
    • 示例3:查看数据库下所有表的存储大小。

      SELECT table_schema || '.' || table_name AS table_full_name, 
      pg_size_pretty(hologres.hg_relation_size(quote_ident(table_schema) || '.' || quote_ident(table_name),'data')) AS data_size,
      hologres.hg_relation_size(quote_ident(table_schema) || '.' || quote_ident(table_name),'data') AS  order_size
      FROM information_schema.tables
      WHERE table_schema NOT IN ('pg_catalog','information_schema','hologres','hologres_statistic')
      ORDER BY order_size DESC;

PG_DATABASE_SIZE

  • 描述:查看当前连接的数据库和该数据库下内部表的存储规格大小。

    SELECT PG_DATABASE_SIZE('database_name');
  • 参数说明

    database_name:必填,当前数据库名称。

  • 返回值说明

    返回当前数据库下面所有表的大小和数据库下面产生的WAL(Write-Ahead Log)日志大小。

  • 示例

    SELECT PG_SIZE_PRETTY(PG_DATABASE_SIZE(CURRENT_DATABASE())); 

PG_RELATION_SIZE

  • 描述:查看表的存储大小。

    SELECT PG_RELATION_SIZE('table_name');

    PG_RELATION_SIZE函数统计的是表的存储量,监控指标采集的是实例在整个Pangu目录的文件存储量,Pangu文件包括表的存储量、元数据文件以及因写入、更新、删除产生的临时文件等,因此监控指标的存储量会稍微多于使用PG_RELATION_SIZE函数查询的结果。

  • 使用限制

    • 仅Hologres V1.3.24及以上版本支持使用该函数查看已经开启Hologres Binlog表的Binlog存储量。

      说明

      如果您的实例是V1.3.24以下版本,您可以进行实例升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?

    • 仅支持查看内部表的存储规格大小,不支持直接查看分区父表,需要指定分区子表进行查看。

  • 参数说明

    table_name:待查看的表名称。

  • 返回值说明

    • 返回的数据为该表此刻的内存所占空间和物理磁盘空间,返回的数据类型为字符串类型。

    • 未指定分区子表,直接查看分区父表,则返回0。

    • 如果查询到表的存储规格大小是0,则返回空值。

  • 示例

    以下示例使用通用聚合函数的示例数据

    • 查看单表存储

      --查看单表存储
      SELECT PG_SIZE_PRETTY(PG_RELATION_SIZE('example_table'));
    • 查看所有表的存储大小

      SELECT table_schema || '.' || table_name AS table_full_name, 
      PG_SIZE_PRETTY(PG_RELATION_SIZE(QUOTE_IDENT(table_schema) || '.' || QUOTE_IDENT(table_name))) AS table_size,
      PG_RELATION_SIZE(QUOTE_IDENT(table_schema) || '.' || QUOTE_IDENT(table_name)) AS  order_size
      FROM information_schema.tables
      WHERE table_schema NOT IN ('pg_catalog','information_schema','hologres')
      ORDER BY order_size DESC;

SET_TABLE_PROPERTY

  • 描述:用于设置表的属性,包括索引、分布列、行存储、列存储以及生命周期等属性。

    CALL SET_TABLE_PROPERTY ('table_name', 'property', 'value')
    WHERE PROPERTY IN
        orientation
      clustering_key
      segment_key
      bitmap_columns
      dictionary_encoding_columns
      time_to_live_in_seconds
      distribution_key
    说明

    如果您需要对创建的表进行修改、更新和删除,具体操作请参见ALTER TABLEDROP TABLE

  • 参数说明

    参数

    描述

    table_name

    表名称。您也可以使用Schema限定表名称。

    说明
    • 表名称只能是小写英文字母a~z、大写英文字母A~Z、数字以及下划线(_)的组合,并且以字母开头。

    • 如果表名称有特殊字符,则需要使用双引号""转义。由于系统对大小写不敏感,大写字母A~Z会被认为是小写字母a~z

    property

    属性名称。

    orientation

    用于指定数据库的表在Hologres中是列存储、行存储还是行列共存。

    说明

    该参数仅支持和CREATE TABLE在同一事务中执行。

    clustering_key

    用于在指定的列建立聚簇索引。

    说明

    该参数仅支持和CREATE TABLE在同一事务中执行。

    segment_key

    用于指定某些列作为分段键,例如,指定时间列作为分段键。当查询条件包含分段列时,查询可以通过分段键快速找到相应数据对应的存储位置。

    说明

    该参数仅支持和CREATE TABLE在同一事务中执行。

    bitmap_columns

    用于在指定列构建比特编码,快速过滤分段内部的数据。

    说明

    该参数可单独使用数。

    dictionary_encoding_columns

    用于为指定列的值构建字典映射。

    说明

    字典编码可以转换字符串的比较为数字的比较,加速Group By、Filter等查询。您可以单独使用该参数。

    distribution_key

    用于指定数据库中表的分布策略。

    说明

    该参数仅支持和CREATE TABLE在同一事务中执行。

    time_to_live_in_seconds

    表数据的生命周期,取值为:非负数、整数或浮点数,单位为秒(s)。

    说明

    该参数可单独使用数。

    value

    属性值,如果该参数包含列名,并且列名包含大写字母,则需要添加双引号""

  • 示例

    BEGIN;
    CREATE TABLE ORDERS ( 
      O_ORDERKEY              INTEGER NOT NULL,
      O_CUSTKEY        INTEGER NOT NULL,
      O_ORDERSTATUS    TEXT NOT NULL,
      O_TOTALPRICE     DECIMAL(15,2) NOT NULL,
      O_ORDERDATE      DATE NOT NULL,
      O_ORDERPRIORITY  TEXT NOT NULL,  
      O_CLERK          TEXT NOT NULL, 
      O_SHIPPRIORITY   INTEGER NOT NULL,
      O_COMMENT        TEXT NOT NULL);
    CALL SET_TABLE_PROPERTY ('ORDERS', 'clustering_key', 'O_ORDERKEY:asc,O_CUSTKEY:asc');
    CALL SET_TABLE_PROPERTY ('ORDERS', 'segment_key', 'O_ORDERDATE');
    CALL SET_TABLE_PROPERTY ('ORDERS', 'bitmap_columns', 'O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_SHIPPRIORITY');
    CALL SET_TABLE_PROPERTY ('ORDERS', 'dictionary_encoding_columns', 'O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_SHIPPRIORITY');
    CALL SET_TABLE_PROPERTY ('ORDERS', 'time_to_live_in_seconds', '172800');
    COMMIT;