概述
Datafusion 函数
由于 GreptimeDB 的查询引擎是基于 Apache Arrow DataFusion 构建的,GreptimeDB 继承了 DataFusion 中所有内置的函数。这些函数包括:
- 聚合函数: 如
COUNT、SUM、MIN、MAX等。详细列表请参阅 聚合函数 - 标量函数: 如
ABS、COS、FLOOR等。详细列表请参阅 标量函数 - 窗口函数: 对相关的一组行记录执行计算。详细列表请参阅 窗口函数
要查看所有 DataFusion 函数,请参阅 DataFusion 函数。
arrow_cast
arrow_cast 函数来自 DataFusion 的 arrow_cast。其用法如下:
1. arrow_cast(expression, datatype)
其中 datatype 可以是此 列表 中的任何有效 Arrow 数据类型。四种时间戳类型是:
- Timestamp(Second, None)
- Timestamp(Millisecond, None)
- Timestamp(Microsecond, None)
- Timestamp(Nanosecond, None)
(注意 None 表示时间戳不考虑时区)
GreptimeDB 函数
字符串函数
DataFusion 字符串函数。GreptimeDB 提供:
matches(expression, pattern)用于全文检索。
阅读查询日志文档获取更多详情。
数学函数
DataFusion 数学函数。GreptimeDB 额外提供:
clamp(value, lower, upper)将给定值限制在上下界之间:
1. SELECT CLAMP(10, 0, 1);
3. +------------------------------------+
4. | clamp(Int64(10),Int64(0),Int64(1)) |
5. +------------------------------------+
6. | 1 |
7. +------------------------------------+
1. SELECT CLAMP(0.5, 0, 1);
3. +---------------------------------------+
4. | clamp(Float64(0.5),Int64(0),Int64(1)) |
5. +---------------------------------------+
6. | 0.5 |
7. +---------------------------------------+
mod(x, y)获取一个数除以另一个数的余数:
1. SELECT mod(18, 4);
3. +-------------------------+
4. | mod(Int64(18),Int64(4)) |
5. +-------------------------+
6. | 2 |
7. +-------------------------+
pow(x, y)获取一个数的幂值:
1. SELECT pow(2, 10);
3. +-------------------------+
4. | pow(Int64(2),Int64(10)) |
5. +-------------------------+
6. | 1024 |
7. +-------------------------+
日期和时间函数
DataFusion 时间和日期函数。GreptimeDB 额外提供:
date_add(expression, interval)向 Timestamp、Date 或 DateTime 添加一个间隔值:
1. SELECT date_add('2023-12-06'::DATE, '3 month 5 day');
1. +----------------------------------------------------+
2. | date_add(Utf8("2023-12-06"),Utf8("3 month 5 day")) |
3. +----------------------------------------------------+
4. | 2024-03-11 |
5. +----------------------------------------------------+
date_sub(expression, interval)从 Timestamp、Date 或 DateTime 减去一个间隔值:
1. SELECT date_sub('2023-12-06 07:39:46.222'::TIMESTAMP_MS, INTERVAL '5 day');
1. +-----------------------------------------------------------------------------------------------------------------------------------------+
2. | date_sub(arrow_cast(Utf8("2023-12-06 07:39:46.222"),Utf8("Timestamp(Millisecond, None)")),IntervalMonthDayNano("92233720368547758080")) |
3. +-----------------------------------------------------------------------------------------------------------------------------------------+
4. | 2023-12-01 07:39:46.222000 |
5. +-----------------------------------------------------------------------------------------------------------------------------------------+
date_format(expression, fmt)将 Timestamp、Date 或 DateTime格式化:
1. SELECT date_format('2023-12-06 07:39:46.222'::TIMESTAMP, '%Y-%m-%d %H:%M:%S:%3f');
1. +-----------------------------------------------------------------------------------------------------------------------------+
2. | date_format(arrow_cast(Utf8("2023-12-06 07:39:46.222"),Utf8("Timestamp(Millisecond, None)")),Utf8("%Y-%m-%d %H:%M:%S:%3f")) |
3. +-----------------------------------------------------------------------------------------------------------------------------+
4. | 2023-12-06 07:39:46:222 |
5. +-----------------------------------------------------------------------------------------------------------------------------+
支持的格式化符号请参阅 chrono::format::strftime 模块。
to_unixtime(expression)将表达式转换为 Unix 时间戳(秒)。参数可以是整数(毫秒 Unix 时间戳)、Timestamp、Date、DateTime 或字符串类型。如果参数是字符串类型,函数将首先尝试将其转换为 DateTime、Timestamp 或 Date。
1. select to_unixtime('2023-03-01T06:35:02Z');
1. +-------------------------------------------+
2. | to_unixtime(Utf8("2023-03-01T06:35:02Z")) |
3. +-------------------------------------------+
4. | 1677652502 |
5. +-------------------------------------------+
1. select to_unixtime('2023-03-01'::date);
1. +---------------------------------+
2. | to_unixtime(Utf8("2023-03-01")) |
3. +---------------------------------+
4. | 1677628800 |
5. +---------------------------------+
to_timezone(expression, timezone)根据时区转换表达式。参数可以是整数(毫秒 Unix 时间戳)、Timestamp 或字符串类型。如果参数是字符串类型,函数将首先尝试将其转换为 Timestamp。
1. SELECT to_timezone('2022-09-20T14:16:43.012345+08:00', 'Europe/Berlin');
1. +-----------------------------------------------------------------------------+
2. | to_timezone(Utf8("2022-09-20T14:16:43.012345+08:00"),Utf8("Europe/Berlin")) |
3. +-----------------------------------------------------------------------------+
4. | 2022-09-20 08:16:43.012345 |
5. +-----------------------------------------------------------------------------+
1. SELECT to_timezone(1709992225000, 'Asia/Shanghai');
1. +---------------------------------------------------------+
2. | to_timezone(Int64(1709992225000),Utf8("Asia/Shanghai")) |
3. +---------------------------------------------------------+
4. | 2024-03-09 21:50:25 |
5. +---------------------------------------------------------+
timezone()查询当前会话时区:
1. select timezone();
1. +------------+
2. | timezone() |
3. +------------+
4. | UTC |
5. +------------+
系统函数
isnull(expression)检查表达式是否为NULL:
1. SELECT isnull(1);
3. +------------------+
4. | isnull(Int64(1)) |
5. +------------------+
6. | 0 |
7. +------------------+
1. SELECT isnull(NULL);
3. +--------------+
4. | isnull(NULL) |
5. +--------------+
6. | 1 |
7. +--------------+
build()查询 GreptimeDB 构建信息。version()查询 GreptimeDB 版本信息。database()查询当前会话数据库:
1. select database();
3. +------------+
4. | database() |
5. +------------+
6. | public |
7. +------------+
管理函数
GreptimeDB 提供了 ADMIN 语句来执行管理函数,请阅读 ADMIN 文档。
