SeaTable 新增 SQL 查询接口,让数据分析和查询更方便

SeaTable 新增 SQL 查询接口,让数据分析和查询更方便

SeaTable 开发者版是一款免费易用、可扩展的数据中台产品。它同时结合了协同表格的易用性和数据库强大的数据处理能力。从 2.3 版本开始,SeaTable 在数据分析方面又有了一个重大的增强,那就是对 SQL 查询的支持。SQL 查询功能可以通过界面的插件来使用(如下图),也可以通过 API 来访问。 下面来详细介绍 SQL 查询。

SQL 查询语句介绍

SeaTable 中的 SQL 查询语句的语法和 MySQL 是一致的,能方便大家快速上手。

语法如下:

SELECT [DISTINCT] fields FROM table_name [WhereClause] [OrderByClause] [GroupByClause] [Limit Option]

查询结果是以 JSON 的格式进行返回。当然目前还有一些限制,主要是不支持多表查询 join 语句。

特色函数

SeaTable 目前主要的应用场景是对数据进行统计分析。所以它支持一些特殊的的函数,方便对数据做统计:

  • STARTOFWEEK(date, weekStart):返回一个日期所属的星期,方便按照星期来统计。
  • Quarter(date):返回一个日期所属的季度,方便按照季度来统计。
  • ISODate(date):返回一个 ISO 格式的日期, 如: “2020-09-08”,方便按照天来统计。
  • ISOMonth(date):返回 ISO 格式的月份, 如 “07”,方便按照月份来统计。

举一个例子,如果我们有一个表记录了订单流水,我们要统计每天的销售额,只需要用以下的查询语句:

select sum(sale) from SalesRecord group by ISODate(SalesTime)

如果我们想要得到以下统计图需要的数据,也可以用 SQL 语句来轻松得到:

怎么使用查询接口

SeaTable 提供了三种方法,方便你在任何地方通过网络来查询数据,包括:

  • Rest API
  • Python API
  • SQL 查询插件

Rest API

使用 Rest API 非常简单,你不用再分配和管理用户名、密码,只需要分配一个 API token 就可以。通过网页界面就可以生成一个表格的 API token:

用这个 API token 再获取一个临时的秘钥,然后访问下面的接口就可以了

POST https://dtable-db.seatable.cn/api/v1/query/<dtable-uuid>

一个例子

curl -X POST \
  https://dtable-db.seatable.cn/api/v1/query/4c4ef1ee-86cf-4a53-bd02-2cb7b1662a11/ \
  -H 'Authorization: Token eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzAyOTA3NjMsImR0YWJsZV91dWlkIjoiNGM0ZWYxZWUtODZjZi00YTUzLWJkMDItMmNiN2IxNjYyYTExIiwidXNlcm5hbWUiOiJqaXdlaS5yYW5Ac2VhZmlsZS5jb20iLCJpZF9pbl9vcmciOiJXLTAwMDI2IiwicGVybWlzc2lvbiI6InJ3In0.KG5WQEduNsC8-k61oAcby7bhF6seVXrjnG7rGLsHQds' \
  -H 'Content-Type: application/json' \
  -d '{
	"sql": "select * from Table2 limit 1"
}'

返回的结果

{
	"metadata": [{
		"key": "0000",
		"name": "名称",
		"type": "text",
		"data": null
	}, ...
	],
	"results": [{
		"0000": "fdddf",
		"_creator": "jiwei.ran@seafile.com",
		"_ctime": "2021-07-14T09:10:35.225Z",
		"_id": "JkVwFfWMQ7Sfno1VAxHv8w",
		"_last_modifier": "jiwei.ran@seafile.com",
		"_mtime": "2021-07-23T01:44:32.507Z",
		"_participants": [],
		"qi70": "711776",
		"wcls": "sdf"
	}],
	"success": true
}

Python SDK

上面的 Rest API 已经在 Python SDK 中做了包装,可以方便的调用;

base.query('select name, price, year from Bill')
base.query('select name, sum(price) from Bill group by name')

分别返回:

[
    {'_id': 'PzBiZklNTGiGJS-4c0_VLw', 'name': 'Bob', 'price': 300, 'year': 2019},
    {'_id': 'Ep7odyv1QC2vDQR2raMvSA', 'name': 'Bob', 'price': 300, 'year': 2021},
    {'_id': 'f1x3X_8uTtSDUe9D60VlYQ', 'name': 'Tom', 'price': 100, 'year': 2019},
    {'_id': 'NxeaB5pDRFKOItUs_Ugxug', 'name': 'Tom', 'price': 100, 'year': 2020},
    {'_id': 'W0BrjGQpSES9nfSytvXgMA', 'name': 'Tom', 'price': 200, 'year': 2021},
    {'_id': 'EvwCWtX3RmKYKHQO9w2kLg', 'name': 'Jane', 'price': 200, 'year': 2020},
    {'_id': 'BTiIGSTgR06UhPLhejFctA', 'name': 'Jane', 'price': 200, 'year': 2021}
]

[
    {'SUM(price)': 600, 'name': 'Bob'},
    {'SUM(price)': 400, 'name': 'Tom'},
    {'SUM(price)': 400, 'name': 'Jane'}
]

SQL 查询插件

SeaTable 提供了 SQL 查询插件,用户可以在 UI 层面上直接查询,这样在开发的时候就可以方便地对 SQL 语句做调试。

查询结果会直接以 SeaTable 表格的方式呈现:

总结

以上,我们了解了 SeaTable 的“SQL 查询”的功能及使用,它使得内部分析数据、外部用户查询数据都变得更加方便。当然,这只是其中一个功能。SeaTable 开发者版作为一款免费、易用、可扩展的企业数据中台产品,具有协同表格的易用性和数据库强大的数据处理能力,从数据的收集、存储、自动化处理,到可视化、高级统计分析、协作管控等方面都提供了非常好用的功能。

有没有最新的Rest API的完整文档?包括如下查询 ```
POST https://dtable-db.seatable.cn/api/v1/query/

文档在这里 query - Seafile Server

1 个赞

一查询就直接卡死,删掉了视图整个页面都卡死了,是什么情况?

我这边查询是正常的。你说的卡死,具体浏览器有什么报错吗?你查询的内容是什么?

通过SQL 查询插件,只能查询一百行数据吗?怎么样才能查询所有的数据?

加上 Limit 参数试一下

老哥 这个参数怎么加呀

select * from table_name limit 1000

就是 SQL 语句的 limit 语法。