跳到主要内容

STREAM_STATUS

引入或更新于:v1.2.225

提供指定流的状态信息,返回一个单列结果(has_data),其值可以是 true 或 false:

  • true:表示流可能包含变更数据捕获记录。
  • false:表示流当前不包含任何变更数据捕获记录。
备注

结果中的 true(has_data)并不确保一定存在变更数据捕获记录。其他操作,例如执行表压缩操作,也可能导致 true 值,即使实际上没有变更数据捕获记录。

早于 v1.2.933-nightly 的 query,在查询后续版本创建的 stream 状态时,也可能误报 true。这是因为创建 stream 时自动开启了源表的 change tracking。此时读取仍返回零行,依赖该状态的 task 可能空跑。

备注

引用流时可以只指定流名称,例如 STREAM_STATUS('stream_name')。省略数据库名称时,函数使用当前数据库。也可以显式指定数据库,例如 STREAM_STATUS('mydb.stream_name')。

语法​

SELECT * FROM STREAM_STATUS('<database_name>.<stream_name>');
-- 或
SELECT * FROM STREAM_STATUS('<stream_name>'); -- 使用当前数据库

参数​

参数是包含流名称的字符串。使用单引号包裹字符串,例如 's' 或 'mydb.s'。

  • 不要用双引号或反引号替代单引号。例如,"mydb.s"、"mydb"."s" 和 `mydb`.`s` 是 SQL 标识符,不是字符串。
  • 不要在字符串内部嵌套标识符引号。例如,'"mydb"."s"' 和 '`mydb`.`s`' 不等同于 'mydb.s'。函数会把内部引号当作名称的一部分。

这些规则同样适用于任务 WHEN 条件中的 STREAM_STATUS。条件保存成功不代表字符串引用了有效的流。请使用 SELECT * FROM STREAM_STATUS('mydb.s'); 验证名称。

示例​

-- 创建一个带有列 'c' 的表 't'
CREATE TABLE t (c int);

-- 在表 't' 上创建一个流 's'
CREATE STREAM s ON TABLE t;

-- 检查流 's' 的初始状态
SELECT * FROM STREAM_STATUS('s');

-- 结果应为 'false',表示初始时没有变更数据捕获记录
┌──────────┐
│ has_data │
├──────────┤
│ false │
└──────────┘

-- 向表 't' 中插入一个值
INSERT INTO t VALUES (1);

-- 插入后检查流 's' 的更新状态
SELECT * FROM STREAM_STATUS('s');

-- 结果现在应为 'true',表示存在变更数据捕获记录
┌──────────┐
│ has_data │
├──────────┤
│ true │
└──────────┘

-- 指定数据库名称的示例
SELECT * FROM STREAM_STATUS('mydb.s');
欢迎体验 Databend Cloud

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

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

注册即领 ¥200 代金券。

注册体验