跳到主要内容

REFRESH DYNAMIC TABLE

Introduced or updated: v1.2.945

重新执行动态表的定义查询,并替换其完整存储结果。此命令不会仅处理上次刷新后的变更。

语法​

REFRESH DYNAMIC TABLE
[ <catalog_name>. ][ <database_name>. ]<table_name>

table_name 必须是现有动态表。此命令不能刷新普通表或物化视图。

刷新行为​

  • 刷新提交前,查询仍返回上次存储的结果。读取者只能看到旧结果或新结果,不会看到部分替换的结果。
  • 刷新失败时,之前存储的结果仍然可用。
  • 如果定义查询不返回任何行,刷新成功后动态表将变为空表。
  • 刷新会重新计算完整查询,因此可以反映源表的插入、更新和删除。
  • 同一目标表的刷新由目标表锁串行执行。该锁不会阻止源表上的 DDL 操作。
  • 刷新遵循普通查询的读取语义,不提供固定的跨表事务快照。

刷新需要动态表的 SELECT 权限,以及定义查询读取的所有源表的 SELECT 权限。

源表身份​

Databend 在创建时记录源表 ID。刷新时会检查存储的查询是否仍然解析为相同的源表 ID。

删除源表后,动态表中已有的数据仍可读取。如果源表不存在,刷新会失败。删除源表后创建同名新表并不能修复依赖关系。要使用新源表,请重新创建动态表。

示例​

本示例使用 CREATE DYNAMIC TABLE 中的表。请先执行该示例至第一个 SELECT,不要执行清理命令。

INSERT INTO orders VALUES (3, 10, 300);

-- The stored result still contains the previous totals.
SELECT customer_name, total_amount
FROM customer_totals
ORDER BY customer_name;
┌───────────────┬──────────────┐
│ customer_name │ total_amount │
├───────────────┼──────────────┤
│ alice │ 100 │
│ bob │ 200 │
└───────────────┴──────────────┘
REFRESH DYNAMIC TABLE customer_totals;

SELECT customer_name, total_amount
FROM customer_totals
ORDER BY customer_name;
┌───────────────┬──────────────┐
│ customer_name │ total_amount │
├───────────────┼──────────────┤
│ alice │ 400 │
│ bob │ 200 │
└───────────────┴──────────────┘

没有内置的自动刷新机制。应用程序或外部调度器必须在需要时执行 REFRESH DYNAMIC TABLE。源表较大时,全量刷新可能产生较高开销。

欢迎体验 Databend Cloud

基于 Rust + 对象存储构建的新一代多模态数仓,一个平台即可进行 BI、向量、全文检索及地理空间分析。

支持标准 SQL,自动弹性伸缩,助您快速构建现代化数据平台。

注册即领 ¥200 代金券。

注册体验