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 开发者版作为一款免费、易用、可扩展的企业数据中台产品,具有协同表格的易用性和数据库强大的数据处理能力,从数据的收集、存储、自动化处理,到可视化、高级统计分析、协作管控等方面都提供了非常好用的功能。