查看Dynamic Table表结构和血缘

本文将介绍如何查看Dynamic Table的表结构、当前实例下的所有Dynamic Table、Dynamic Table的血缘关系、Dynamic Table的存储明细以及状态表(State)的管理。

查看Dynamic Table表结构

  • 语法

    SELECT hg_dump_script('[<schema_name>.]<table_name>');
  • 参数说明

    • schema_name:可选,Schema名称。

    • table_name:必填,Dynamic Table的表名称。

查看当前实例下的Dynamic Table

您可以通过hologres.hg_dynamic_table_properties系统表,查看当前实例中所有Dynamic Table以及设置的刷新模式。SQL命令如下。

SELECT dynamic_table_name, property_value FROM hologres.hg_dynamic_table_properties WHERE property_key = 'refresh_mode';

您还可以通过如下SQL命令,查看指定Dynamic Table的所有元数据。

SELECT * FROM hologres.hg_dynamic_table_properties WHERE dynamic_table_name='<dynamic_table_name>';

查看Dynamic Table的血缘

查看单个Dynamic Table表的血缘

您可以通过如下SQL命令,查看指定Dynamic Table的血缘信息。

--查看单个表血缘
SELECT
    d.*,
    CASE WHEN k.dynamic_table_namespace IS NOT NULL THEN
        'd'
    ELSE
        c.relkind
    END
FROM
    hologres.hg_dynamic_table_dependencies d
    LEFT JOIN pg_namespace n ON n.nspname = d.table_namespace
    LEFT JOIN pg_class c ON c.relnamespace = n.oid
        AND c.relname = d.table_name
    LEFT JOIN (
        SELECT
            dynamic_table_namespace,
            dynamic_table_name
        FROM
            hologres.hg_dynamic_table_properties
        GROUP BY
            1,
            2) k ON k.dynamic_table_namespace = d.table_namespace
    AND k.dynamic_table_name = d.table_name
WHERE
    d.dynamic_table_namespace = '<schema_name>'
    AND d.dynamic_table_name = '<dynamic_table_name>'
    AND d.dependency <> 'internal_table';

查看所有Dynamic Table的血缘

您可以通过如下SQL命令,查看当前实例中所有Dynamic Table的血缘信息。

SELECT
    d.*,
    CASE WHEN k.dynamic_table_namespace IS NOT NULL THEN
        'd'
    ELSE
        c.relkind 
    END
FROM
    hologres.hg_dynamic_table_dependencies d
    LEFT JOIN pg_namespace n ON n.nspname = d.table_namespace
    LEFT JOIN pg_class c ON c.relnamespace = n.oid
        AND c.relname = d.table_name
    LEFT JOIN (
        SELECT
            dynamic_table_namespace,
            dynamic_table_name
        FROM
            hologres.hg_dynamic_table_properties
        GROUP BY
            1,
            2) k ON k.dynamic_table_namespace = d.table_namespace
    AND k.dynamic_table_name = d.table_name
WHERE
    d.dependency <> 'internal_table';
说明

base_table_type的取值映射通常如下:

  • r:ordinary table(普通表)。

  • v:view(视图)。

  • m:materialized view(物化视图)。

  • f:foreign table(外部表)。

  • d:Dynamic Table。

查看Dynamic Table存储明细

Dynamic Table表支持通过hologres.hg_relation_size函数查看存储大小以及明细,关于hologres.hg_relation_size函数使用详情,请参见查看表存储明细

状态表(State)管理

增量刷新的Dynamic Table,为了加速数据计算,会在底层生成一张状态表(State),用于存放聚合处理结果,默认存储于默认Table Group中,不支持执行重新分片(Resharding),详情见Dynamic Table概述。此外,如果将刷新模式修改为全量刷新,则状态表(State)将默认被清理。

查看状态表(State)的存储量

通过如下SQL命令,查看状态表的存储大小,其存储计费规则与普通表一致,详情请参见计费概述

SELECT pg_size_pretty(hologres.hg_dynamic_table_state_size('<dynamic_table_name>'));