menu
Is this helpful?

# SQL查询

除了使用前面介绍的分析模型,您还可以通过SQL语句进行分析模型难以实现的高级分析,自定义查询当前集群下所有项目的数据。如果您在SQL查询中发现了有价值的内容,也可以沉淀下来作为报表,和其他模型报表一样在看板展示。

# 在语句输入框中编写查询语句

TE系统使用 Trino 查询引擎,您可以通过标准SQL编写查询语句,下面是一个最简单的例子:

SELECT
"$part_date"
, count(DISTINCT "#user_id")
FROM
ta.v_event_1
WHERE ("$part_date" BETWEEN '2023-01-01' AND '2023-01-07') AND ("$part_event" = 'login')
GROUP BY "$part_date"
ORDER BY "$part_date" ASC

在编写时需要注意下面几点:

  • 字段名请使用双引号 " " 括起,也可以缺省,但如果您查询的字段名带有特殊符号(如$#),则必须使用双引号
  • 字符串请必须使用单引号 ' '括起
  • 可以使用SELECT语句以及WITH子句

在编写查询语句的过程中,您可以参考“表结构”中信息,复制表名或者表内的字段名,您也可以通过“表解析”自动将包含所有字段的查询语句插入到输入框内。

您也可以将当前语句输入框中的内容保存为书签,避免未编写完成的内容丢失,已保存的书签可以在“语句书签”中找到。

如果您需要在查询语句中使用动态时间,或者希望其他成员可以动态调整查询语句中部分内容,可以通过添加 动态参数 实现。

和其他分析模型不同,您可以在SQL查询中使用您有权限的所有项目的数据。举例来说,您可以同时查询项目1和项目2的DAU:

SELECT
  a."$part_date"
, "Project_1_DAU"
, "Project_2_DAU"
FROM
  ((
   SELECT
     "$part_date"
   , count(DISTINCT "#user_id") "Project_1_DAU"
   FROM
     ta.v_event_1
   WHERE (("$part_date" BETWEEN '2023-01-01' AND '2023-01-07') AND ("$part_event" = 'login'))
   GROUP BY "$part_date"
)  a
INNER JOIN (
   SELECT
     "$part_date"
   , count(DISTINCT "#user_id") "Project_2_DAU"
   FROM
     ta.v_event_2
   WHERE (("$part_date" BETWEEN '2023-01-01' AND '2023-01-07') AND ("$part_event" = 'login'))
   GROUP BY "$part_date"
)  b ON (a."$part_date" = b."$part_date"))
ORDER BY a."$part_date" ASC

除了事件表、用户表外,您还可以在查询语句中使用以下数据:

  • 标签分群表:ta.user_result_cluster_{project_id}
  • 历史标签表 :ta.history_tag_{project_id}
  • 历史汇率表 :ta_dim.ta_exchange
  • 维度表
  • 临时表

如果您需要在查询语句中用到下面的数据,可以联系您的客户成功经理了解具体信息:

  • 用户每日镜像表:每日的服务器时区零点,TE系统会将当时的用户状态备份下来,默认保存最近180天的用户表镜像,可在SQL查询中使用
  • 通过二次开发工具导入自定义表
  • 借助 Trino Connectors关联外部数据源

# 查看查询结果并保存为报表

点击“计算”按钮后,您可以查看本次SQL语句的运行结果,最多展示1000行明细数据,如需查看全量数据请下载CSV文件,最大支持100万行数据。您也可以将本次查询结果保存为“临时表”,临时表可以在后续查询中使用。

除了直接查看数据明细,您也可以通过可视化模块中提供的折线图、饼状图等多种图表类型展示数据,您还可以将当前查询语句以及可视化配置保存为报表,并共享给其他成员。

和其他模型报表一样,不同成员在SQL报表中能看到的数据也会受数据权限影响,比如只有iOS渠道权限的成员看到的结果就只包含iOS渠道用户的行为数据。

在数据权限外,您还可以为SQL报表设置事件权限,如果成员不具备所选事件的使用权限则该报表将不会显示任何数据(图例1)。

需要注意的是,无论查询语句中是否使用了其他项目的数据,报表都仅保存在当前项目下。如果查询语句中出现不属于当前项目的表,您还需要确认查看者是否需具备查询涉及的所有项目权限(图例2)。

由于SQL报表的查询语句往往较为复杂,您可以设置展示缓存(图例3),计算完成后会将数据结果缓存下来,下次查询同一报表时会直接读取缓存的数据结果无需重新计算,节省集群资源。

看板定时更新会对所有SQL报表都生效,无论如何设置都将在看板定时更新时进行计算。您可以将非T+1报表的缓存设置成 24 小时,并打开看板定时更新,这样一天只需计算一次即可。

如果查询语句的执行时长超过300秒,则该报表必须设置看板缓存,您无法手动刷新该报表(看板定时刷新仍然生效),也不能进入该报表的探索模块。您可以优化查询语句,或者收窄查询数据范围以加快查询速度。

# 权限说明

公司超管 管理员 分析师 普通成员
SQL查询

权限说明:

● 角色必有

▲ 角色默认有,可以没有

△ 角色默认没有,可以有

○ 角色必没有

需要注意,系统自带的分析师角色不具备“使用 SQL 查询”的权限,如需使用,可在新创建的分析师及以上权限的角色中添加 SQL 使用权限,并提供给使用者