讲师中心 微信公众号
AI工具推荐 视频效率加速

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
目录

热门AI工具

更多
Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

相关专题

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

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

0

2026.10.22

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

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

0

2026.10.22

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

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

0

2026.10.22

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

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

0

2026.10.22

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

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

0

2026.10.22

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

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

0

2026.10.22

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

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

0

2026.10.22

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

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

0

2026.10.22

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

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

0

2026.10.22

热门下载

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

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn