ADB物化视图和表的table_type都是BASE TABLE,如何区分呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在 ADB 中,物化视图和普通表(BASE TABLE)在表级别的元数据信息中并没有区别,都是以 "BASE TABLE" 作为 table_type 标识。如果需要查看某张表是否是物化视图,可以通过查询该表的元数据信息(例如 sys.tables),查看是否有对应的 MV(Materialized View)属性。
具体来说,sys.tables 中对于物化视图的元数据信息包括:
例如,可以通过以下 SQL 查询 sys.tables 中的元数据信息,查看某个表是否是物化视图:
SELECT table_name, table_type, is_mv, mv_def FROM sys.tables WHERE table_schema='your_schema' AND table_name='your_table';
其中,your_schema 和 your_table 分别为你要查询的表的名称和所在的 schema 名称。如果 is_mv=True,那么该表就是一个物化视图,同时可以通过 mv_def 元数据信息查看该物化视图的定义语句。
在ADB中,物化视图和表的table_type都是BASE TABLE,因此无法通过table_type来区分它们。但是,可以通过以下两种方式来区分它们:
通过查询系统表pg_class中的relkind字段来区分。物化视图的relkind值为'm',而表的relkind值为'r'。例如,执行以下查询可以列出所有的物化视图和表:
SELECT relname, relkind FROM pg_class WHERE relkind IN ('r', 'm'); 通过查询系统表pg_matviews来列出所有的物化视图。例如,执行以下查询可以列出所有的物化视图:
SELECT matviewname FROM pg_matviews; 如果查询结果中包含某个表名,则说明该表是一个物化视图。
这里无法区分,如果想查物化视图,可以查这个表,information_schema.mv_infohttps://help.aliyun.com/document_detail/200654.html?spm=a2c4g.200661.0.0.54796726vQ9mgZ,此回答整理自钉群“云数据仓库ADB-开发者群”
阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。