当前位置: 首页 > news >正文

时序数据库

SELECT *,max(lp_index)   FROM lp.tdm_lp_original_data 
where ts >= '2023-12-28 18:11:33.521'
and ts <= '2023-12-29 19:03:12.148' 
INTERVAL(2s)
FILL(PREV)

在时间序列数据库TDengine中,FILL函数与GROUP BY子句结合使用,提供了对于在指定间隔内可能存在的数据空缺的填充策略。FILL(PREV)FILL(linear)FILL函数的不同选项,它们填充数据缺失值的方式有所区别:

  1. FILL(PREV):当数据序列中存在时间间隔内没有数据的情况时,FILL(PREV)会将缺失的数据点填充为前一个时间间隔的值。换句话说,它会复制上一个已知数据点的值来填充当前缺失的时间间隔。

    例如,如果您有以下数据序列:

12:00 - 100
12:10 - 缺失
12:20 - 110

使用FILL(PREV)进行填充后,12:10的值将会被设定为前一时间点12:00的值,即100。

  1. FILL(linear):与FILL(PREV)不同的是,FILL(linear)会对缺失的数据点使用线性插值填充。它假设相邻的数据点之间的值变化是线性的,并且基于此来计算缺失点的值。

    比如,同样的数据序列:

12:00 - 100
12:10 - 缺失
12:20 - 110

使用FILL(linear)进行填充后,12:10的值将会被设定为一个线性插入值,这个值将会介于12:00和12:20的值之间。在这个例子中,由于12:20的值增加了10(从100到了110),那么线性插值的结果将会是105。

选择使用哪种方式取决于数据的性质和特点,以及您希望如何处理数据缺失的策略。FILL(PREV)能够保持数据的平滑性,而FILL(linear)则更适合处理数据变化趋势较为连续的场景。

在某些时间序列数据库中,如果遇到没有数据的情况,你可能希望使用附近时间点的数据来填充这些缺失的数据点。在TDengine这样的时间序列数据库中,提供了几种选项来处理这类情况,但功能的支持和具体实现可能会根据数据库版本和配置而有所不同。

以下是常见的几种方法来处理这种情况:

  1. FILL(PREV):如前所述,这个选项会用前一个非空的数据点来填充当前的空值。

  2. FILL(NEXT):与FILL(PREV)相对,这个选项会用后一个非空的数据点来填充当前的空值。

  3. FILL(linear):对于缺失的时间点,采用线性插值的方法基于周围已知的数据点估算出缺失值。

  4. FILL(NONE):不填充,即使有数据缺失,也不进行处理,这将会保留数据的空缺状态。

  5. 使用子查询或者窗口函数:在不支持直接从附近时间点取数据的数据库中,可能需要使用更为复杂的SQL查询来实现。例如,可以用子查询来寻找每个缺失数据点的前一个和后一个数据点,并通过外部查询逻辑来决定如何填充。

例如,在 PostgreSQL 的 TimescaleDB扩展或者 MySQL 中,你可以使用窗口函数 LEAD() 和 LAG() 来访问时间序列中当前行之前或之后的行。结合条件逻辑,这样可以在没有直接支持的情况下实现类似 FILL(PREV) 或 FILL(NEXT) 的功能。

在使用任何填充策略之前,请检查你所使用的数据库系统文档来确认支持的方法和正确的语法。如果你不确定如何操作,或者在尝试标准方法时遇到问题,可能需要考虑自定义SQL查询或使用数据库提供的程序功能来实现需求。

时间窗口​

时间窗口又可分为滑动时间窗口和翻转时间窗口。

INTERVAL 子句用于产生相等时间周期的窗口,SLIDING 用以指定窗口向前滑动的时间。每次执行的查询是一个时间窗口,时间窗口随着时间流动向前滑动。在定义连续查询的时候需要指定时间窗口(time window )大小和每次前向增量时间(forward sliding times)。如图,[t0s, t0e] ,[t1s , t1e], [t2s, t2e] 是分别是执行三次连续查询的时间窗口范围,窗口的前向滑动的时间范围 sliding time 标识 。查询过滤、聚合等操作按照每个时间窗口为独立的单位执行。当 SLIDING 与 INTERVAL 相等的时候,滑动窗口即为翻转窗口。

SELECT *,max(lp_index)   FROM lp.tdm_lp_original_data 
where lp_time_ticks >= '2023-06-03 18:11:33.521'
and lp_time_ticks <= '2023-12-29 19:03:12.148' 
INTERVAL(20m)  SLIDING(2m)

http://www.lryc.cn/news/279522.html

相关文章:

  • 【第一次使用finalshell连接虚拟机内的centos】小白处理方式
  • Pinia 踩坑记录
  • 在ASP.NET MVC中使用JQuery提供的弹出窗口(模态窗口)
  • 基本工具配置
  • 计算机网络——应用层(3)
  • 配置ssh实现互相免密登陆
  • 【UEFI基础】EDK网络框架(ARP)
  • Linux进阶课:目录(文件夹)与文件操作
  • Flink自定义Source模拟数据流
  • [易语言]使用易语言部署工业级人脸检测模型
  • 2024年海外推广怎么做?
  • Redis分布式锁--java实现
  • 好消息,Linux Kernel 6.7正式发布!
  • 【k8s】Kubernetes 声明式 API、命令式
  • 解锁营销新高度:幽灵鲨CRM推广平台线索对接功能详解
  • uniapp 创建组件
  • Linux--部署 Tomcat 及其负载均衡
  • 影像组学介绍
  • 什么是云服务器?云服务器的工作原理是介绍
  • 【前后端的那些事】前后端环境搭建+树形结构表格实现
  • PHP版学校教务管理系统源码带文字安装教程
  • 前端背景收集之烟花背景
  • PCL 格网法计算点云的占地面积
  • 《设计模式的艺术》笔记 - 面向对象设计原则
  • 《Linux C编程实战》笔记:线程同步
  • leetcode141.环形链表
  • 景联文科技:以高质量数据赋能文生图大模型
  • [论文笔记] PAI-Megatron中qwen和mistral合并到Megtron-LM
  • python设计模式有哪几种
  • C语言从入门到实战——数据在内存中的存储方式