SQL
GreptimeDB 在查询数据时支持完整的 SQL
语法。
在这篇文档中,我们将使用 monitor
表中的数据作为示例来演示如何查询数据。关于如何创建 monitor
表格并向其中插入数据,请参考表管理和写入数据。
基础查询
通过 SELECT
语句来查询数据。例如,下面的查询返回 monitor
表中的所有数据:
SELECT * FROM monitor;
查询结果如下:
+-----------+---------------------+------+--------+
| host | ts | cpu | memory |
+-----------+---------------------+------+--------+
| 127.0.0.1 | 2022-11-03 03:39:57 | 0.1 | 0.4 |
| 127.0.0.1 | 2022-11-03 03:39:58 | 0.5 | 0.2 |
| 127.0.0.2 | 2022-11-03 03:39:58 | 0.2 | 0.3 |
+-----------+---------------------+------+--------+
3 rows in set (0.00 sec)
SELECT
字段列表中也支持使用函数。
例如,你可以使用 count()
函数来获取表中的总行数:
SELECT count(*) FROM monitor;
+-----------------+
| COUNT(UInt8(1)) |
+-----------------+
| 3 |
+-----------------+
使用函数 avg()
返回某个字段的平均值:
SELECT avg(cpu) FROM monitor;
+---------------------+
| AVG(monitor.cpu) |
+---------------------+
| 0.26666666666666666 |
+---------------------+
1 row in set (0.00 sec)
你还可以只返回函数的结果,例如从时间戳中提取一年中的第几天。
SQL 语句中的 DOY
是 day of the year
的缩写:
SELECT date_part('DOY', '2021-07-01 00:00:00');
结果:
+----------------------------------------------------+
| date_part(Utf8("DOY"),Utf8("2021-07-01 00:00:00")) |
+----------------------------------------------------+
| 182 |
+----------------------------------------------------+
1 row in set (0.003 sec)
时间函数的参数和结果与 SQL 客户端的时区保持一致。
例如,当客户端的时区设置为 +08:00
时,下面两个查询的结果是相同的:
select to_unixtime('2024-01-02 00:00:00');
select to_unixtime('2024-01-02 00:00:00+08:00');
请参考 SELECT 和 Functions 获取更多信息。