SQL 查询
1 概述
使用 SQL 查询可以实现自由编写 SQL 代码查询项目内所有数据,满足 TapDB 固有分析模型中无法满足的个性化取数、分析需求。
可从「分析」模块下的「SQL 查询」进入 SQL 查询功能,页面由语句「编写框」、「标签页」构成,其中标签页由「表结构」、「查询历史」、「语句书签」和「查询结果」构成。

2 适用角色与用途
| 角色 | 用途 |
|---|---|
| 管理员 / 分析师 | 了解项目当前数据资产。 |
| 分析师 | 自由编写 SQL 查询项目所有数据,满足 TapDB 固有分析模型中无法满足的个性化取数、分析需求。 |
| 业务人员 | 替换分析师 SQL 代码中的动态参数,满足持续取数、分析需求。 |
3 用表范围与注意事项
3.1 用表范围
在 TapDB SQL 查询功能中,可查询库表范围如下:
| 表 | 库名 | 表名 |
|---|---|---|
| 事件表 | tapdb | view_{{项目 ID}}_events |
| 设备表 | tapdb | view_{{项目 ID}}_devices |
| 用户表 | tapdb | view_{{项目 ID}}_users |
| 用户分群表 | tapdb | view_{{项目 ID}}_cluster |
| 维度属性表 | tapdb_dim | view_{{项目 ID}}_{{维度表名}} |
建议通过「数据表列表」中的「复制表名」功能,将复制该表的表名至剪切板后粘贴至语句编写框,详见本文 5.1.2 部分。
3.2 使用用户分群表的注意事项
所有用户分群数据均存储在同一张表 view_{{项目 ID}}_cluster 中。

可通过筛选分群名,并选择相应分群主体字段,得到该分群下的用户 ID,如下:
分群主体为账号的分群:
select
user_id
from hive.tapdb.view_{{项目 ID}}_cluster
where cluster_name = ‘{{cluster_name}}’
分群主体为设备的分群:
select
device_id
from hive.tapdb.view_{{项目 ID}}_cluster
where cluster_name = ‘{{cluster_name}}’
4 编写与执行 SQL 语句
SQL 语句的编写与执行主要在语句编写框内进行。

4.1 基本语法
TapDB 采用 Presto 查询引擎,适用标准 SQL 语法,但仅可以使用 select 语句以及 with 子句,可以访问 presto 文档 获取 Presto 的语法以及函数的使用方法。
数据表中的字段名建议使用双引号 " " 括起,也可以缺省,但如果查询字段名带有特殊符号(如 $、# 等),则必须使用双引号,
字符串必须使用单引号 ' ' 括起。
4.2 分区与时区
查询事件表时,必须使用分区键 $part_date 进行条件筛选,避免全表扫描。

建议使用以下类型的分区限制条件:
"$part_date" = '2021-11-01'
"$part_date" in ('2021-11-01', '2021-11-02, '2021-11-03')
"$part_date" between '2021-11-01' and '2021-11-11'
SQL 查询功能默认按照东 8 区对时间类型的字段进行转化展示,如事件表中的 time,设备表、账号表中的 activation_time、last_login_time