Monday, September 6, 2021

SegmentFault 最新的文章

SegmentFault 最新的文章


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

Posted: 05 Sep 2021 07:22 PM PDT

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

image.png

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 语句来轻松得到:

image.png

怎么使用查询接口

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

  • Rest
  • APIPython
  • APISQL 查询插件

Rest API

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

image.png

用这个 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 表格的方式呈现:

image.png

总结

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

No comments:

Post a Comment