概述

Datafusion 函数

由于 GreptimeDB 的查询引擎是基于 Apache Arrow DataFusion 构建的,GreptimeDB 继承了 DataFusion 中所有内置的函数。这些函数包括:

  • 聚合函数: 如 COUNTSUMMINMAX 等。详细列表请参阅 聚合函数
  • 标量函数: 如 ABSCOSFLOOR 等。详细列表请参阅 标量函数
  • 窗口函数: 对相关的一组行记录执行计算。详细列表请参阅 窗口函数

要查看所有 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);
  2. +------------------------------------+
  3. | clamp(Int64(10),Int64(0),Int64(1)) |
  4. +------------------------------------+
  5. | 1 |
  6. +------------------------------------+
  1. SELECT CLAMP(0.5, 0, 1);
  2. +---------------------------------------+
  3. | clamp(Float64(0.5),Int64(0),Int64(1)) |
  4. +---------------------------------------+
  5. | 0.5 |
  6. +---------------------------------------+
  • mod(x, y) 获取一个数除以另一个数的余数:
  1. SELECT mod(18, 4);
  2. +-------------------------+
  3. | mod(Int64(18),Int64(4)) |
  4. +-------------------------+
  5. | 2 |
  6. +-------------------------+
  • pow(x, y) 获取一个数的幂值:
  1. SELECT pow(2, 10);
  2. +-------------------------+
  3. | pow(Int64(2),Int64(10)) |
  4. +-------------------------+
  5. | 1024 |
  6. +-------------------------+

日期和时间函数

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);
  2. +------------------+
  3. | isnull(Int64(1)) |
  4. +------------------+
  5. | 0 |
  6. +------------------+
  1. SELECT isnull(NULL);
  2. +--------------+
  3. | isnull(NULL) |
  4. +--------------+
  5. | 1 |
  6. +--------------+
  • build() 查询 GreptimeDB 构建信息。
  • version() 查询 GreptimeDB 版本信息。
  • database() 查询当前会话数据库:
  1. select database();
  2. +------------+
  3. | database() |
  4. +------------+
  5. | public |
  6. +------------+

管理函数

GreptimeDB 提供了 ADMIN 语句来执行管理函数,请阅读 ADMIN 文档。