Appearance
时间相关函数
以下所有的函数
表达式中参数说明:
expr :表达式
columnName :字段名
datediff
计算日期 startTime
到 endTime
之间相差的天数
语法
sql
datediff(startTime: expr | columnName, endTime: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT datediff("2021-01-01", "2021-01-02")
┌─datediff("2021-01-01", "2021-01-02")───────────────────────┐
│ -1 │
└────────────────────────────────────────────────────────────┘
time_like
时间 like 模糊匹配 true
返回1
,false
返回0
语法
sql
time_like(timestr: expr | columnName, pattern: expr)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型
示例
sql
> SELECT time_like("2021-11-01", "%11-0%")
┌─time_like("2021-11-01", "%11-0%")───────────────────────┐
│ 1 │
└─────────────────────────────────────────────────────────┘
time_equal
判断 timestr1
和 timestr2
是否相等 true
返回1
,false
返回0
语法
sql
time_equal(timestr1: expr | columnName, timestr2: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型
示例
sql
> SELECT time_equal("2021-11-01", "2021-11-02")
┌─time_equal("2021-11-01", "2021-11-02")──────┐
│ 0 │
└─────────────────────────────────────────────┘
time_not_equal
判断 timestr1
和 timestr2
是否不相等 true
返回1
,false
返回0
语法
sql
time_not_equal(timestr1: expr | columnName, timestr2: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型
示例
sql
> SELECT time_not_equal("2021-11-01", "2021-11-02")
┌─time_not_equal("2021-11-01", "2021-11-02")──────┐
│ 1 │
└─────────────────────────────────────────────────┘
time_greater
判断 timestr1
是否大于 timestr2
true
返回1
,false
返回0
语法
sql
time_greater(timestr1: expr | columnName, timestr2: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型
示例
sql
> SELECT time_greater("2021-11-01", "2021-11-02")
┌─time_greater("2021-11-01", "2021-11-02")────────┐
│ 0 │
└─────────────────────────────────────────────────┘
time_greater_equal
判断 timestr1
是否大于等于 timestr2
true
返回1
,false
返回0
语法
sql
time_greater_equal(timestr1: expr | columnName, timestr2: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型
示例
sql
> SELECT time_greater_equal("2021-11-01", "2021-11-02")
┌─time_greater_equal("2021-11-01", "2021-11-02")──────┐
│ 0 │
└─────────────────────────────────────────────────────┘
time_less
判断 timestr1
是否小于 timestr2
true
返回1
,false
返回0
语法
sql
time_less(timestr1: expr | columnName, timestr2: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型
示例
sql
> SELECT time_less("2021-11-01", "2021-11-02")
┌─time_less("2021-11-01", "2021-11-02")───────────┐
│ 1 │
└─────────────────────────────────────────────────┘
time_less_equal
判断 timestr1
是否小于等于 timestr2
true
返回1
,false
返回0
语法
sql
time_less_equal(timestr1: expr | columnName, timestr2: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型
示例
sql
> SELECT time_less_equal("2021-11-01", "2021-11-02")
┌─time_less_equal("2021-11-01", "2021-11-02")────────────┐
│ 1 │
└────────────────────────────────────────────────────────┘
time_between
判断 timestr1
是否在 timestr2
和 timestr3
之间 true
返回1
,false
返回0
语法
sql
time_between(timestr1: expr | columnName, timestr2: expr | columnName, timestr3: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型
示例
sql
> SELECT time_between("2021-11-01", "2021-10-01", "2021-12-01")
┌─time_between("2021-11-01", "2021-10-01", "2021-12-01")──────────┐
│ 1 │
└─────────────────────────────────────────────────────────────────┘
time_between_equal
判断 timestr1
是否在 timestr2
和 timestr3
之间或相等 true
返回1
,false
返回0
语法
sql
time_between_equal(timestr1: expr | columnName, timestr2: expr | columnName, timestr3: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型
示例
sql
> SELECT time_between_equal("2021-11-01", "2021-10-01", "2021-12-01")
┌─time_between_equal("2021-11-01", "2021-10-01", "2021-12-01")────┐
│ 1 │
└─────────────────────────────────────────────────────────────────┘
time_add
返回 t1
加上 t2
之后的时间,当 t2
为整数时,视为秒,当 t2
为 String 时,有数值和单位组成,如 10s
可选单位有 d(天)
, h(小时)
, m(分钟)
, ms(毫秒)
, s(秒)
语法
sql
time_add(t1: expr | columnName, t2: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回字符类型的数值
示例
sql
> SELECT time_add("2021-10-01T00:00:00Z", "10m")
┌─time_add("2021-10-01T00:00:00Z", "10m")──────────┐
│ 2021-10-01T00:10:00Z │
└──────────────────────────────────────────────────┘
sql
> SELECT time_add("2021-10-01T00:00:00Z", 100)
┌─time_add("2021-10-01T00:00:00Z", 100)────────────┐
│ 2021-10-01T00:01:40Z │
└──────────────────────────────────────────────────┘
time_minus
返回 t1
减去 t2
之后的时间,t2
的值可参考 time_add
函数
语法
sql
time_minus(t1: expr | columnName, t2: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回字符类型的数值
示例
sql
> SELECT time_minus("2021-10-01T00:00:00Z", "10m")
┌─time_minus("2021-10-01T00:00:00Z", "10m")────────┐
│ 2021-09-30T00:50:00Z │
└──────────────────────────────────────────────────┘
curdate/current_date
返回当前时间的日期部分
语法
sql
curdate/current_date()
参数
无参数
返回值
- 返回字符类型的数值
示例
sql
> SELECT curdate()
> SELECT current_date()
┌─curdate/current_date()─────────────────┐
│ 2021-10-01 │
└────────────────────────────────────────┘
current_time/curtime
返回当前时间的时间部分
语法
sql
current_time/curtime()
参数
无参数
返回值
- 返回字符类型的数值
示例
sql
> SELECT current_time()
> SELECT curtime()
┌─current_time/curtime()───────────────┐
│ 15:01:02 │
└──────────────────────────────────────┘
current_timestamp
返回当前时间
语法
sql
current_timestamp()
参数
无参数
返回值
- 返回 DateTime 类型的数值
示例
sql
> SELECT current_timestamp()
┌─current_timestamp()──────────────────────────────────┐
│ 2021-01-01T00:00:00.742Z │
└──────────────────────────────────────────────────────┘
to_unixtime
将 t
转为 unix timestamp
语法
sql
to_unixtime(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT to_unixtime("1970-01-01T08:00:01Z")
┌─to_unixtime("1970-01-01T08:00:01Z")─────────────────────┐
│ 28801 │
└─────────────────────────────────────────────────────────┘
date
获取 t
的日期部分
语法
sql
date(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回字符类型的数值
示例
sql
> SELECT date("2021-10-01T00:00:00Z")
┌─date("2021-10-01T00:00:00Z")───────────┐
│ 2021-10-01 │
└────────────────────────────────────────┘
sql
> SELECT date(1)
┌─date(1)─────────────────────┐
│ 1970-01-01 │
└─────────────────────────────┘
year
获取 t
的年份
语法
sql
year(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT month("2021-10-01T00:00:00Z")
┌─month("2021-10-01T00:00:00Z")──────────┐
│ 2021 │
└────────────────────────────────────────┘
month
获取 t
的月份
语法
sql
month(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT month("2021-10-01T00:00:00Z")
┌─month("2021-10-01T00:00:00Z")─────────┐
│ 10 │
└───────────────────────────────────────┘
day/dayofmonth
获取 t
在日期部分
语法
sql
day/dayofmonth(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT day("2021-10-23T00:00:00Z")
> SELECT dayofmonth("2021-10-23T00:00:00Z")
┌─day/dayofmonth("2021-10-23T00:00:00Z")─────────────────────┐
│ 23 │
└────────────────────────────────────────────────────────────┘
hour
获取 t
的小时部分
语法
sql
hour(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT hour("2021-10-01T10:00:00Z")
┌─hour("2021-10-01T10:00:00Z")─────────────────────┐
│ 10 │
└──────────────────────────────────────────────────┘
minute
获取 t
的分钟部分
语法
sql
minute(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT minute("2021-10-01T00:20:00Z")
┌─minute("2021-10-01T00:20:00Z")─────────────────────┐
│ 20 │
└────────────────────────────────────────────────────┘
second
获取 t
的秒
语法
sql
second(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT second("2021-10-01T00:20:30Z")
┌─second("2021-10-01T00:20:30Z")─────────┐
│ 30 │
└────────────────────────────────────────┘
dayname
返回 t
是星期几,周日到周六分别为 Sunday
, Monday
, Tuesday
, Wednesday
, Thursday
, Friday
, Saturday
语法
sql
dayname(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回字符类型的数值
示例
sql
> SELECT dayname("2021-10-01T00:00:00Z")
┌─dayname("2021-10-01T00:00:00Z")───────────────────┐
│ Friday │
└───────────────────────────────────────────────────┘
dayofweek
获取 t
是一周的第几天
语法
sql
dayofweek(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT dayofweek("2021-06-10T00:00:00Z")
┌─dayofweek("2021-06-10T00:00:00Z")─────────────────────┐
│ 5 │
└───────────────────────────────────────────────────────┘
dayofyear
获取 t
是一年中的第几天
语法
sql
dayofyear(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT dayofyear("2021-01-04T00:00:00Z")
┌─dayofyear("2021-01-04T00:00:00Z")─────────────────────┐
│ 4 │
└───────────────────────────────────────────────────────┘
sql
> SELECT dayofyear("2020-02-29T00:00:00Z")
┌─dayofyear("2020-02-29T00:00:00Z")─────────────────────┐
│ 60 │
└───────────────────────────────────────────────────────┘
from_days
将数值 d
转为日期,如果 d
小于 365,将返回 "0000-00-00"
语法
sql
from_days(d: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 String 类型的数值
示例
sql
> SELECT from_days(36500)
┌─from_days(36500)─────────────────────┐
│ 0099-12-07 │
└──────────────────────────────────────┘
to_days
获取 t
距离 0000-00-00
的天数
语法
sql
to_days(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT to_days("2007-10-07T00:00:00Z")
┌─to_days("2007-10-07T00:00:00Z")────┐
│ 733321 │
└────────────────────────────────────┘
from_unixtime
将 ts
unix 时间戳转为时间
语法
sql
from_unixtime(ts: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 DateTime 类型的数值
示例
sql
> SELECT from_unixtime(1623226634)
┌─from_unixtime(1623226634)───────────────────────┐
│ 2021-06-09T16:17:14Z │
└─────────────────────────────────────────────────┘
now/localtime/localtimestamp/sysdate
返回当前时间
语法
sql
now/localtime/localtimestamp/sysdate()
参数
无参数
返回值
- 返回 DateTime 类型的数值
示例
sql
> SELECT now()
> SELECT localtime()
> SELECT localtimestamp()
> SELECT sysdate()
┌─now/localtime/localtimestamp/sysdate()───────────┐
│ 2021-10-01T15:04:05Z │
└──────────────────────────────────────────────────┘
makedate/make_date
根据年份 y
及一年中的第几天 doy
创建一个日期
语法
sql
makedate(y: expr | columnName, doy: expr | columnName)
make_date(y: expr | columnName, doy: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 String 类型的数值
示例
sql
> SELECT make_date(2023, 30)
> SELECT makedate(2023, 30)
┌─make_date/makedate(2023, 30)───────────┐
│ 2023-01-30 │
└────────────────────────────────────────┘
maketime
根据小时 h
,分钟 m
和秒值 s
创建并返回时间值
语法
sql
maketime(h: expr | columnName, m: expr | columnName, s: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 String 类型的数值
示例
sql
> SELECT maketime(16, 20, 59)
┌─maketime(16, 20, 59)─────────────────┐
│ 16:20:59 │
└──────────────────────────────────────┘
monthname
返回 t
的月份的英文名,一月到十二月分别为 January
, February
, March
, April
, May
, June
, July
, August
, September
, October
, November
, December
语法
sql
monthname(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 String 类型的数值
示例
sql
> SELECT monthname("2021-01-01T00:00:00Z")
┌─monthname(2021-01-01T00:00:00Z)───────────┐
│ January │
└───────────────────────────────────────────┘
sec_to_time
根据秒数 s
返回时间部分
语法
sql
sec_to_time(s: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 String 类型的数值
示例
sql
> SELECT sec_to_time(1234)
┌─sec_to_time(1234)─────────────────────┐
│ 00:20:34 │
└───────────────────────────────────────┘
time
获取 t
的时间部分
语法
sql
time(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 String 类型的数值
示例
sql
> SELECT time("2021-10-01T15:04:05Z")
┌─time(2021-10-01T15:04:05Z)───────────┐
│ 15:04:05 │
└──────────────────────────────────────┘
time_to_sec
将 t
的时间部分转为秒
语法
sql
time_to_sec(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT time_to_sec("10:20:30")
┌─time_to_sec("10:20:30")───────────────────┐
│ 37230 │
└───────────────────────────────────────────┘
timediff
返回 t1
和 t2
的差异部分
语法
sql
timediff(t1: expr | columnName, t2: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 String 类型的数值
示例
sql
> SELECT timediff("2000-01-01T00:00:00Z", "2021-06-09T00:00:00Z")
┌─timediff("2000-01-01T00:00:00Z, 2021-06-09T00:00:00Z")──────┐
│ -187920:00:00 │
└─────────────────────────────────────────────────────────────┘
utc_date
获取当前 UTC 时间的日期部分
语法
sql
utc_date()
参数
无参数
返回值
- 返回 String 类型的数值
示例
sql
> SELECT utc_date()
┌─utc_date()──────────────────┐
│ 2021-10-01 │
└─────────────────────────────┘
utc_time
获取当前 UTC 时间的时间部分
语法
sql
utc_time()
参数
无参数
返回值
- 返回 String 类型的数值
示例
sql
> SELECT utc_time()
┌─utc_time()─────────────────────┐
│ 15:04:05 │
└────────────────────────────────┘
utc_timestamp
获取当前 UTC 时间
语法
sql
utc_timestamp()
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 DateTime 类型的数值
示例
sql
> SELECT utc_timestamp()
┌─utc_timestamp()───────────────────────┐
│ 2021-10-01T15:04:05Z │
└───────────────────────────────────────┘
week
返回 t
的在一年中周数
语法
sql
week(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT week("2021-02-20T00:00:00Z")
┌─week("2021-02-20T00:00:00Z")─────────────────────┐
│ 7 │
└──────────────────────────────────────────────────┘
yearweek
返回 t
的年份及周数
语法
sql
yearweek(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT yearweek("2021-10-01T00:00:00Z")
┌─yearweek("2021-10-01T00:00:00Z")─────────────────────┐
│ 202139 │
└──────────────────────────────────────────────────────┘
quarter
返回 t
是第几季度
语法
sql
quarter(t: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT quarter("2021-10-01T00:00:00Z")
┌─quarter("2021-10-01T00:00:00Z")─────────────────────┐
│ 4 │
└─────────────────────────────────────────────────────┘
unix_timestamp
返回 unix 时间戳,如果传入参数 t
,则返回 t
的 unix 时间戳
语法
sql
unix_timestamp([t: expr | columnName])
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int64 类型的数值
示例
sql
> SELECT unix_timestamp()
┌─unix_timestamp()───────────────────────┐
│ 1603041230 │
└────────────────────────────────────────┘
sql
> SELECT unix_timestamp("1970-01-01T00:00:01Z")
┌─unix_timestamp("1970-01-01T00:00:01Z")─────────────────────┐
│ 1 │
└────────────────────────────────────────────────────────────┘
strftime
将时间 tm
转为 layout
格式的字符串
layout
支持的符号如下:
符号 | 意义 | 介绍 | 示例 |
---|---|---|---|
G | 纪元 | text | AD |
C | 纪元世纪 (>=0) | number | 20 |
Y | 纪年 (>=0) | year | 1996 |
x | 周年 | year | 1996 |
w | 周年中的周数 | number | 27 |
e | 星期几 | number | 2 |
E | 星期几 | text | Tuesday; Tue |
y | 年份 | year | 1996 |
D | 一年的第几天 | number | 189 |
M | 一年的第几个月 | month | July; Jul; 07 |
d | 一个月的第几天 | number | 10 |
a | 一天中的半天 | text | PM |
K | 12 小时制的小时数 | number | 0 |
h | 12 小时制的小时数 | number | 12 |
H | 24 小时制的小时数 | number | 0 |
k | 24 小时制的小时数 | number | 24 |
m | 分钟数 | number | 30 |
s | 秒数 | number | 55 |
S | 毫秒数 | number | 978 |
z | 时区 | text | Pacific Standard Time; PST |
Z | 时区偏移值 | zone | -0800; -08:00; America/Los_Angeles |
' | 文本转义符 | delimiter | |
'' | 单引号 | literal |
语法
sql
strftime(tm: expr | columnName, layout: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 String 类型的数值
示例
sql
> SELECT strftime("2021-10-11T15:04:05Z", "YYYY")
┌─strftime("2021-10-11T15:04:05Z", "YYYY")───────────────────┐
│ 2021 │
└────────────────────────────────────────────────────────────┘
strptime
将 layout
格式的字符串 v
转为时间
语法
sql
strptime(v: expr | columnName, layout: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 DateTime 类型的数值
示例
sql
> SELECT strptime("2021-11-01", "YYYY-MM-dd")
┌─strptime("2021-11-01", "YYYY-MM-dd")─────────────────┐
│ 2021-11-01T00:00:00Z │
└──────────────────────────────────────────────────────┘
sql
> SELECT strptime("15:04:05", "HH:mm:ss")
┌─strptime("15:04:05", "HH:mm:ss")───────────────────────┐
│ 0000-01-01T15:04:05Z │
└────────────────────────────────────────────────────────┘
f32_to_f64
将参数 f
转为 Float64
语法
sql
f32_to_f64(f: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Float64 类型的数值
示例
sql
> SELECT f32_to_f64(10)
┌─f32_to_f64(10)────────────────┐
│ 10 │
└───────────────────────────────┘
isnull
返回 e
是否为 NULL
,为空返回 1,不为空返回 0
语法
sql
isnull(e: expr | columnName)
参数
expr
- 表达式。columnName
- 字段名或字段别名。
返回值
- 返回 Int8 类型的数值
示例
sql
> SELECT isnull("")
┌─isnull("")────────────────────┐
│ 0 │
└───────────────────────────────┘
sql
> SELECT isnull(null)
┌─isnull(null)──────────────────┐
│ 1 │
└───────────────────────────────┘
gap_fill
按时间序列插值函数
gap_fill 目前只能与 timeCol
, keyCol
, literal
一起使用,所以配置表如果没有时间列和 key 列暂不支持插值函数
在 where 条件中必须存在时间分隔周期参数:_interval
, 可选单位为 时(h)
, 分(m)
, 秒(s)
, 若不存在 _interval
参数,则使用时间过滤的 end - start
作为 interval,即划分 1 个时间片。
插值是一个数据解压缩的过程,如果查询的时间范围比较广,时间分隔周期参数比较小,数据将会剧烈膨胀。
比如 时间范围过滤为 2021-01-01T00:00:00Z 到 2022-01-01T00:00:00Z,时间分隔周期为 1s,
那么将会返回 365(d) * 24(h) * 60(m) * 60(s) = 31,536,000
条数据。
所以在使用该函数时,请谨慎选择时间范围和时间分隔周期。
多个 gap_fill 函数将会基于同一个时间序列进行填充,允许每个函数使用不同的填充方式
比如 gap_fill(a, method("prev")), gap_fill(b, method("linear")) 的时间基线为同一个
语法
sql
gap_fill(expr: columnName, method("prev"), fill_value("1"), ignore_null(true))
参数
expr
- 表达式。method
- 插值方法,默认 NULL- PREV: 插入在当前时间点之前的最近的一个值
- LINEAR: 线性插值,需为数值类型 (VtInt8, VtInt16, VtInt32, VtInt64, VtFloat32, VtFloat64)
- NULL: 在当前时间点无数据时,插入 null
- NEXT: 插入在当前时间点之后的最近的一个值
- VALUE: 在当前时间点无数据时,插入固定值
fill_value
: 可选参数,当 method 为VALUE
时,使用该参数,其他情况忽略ignore_null
: 可选参数,插值时是否忽略值为 null 的时间,默认 false01: 1, 02: null, 04: 4 gap_fill(..., method("prev"), ignore_null(true)) 忽略 null 值,所以 03 这个点将会取 01 的值 -> 01: 1, 02: 1, 03: 1, 04: 4 gap_fill(..., method("prev"), ignore_null(false)) 不忽略 null 值,所以 03 这个点将会取 02 的值,即为 null -> 01: 1, 02: 1, 03: null, 04: 4
也可以将以上参数放在 where 表达式中,效果一致:
SELECT columnName
FROM table
WHERE TM > $start AND TM < $end
AND _interval = '1s' AND _method = 'prev' AND _fill_value = '123' AND _ignore_null = true
返回值
若不存在上述伪列,则只返回插值后的结果(单列)
示例
查询:
sql
SELECT gap_fill(col, method("prev")) FROM ... WHERE ... AND _interval="1s"
SELECT gap_fill(col, method("value"), fill_value("1")) FROM ... WHERE ... AND _interval="1s"
SELECT gap_fill(col, method("linear")), "1234" FROM ... WHERE ... AND _interval="1s"
结果:
sql
> SELECT gap_fill(col, method("linear")),
gap_fill(col2, method("prev")),
"1234"
FROM ...
WHERE ...
AND _interval='1s';
┌─gap_fill(col, method("linear"))──┬─gap_fill(col2, method("prev"))─────┬─"1234"──┐
│ 10 │ 30 | 1234 |
│ 11 │ 40 | 1234 |
└──────────────────────────────────┴────────────────────────────────────┴─────────┘
sql
> SELECT keyCol,
timeCol,
gap_fill(col, method("linear")),
gap_fill(col2, method("prev")),
"1234"
FROM ...
WHERE ...
AND _interval='1s'
┌─keyCol────────┬─timeCol───────────────┬─gap_fill(col, method("linear"))──┬─gap_fill(col2, method("prev"))─────┬─"1234"──┐
│ abc | 2021-11-01T00:00:00Z | 10 │ 30 | 1234 |
│ abc | 2021-11-01T00:00:01Z | 11 │ 40 | 1234 |
└───────────────┴───────────────────────┴──────────────────────────────────┴────────────────────────────────────┴─────────┘