# SQL IDE 使用文档

Thinking Analytics SQL 是基于 yanagishima 开发的一款查询 IDE,使用 Presto 查询引擎,用于帮助 TA 的用户使用 SQL 进行数据查询。以下是查询操作的主界面,我们将分模块为您进行详细介绍:

# 一、查询框

在界面中心的是查询框,您可以在查询框中输入查询语句,您需要注意以下几点:

  • 目前用户只具备查询权限
  • 字段名请使用双引号 " " 括起,也可以缺省,但如果查询字段名带有特殊符号(如$#),则必须使用双引号
  • 字符串请必须使用单引号 ' '括起
  • 语句结束请不要使用 ; 作为结束标识
  • 每条语句中请尽量带上分区键"$part_date""$part_event"以提高查询效率
  • 使用快捷键 Ctrl + Enter 可以直接执行查询语句。

# 二、工具栏

工具栏位于查询框的右下角,主要由四个按钮组成,从左到右分别为:

  1. 规整格式:将查询语句进行格式整理
  2. 复制:复制查询语句
  3. 添加收藏:可以将查询框中的查询语句保存至书签页中
  4. Run:执行查询语句

# 三、标签页

标签页主要有五个 Tab 标签页组成,其功能和介绍分别为:

# 3.1 TreeView(表结构)

TreeView 标签页主要呈现的是表结构:

  • 左侧部分由SchemaTable组成

    • 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_datecurrent_timecurrent_timestamplocaltimelocaltimestamp时不用加圆括号,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_valuelast_value需要搭配over子句使用,over子句中的partition by类似于group by,即按照所给字段分组,order by则会决定进行排序的字段。