# SQL IDE 使用文档
Thinking Analytics SQL 是基于 yanagishima 开发的一款查询 IDE,使用 Presto 查询引擎,用于帮助 TA 的用户使用 SQL 进行数据查询。以下是查询操作的主界面,我们将分模块为您进行详细介绍:
# 一、查询框
在界面中心的是查询框,您可以在查询框中输入查询语句,您需要注意以下几点:
- 目前用户只具备查询权限
- 字段名请使用双引号
" "
括起,也可以缺省,但如果查询字段名带有特殊符号(如$
、#
),则必须使用双引号 - 字符串请必须使用单引号
' '
括起 - 语句结束请不要使用
;
作为结束标识 - 每条语句中请尽量带上分区键
"$part_date"
和"$part_event"
以提高查询效率 - 使用快捷键
Ctrl
+Enter
可以直接执行查询语句。
# 二、工具栏
工具栏位于查询框的右下角,主要由四个按钮组成,从左到右分别为:
- 规整格式:将查询语句进行格式整理
- 复制:复制查询语句
- 添加收藏:可以将查询框中的查询语句保存至书签页中
- Run:执行查询语句
# 三、标签页
标签页主要有五个 Tab 标签页组成,其功能和介绍分别为:
# 3.1 TreeView(表结构)
TreeView 标签页主要呈现的是表结构:
左侧部分由
Schema
和Table
组成Schema
中可以查看常规表ta
和临时表temp
,如果没有创建临时表,则只展示ta
,详情参考创建临时表一章Table
中可以查看所有有访问权限的项目的表,包括事件表、用户表以及使用二次开发导入的自定义表
中间部分
Column
呈现的是所选表的所有属性的信息,包括属性名、属性类型以及属性中文名右侧部分
event_name
呈现的是所有的事件以及事件的描述,点击某一事件将呈现该事件的所有属性左下部分可以选择预设的语句模板,点击 Set 可以将所选模板直接生成在查询框中,点击 Run 可以直接执行该模板的语句
# 3.2 History(查询历史)
History 标签页主要呈现的是您进行过的查询语句,其中呈现的是语句的 ID、完成时间、计算耗费时间、查询语句等信息
您可以点击查询 ID 查看查询结果,点击 Set 列的按钮将该语句复制到查询框中,也可以下载此次查询的结果(TSV 或 CSV 格式),您还可以通过右上部分的搜索框进行查询语句的搜索
# 3.3 Bookmark(书签)
Bookmark 标签页呈现的是您通过收藏按钮收藏的语句,书签将会记录在账号中:
您可以直观看到查询语句,点击 Set 可以直接将语句复制到查询框中,点击 Del 则可以从书签中删除该语句
# 3.4 Result(查询结果)
您可以在 Result 标签页中看到查询结果,并且可以下载 TSV 与 CSV 格式;同时点击 Publish 按钮,可以生成一个只读的查询结果页,便于进行分享
需要注意的是,查询结果页面最多只展示 1000 条记录,超过 1000 条的记录可以通过下载功能下到本地后再进行查询,下载功能最大支持的 100 万条数据的下载
# 3.5 Query List(查询列表)
在 Query List 标签页中,您可以看到所有查询的记录,包括执行语句、执行人以及当前状态,也可以在此 Kill 查询语句。
# 四、帮助
查询框的右上角有两个帮助按钮,分别是 Presto 的使用文档以及 IDE 的帮助页面,现阶段如果您对 Presto 查询存有疑问,可以查看 Presto 提供的官方文档, 亦可访问下列网址:
https://prestosql.io/docs/current/index.html
# 五、创建临时表
在 TA 后台 2.2 版本中,放开了创建临时表的能力,可以使用以下语句创建临时表:
CREATE TABLE temp.tablename AS SELECT...
可以将 SELECT 语句的结果创建成临时表,临时表只能在temp
库下创建,因此必须以temp.
开头,具体语法可以查看创建临时表语法 (opens new window)
当创建临时表后,在TreeView
标签页中的Schema
中将会出现temp
库,选中temp
后,Table
会显示所有自己创建的临时表
如果需要访问临时表数据,必须要带上库名temp.
作为开头,比如上图中的temp.testing
,而访问常规表可以缺省ta.
如果需要删除临时表可以适用以下语法
DROP TABLE temp.tablename
每个用户所能同时拥有的临时表上限为 50 个,到达上限后可删除不需要的临时表,即可再创建新的临时表
# 六、使用提示及注意事项
# 6.1 参数变量
可以在语句中加入${变量名}
标识符,创建参数变量,创建的参数将会在语句下方出现输入框,在执行语句前于输入框中填入相应的文本,在执行时将会自动将文本填充至查询语句。
在使用过程中,可以创建多个参数变量,如图:
另外同一参数变量可以在语句中多次被使用,在多表联查时,经常将时间用同一参数进行统一控制:
创建参数变量的好处是,可以直接将带有参数的语句通过Bookmark
书签功能进行保存,下次可以直接调出(点击语句右侧的set
按钮)进行使用,提高语句的复用能力:
使用参数变量有以下几个注意点:
1. 变量名只能包含英文小写字母(a-z)。
2. 输入参数并执行语句后,语句内的参数变量会被传入值替换,此时选中语句输入框,按下`Ctrl` + `Z`,即可将语句回退至原先状态。
# 6.2 try 函数
try(expression)
try 函数会捕捉查询过程中的三种异常情况,并将异常值返回为 NULL。
三种异常情况分别为:
- 除以 0
- 类型转换错误
- 数值越界
使用 try 函数可以有效避免因以上三种异常造成的查询失败,您还可以搭配 COALESCE 函数使用特定值替换 NULL 值。
# 6.3 try_cast 函数
try_cast(value AS type)
try_cast
的作用与 cast 函数一致,都是对值进行类型转换,区别在于try_cast
在类型转换错误时会返回 NULL,避免造成查询失败。
# 6.4 时间/日期函数
使用current_date
、current_time
、current_timestamp
、localtime
与localtimestamp
时不用加圆括号,Presto 也不支持加圆括号的写法,使用时请注意。
# 6.5 开窗函数
Presto 支持开窗函数,窗口函数中有不少非常实用的函数,如 first_value 与 last_value 很适合计算一段时间内第一次或最后一次做某事的值。
比如计算每名用户首次产生购买商品行为时购买的物品:
SELECT user_id,first_purchase_product FROM
(SELECT user_id,first_value(product_name) over(partition by user_id order by time) AS first_purchase_product FROM log.purchase)
GROUP BY user_id,first_purchase_product
first_value
与last_value
需要搭配over
子句使用,over
子句中的partition by
类似于group by
,即按照所给字段分组,order by
则会决定进行排序的字段。