timeplus-sql-guide

Polar Sponsor
爱发电 赞助
.NET 9.0

编写并执行 Timeplus 流式 SQL 以进行实时分析。在用户需要创建流、运行流式查询、构建物化视图等场景时使用此技能。

Timplus Streaming SQL Guide. 你是Timplus的专家——高性能实时流分析器.

功能概述

Timplus Streaming SQL Guide. 你是Timplus的专家——高性能实时流分析器.是一项面向实际任务的技能,主要用于Platform 建在流式SQL引擎(Proton)上.;You write 正确,高效.;

核心要点

  • Time.。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。

使用与执行

该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

Timeplus 流式 SQL 指南

您是 Timeplus 领域的专家——这是一款基于流式 SQL 引擎(Proton)构建的高性能实时流分析平台。您编写正确、高效的 Timeplus SQL,并通过兼容 ClickHouse 的 HTTP API 执行。

快速参考

任务 参考文档
接入数据 references/INGESTION.md
转换数据 references/TRANSFORMATIONS.md
输出数据 references/SINKS.md
完整 SQL 语法、数据类型与函数 references/SQL_REFERENCE.md
随机流(模拟数据) references/RANDOM_STREAMS.md
Python 与 JavaScript UDF references/UDFS.md
Python 表函数 references/Python_TABLE_FUNCTION.md
EMIT 子句与 UDAF 发射控制 references/EMIT_AND_UDAF.md

执行 SQL

环境配置

始终使用以下环境变量 —— 切勿硬编码凭证:

- TIMEPLUS_HOST       # 主机名或 IP 地址
- TIMEPLUS_USER       # 用户名
- TIMEPLUS_PASSWORD   # 密码(可为空)

通过 curl 执行 SQL(端口 8123)

端口 8123 是兼容 ClickHouse 的 HTTP 接口。用于执行所有 DDL 和历史查询(如 CREATE、DROP、INSERT、SELECT FROM table(...))。始终使用 -u 参数传入用户名和密码。

注意:若 curl 返回空内容,不表示错误,仅说明该查询未返回任何记录。可通过检查 HTTP 状态码确认执行结果(200 OK 表示成功;4xx/5xx 表示失败)。

# 标准模式:将 SQL 语句通过管道传入 curl
echo "YOUR SQL HERE" | curl "http://${TIMEPLUS_HOST}:8123/" 
  -u "${TIMEPLUS_USER}:${TIMEPLUS_PASSWORD}" 
  --data-binary @-

健康检查:

curl "http://${TIMEPLUS_HOST}:8123/"
# 返回:Ok.

DDL 示例 — 创建流:

echo "CREATE STREAM IF NOT EXISTS sensor_data (
  device_id string,
  temperature float32,
  ts datetime64(3, 'UTC') DEFAULT now64(3, 'UTC')
) SETTINGS logstore_retention_ms=86400000" | 
curl "http://${TIMEPLUS_HOST}:8123/" 
  -u "${TIMEPLUS_USER}:${TIMEPLUS_PASSWORD}" 
  --data-binary @-

带 JSON 输出的历史查询:

echo "SELECT * FROM table(sensor_data) LIMIT 10" | 
curl "http://${TIMEPLUS_HOST}:8123/?default_format=JSONEachRow" 
  -u "${TIMEPLUS_USER}:${TIMEPLUS_PASSWORD}" 
  --data-binary @-

插入数据:

echo "INSERT INTO sensor_data (device_id, temperature) VALUES ('dev-1', 23.5), ('dev-2', 18.2)" | 
curl "http://${TIMEPLUS_HOST}:8123/" 
  -u "${TIMEPLUS_USER}:${TIMEPLUS_PASSWORD}" 
  --data-binary @-

通过 REST API 流式接入(端口 3218)

用于向流中推送事件批次:

curl -s -X POST "http://${TIMEPLUS_HOST}:3218/proton/v1/ingest/streams/sensor_data" 
  -H "Content-Type: application/json" 
  -d '{
    "columns": ["device_id", "temperature"],
    "data": [
      ["dev-1", 23.5],
      ["dev-2", 18.2],
      ["dev-3", 31.0]
    ]
  }'

输出格式

在 URL 后追加 ?default_format= 参数:

格式 适用场景
TabSeparated 默认格式,人类可读
JSONEachRow 每行一个 JSON 对象
JSONCompact 紧凑型 JSON 数组
CSV 逗号分隔格式
Vertical 每列一行,便于人工检查

核心概念

流式查询 vs 历史查询

-- 流式查询:持续执行,永不终止。为默认行为。
SELECT device_id, temperature FROM sensor_data;

-- 历史查询:有界查询,立即返回结果。需使用 table()。
SELECT device_id, temperature FROM table(sensor_data) LIMIT 100;

-- 历史 + 未来查询:包含所有过去事件及所有未来事件
SELECT * FROM sensor_data WHERE _tp_time >= earliest_timestamp();

流式查询中的 ORDER BY 与 LIMIT

流式查询的结果是无界的——新行将持续到达——因此批处理 SQL 中熟悉的 ORDER BY / LIMIT 语义无法直接应用:

  • 非窗口化流式查询中不允许使用 ORDER BY。 排序需要有限输入。仅当上游是有界的(例如 table(...) 历史查询,或窗口聚合 tumble/hop/session),每个窗口闭合后生成一个有限批次,方可对该窗口内结果进行排序。
  • 对流式查询使用 LIMIT n 将在返回 n 行后终止查询。 它并非“按某字段取前 N 名”,而是硬性截断。如需按窗口排名,请配合窗口子句使用 LIMIT n BY window_start,或使用流式原生 Top-K 聚合函数(top_k、min_k、max_k)。
  • 对于历史查询(SELECT ... FROM table(stream)),ORDER BY 和 LIMIT 按常规方式工作。

参见 references/TRANSFORMATIONS.md → 每窗口 Top-N 获取推荐写法。

_tp_time 列

每个流都内置一个 _tp_time datetime64(3, 'UTC') 事件时间列,默认值为数据摄入时间。创建流时可通过 SETTINGS event_time_column='your_column' 设置自定义事件时间列。

流模式

模式 创建方式 行为
append CREATE STREAM(默认) 不可变日志,仅允许新增行
versioned_kv + SETTINGS mode='versioned_kv' 按主键保留最新值
changelog_kv + SETTINGS mode='changelog_kv' 跟踪 Insert/Update/Delete 操作
mutable CREATE MUTABLE STREAM 行级 UPDATE/DELETE(企业版功能)

常见模式

模式 1:建流 → 插入 → 查询

# 1. 创建流
echo "CREATE STREAM IF NOT EXISTS orders (
  order_id string,
  product string,
  amount float32,
  region string
)" | curl "http://${TIMEPLUS_HOST}:8123/" 
  -u "${TIMEPLUS_USER}:${TIMEPLUS_PASSWORD}" 
  --data-binary @-

# 2. 插入数据
echo "INSERT INTO orders VALUES ('o-1','Widget',19.99,'US'), ('o-2','Gadget',49.99,'EU')" | 
  curl "http://${TIMEPLUS_HOST}:8123/" 
  -u "${TIMEPLUS_USER}:${TIMEPLUS_PASSWORD}" 
  --data-binary @-

# 3. 查询历史数据
echo "SELECT region, sum(amount) FROM table(orders) GROUP BY region" | 
  curl "http://${TIMEPLUS_HOST}:8123/?default_format=JSONEachRow" 
  -u "${TIMEPLUS_USER}:${TIMEPLUS_PASSWORD}" 
  --data-binary @-

模式 2:窗口聚合(流式)

echo "SELECT window_start, region, sum(amount) AS revenue
FROM tumble(orders, 1m)
GROUP BY window_start, region
EMIT AFTER WATERMARK AND DELAY 5s" | 
  curl "http://${TIMEPLUS_HOST}:8123/" 
  -u "${TIMEPLUS_USER}:${TIMEPLUS_PASSWORD}" 
  --data-binary @-

模式 3:物化视图流水线

echo "CREATE MATERIALIZED VIEW IF NOT EXISTS mv_revenue_by_region
INTO revenue_by_region AS
SELECT window_start, region, sum(amount) AS total
FROM tumble(orders, 5m)
GROUP BY window_start, region" | 
  curl "http://${TIMEPLUS_HOST}:8123/" 
  -u "${TIMEPLUS_USER}:${TIMEPLUS_PASSWORD}" 
  --data-binary @-

模式 4:测试用随机流

echo "CREATE RANDOM STREAM IF NOT EXISTS mock_sensors (
  device_id string DEFAULT 'device-' || to_string(rand() % 10),
  temperature float32 DEFAULT 20 + (rand() % 30),
  status string DEFAULT ['ok','warn','error'][rand() % 3 + 1]
) SETTINGS eps=5" | 
  curl "http://${TIMEPLUS_HOST}:8123/" 
  -u "${TIMEPLUS_USER}:${TIMEPLUS_PASSWORD}" 
  --data-binary @-

错误处理

常见错误及修复方法:

错误 原因 修复方法
Connection refused 主机地址或端口错误 检查 TIMEPLUS_HOST 及端口 8123 是否开放
Authentication failed 认证凭据错误 检查 TIMEPLUS_USER / TIMEPLUS_PASSWORD
Stream already exists 重复执行 CREATE 改用 CREATE STREAM IF NOT EXISTS
Unknown column 字段名拼写错误或指定了错误的流 运行 DESCRIBE stream_name 查看 schema
Streaming query timeout 在端口 8123 上执行了流式查询 改用 table() 包裹以执行历史查询
Type mismatch 数据类型不匹配 使用显式转换:cast(val, 'float32')
Watermark with delay is only supported with streaming window function 在普通 GROUP BY 查询中使用了 EMIT ... WITH DELAY 移除 EMIT 子句(普通 GROUP BY 默认已在更新时发射),或将源数据包裹在 tumble()/hop()/session() 中

检查流结构:

echo "DESCRIBE sensor_data" | curl "http://${TIMEPLUS_HOST}:8123/" 
  -u "${TIMEPLUS_USER}:${TIMEPLUS_PASSWORD}" 
  --data-binary @-

列出所有流:

echo "SHOW STREAMS" | curl "http://${TIMEPLUS_HOST}:8123/" 
  -u "${TIMEPLUS_USER}:${TIMEPLUS_PASSWORD}" 
  --data-binary @-

查询执行计划:

echo "EXPLAIN SELECT * FROM tumble(sensor_data, 1m) GROUP BY window_start" | 
  curl "http://${TIMEPLUS_HOST}:8123/" 
  -u "${TIMEPLUS_USER}:${TIMEPLUS_PASSWORD}" 
  --data-binary @-

何时查阅参考文档

当用户请求涉及更深入的知识点时,请加载对应参考文档:

  • 创建或修改流、外部流、数据源 → references/INGESTION.md
  • 窗口函数、JOIN、CTE、物化视图、聚合操作 → references/TRANSFORMATIONS.md
  • 输出目标(Sinks)、外部表、Kafka 输出、Webhook → references/SINKS.md
  • 数据类型、完整函数列表、查询设置、全部 DDL 语句 → references/SQL_REFERENCE.md
  • 数据模拟、随机流、测试数据生成 → references/RANDOM_STREAMS.md
  • 编写 Python UDF、JavaScript UDF、远程 UDF、SQL Lambda → references/UDFS.md
  • Python 表函数 → references/Python_TABLE_FUNCTION.md
  • EMIT 子句语法、EMIT AFTER SESSION CLOSE / KEY EXPIRE、事件终止型会话窗口、UDAF has_customized_emit、MAXSPAN/TIMEOUT 约束 → references/EMIT_AND_UDAF.md
  • 定时任务 → references/TASK.md
  • 告警 → references/ALERT.md

相关专题

更多
Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

0

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

0

15

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

2026.10.22

0

15

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

2026.10.22

0

12

剧云人物设定与关系管理教程
剧云人物设定与关系管理教程

本专题介绍剧云人物设定与关系管理,讲解角色小传、性格职业、人物目标、背景资料和关系网络的创建及维护方法。

2026.10.22

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.9万人学习