物化视图
物化视图(Materialized View)是DWS中预计算并物化的查询结果,可加速复杂聚合查询。hwc-dws-cli提供物化视图子命令组,支持查看物化视图列表、依赖树、DDL定义、刷新管理、调度修复、级联重建等功能,帮助DBA全面掌握物化视图的运行状况。
| 参数 | 说明 |
|---|---|
| --dry-run | 预览SQL,不执行;仅写命令支持。 |
| --verbose | 同步打印执行的SQL。 |
| --format <json|\table|\csv|\vertical> | 结果的输出格式。 |
| 子命令 | 说明 |
|---|---|
| matview list [--schema <s>] [--owner <o>] | 列出所有物化视图,含依赖层级、分区标记、属主、大小。 |
| matview tree <view> | 展示物化视图 / 基表的级联依赖树(DAG),含每个节点的直接依赖。 |
| matview define <view> [--output <f>] | 查询物化视图及其级联依赖的 DDL 定义语句,支持导出到文件。 |
| matview grants <view> [--output <f>] | 查询物化视图及其级联依赖的 GRANT 语句(ALTER OWNER + GRANT),支持导出到文件。 |
| matview partition <view> | 查询物化视图的分区刷新状态,以及基表与物化视图的分区映射。 |
| matview duration [<view>] [--schema <s>] [--owner <o>] [--name <n>] [--partition] [--history] [--limit <N>] [--broken-only] [--stale-only] | 查询物化视图刷新耗时,省略视图名(<view>)时扫描全库。
|
<view> 参数为物化视图或基表的名称,需带上所属schema前缀,格式为 schema.name 。
# 列出所有物化视图(按 schema / owner 过滤) hwc-dws-cli matview list --format table hwc-dws-cli matview list --schema public --owner dbadmin # 查看基表 / 物化视图的级联依赖树 hwc-dws-cli matview tree public.mview # 查询物化视图的 DDL 定义(可写入文件) hwc-dws-cli matview define public.mview --output mv_ddl.sql # 查询物化视图的 GRANT 语句(可写入文件) hwc-dws-cli matview grants public.mview --output mv_grant.sql # 查询物化视图的分区刷新状态和映射关系 hwc-dws-cli matview partition public.mview # 查询单个物化视图的刷新耗时 hwc-dws-cli matview duration public.mview hwc-dws-cli matview duration public.mview --partition hwc-dws-cli matview duration public.mview --history # 全库扫描所有物化视图刷新耗时摘要(可按 schema / owner 过滤、 名称模糊匹配) hwc-dws-cli matview duration --schema public --owner dbadmin --name mv% --limit 20
| 子命令 | 说明 |
|---|---|
| matview refresh <view> [--partition <s>] [--resetrict] [--cascade <forward\|backward\|all>] | 刷新物化视图数据。
|
| matview alter <view> [--rename <s>] [--query-rewrite <enable\|\disable>] [--refresh-start <s>] [--refresh-every <s>] [--refresh-restrict] [--refresh-on-demand] [--set <key=value>] [--reset <key>] | 修改物化视图。
|
| matview rebuild <view> [--sql <s>] [--sql-file <f>] [--extra-users <s>] [--grant <s>] [--output <f>] [--no-lock] [--kill-sessions <prompt\|always\|never>] [--lock-timeout <N>] | 级联重建物化视图 / 普通视图 / 基表。
|
| matview rebuild-batch [--sql <s>] [--sql-file <f>] [--extra-users <s>] [--grant <s>] [--output <f>] [--no-lock] [--kill-sessions <prompt\|always\|never>] [--lock-timeout <N>] | 批量级联重建多个同质目标,重复依赖只DROP/CREATE一次。无<view>参数,目标名从DDL解析。
|
| matview repair [<view>] [--schema <s>] [--all] [--stale-factor <N>] [--stall-intervals <N>] | 修复 stale 和 broken 的物化视图刷新调度。
|
| matview drop <view> [--cascade] [--kill-sessions <prompt\|always\|never>] [--lock-timeout <N>] | 删除物化视图。
|
alter、drop、repair、rebuild、rebuild-batch 为事务性命令,失败或中断后自动回滚;refresh为非事务命令,提交后无法回滚。执行写命令前建议使用 --dry-run 进行预览。
# 刷新物化视图 hwc-dws-cli matview refresh public.mview --write hwc_dws_cli matview refresh public.part_mview --partition p1 --write # 修改物化视图 hwc-dws-cli matview alter public.mview --rename mview_new --query-rewrite enable --refresh-start "now()" --refresh-every "interval '30s'" --write hwc-dws-cli matview alter public.mview --set mv_refresh_guc=enable_nestloop=off --reset mv_pck_column --write # 删除物化视图 hwc-dws-cli matview drop public.mview --write --confirm-dangerous hwc-dws-cli matview drop public mview drop public.mview --cascade --kill-sessions always -lock-timeout 30 --write --confirm-dangerous # 修复物化视图 hwc-dws-cli matview repair public.mview --dry-run # dry-run 预览是否需要修复 hwc-dws-cli matview repair public.mview --write hwc-dws-cli matview repair --all --stale-factor 0.5 --stall-intervals 2 --write # 重建物化视图 hwc-dws-cli matview rebuild public.mview --sql "CREATE MATERIALIZED VIEW public.mview AS SELECT * FROM public.table WHERE a > 10" --write hwc-dws-cli matview rebuild public.view --sql "CREATE OR REPLACE VIEW public.view AS SELECT * FROM public.table WHERE a > 1" --write hwc-dws-cli matview rebuild public.table --sql "ALTER TABLE public.table MODIFY c bigint" --kill-sessions never --lock-timeout 10 --write hwc-dws-cli matview rebuild public.table --sql "CREATE TABLE public.table_new AS SELECT * from public.table" --extra-users user_read --grant SELECT --write # 批量重建多个同质目标 hwc-dws-cli matview rebuild-batch --sql "CREATE MATERIALIZED VIEW public.mv1 AS SELECT * FROM public.t WHERE a > 10" --sql "CREATE MATERIALIZED VIEW public.mv2 AS SELECT t1.a AS t1a, t1.b AS t1b, t2.a AS t2a, t2.b AS t2b FROM public.table t1 LEFT JOIN public.table2 t2 ON t1.a = t2.a WHERE t2.b > 1" --kill-sessions prompt --lock-timeout 10 --no-lock --write