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
、first_charge_time
、last_charge_time
。
若项目不处于东 8 区,则可使用时间函数对其进行转化:
format_datetime("time" at time zone 'America/Chicago', 'yyyy-MM-dd')
part_date
、$part_date
为按照项目时区进行转化后的字符串格式的日期,若无精准查询时、分、秒的需求,建议使用分区键的筛选满足时间筛选需求。