JOIN 子句用于连表查询。日志服务支持跨日志项目查询、日志主题和 MySQL 外部数据源的联合查询。本文档介绍 JOIN 子句的基本的语法与典型示例。
JOIN 子句的语法格式如下。
* | SELECT Key FROM table1 AS alias1 JOIN_TYPE table2 AS alias2 ON JOIN_CONDITION
参数说明如下:
参数 | 说明 |
---|---|
Key | 日志字段或表达式等。设置为字段时,格式为 |
JOIN_TYPE | JOIN 方式,日志服务支持的 JOIN 方式请参考下表。 |
table | 日志主题或外部数据源的表。
|
alias | 表别名。 |
JOIN_CONDITION | 连表查询的条件,应指定 JOIN 前后的主体通过某个字段进行关联。例如 说明 JOIN_CONDITION 处需要指定表名时,应填写 AS 指定的列别名,请勿填写原始表名。 |
JOIN 方式(JOIN_TYPE)说明如下:
JOIN 方式 | 说明 |
---|---|
LEFT JOIN | 无论右表(table2)中是否存在匹配成功的数据,均只从左表(table1)返回所有 SELECT 结果。 |
RIGHT JOIN | 无论左表(table1)中是否存在匹配成功的数据,均只从右表(table2)返回所有 SELECT 结果。 |
[INNER] JOIN | 返回两表的交集结果。其中 ,INNER 可省略。 |
FULL JOIN | 返回两表的并集结果。 |
场景
分析活跃用户的年龄分布。在 topic1 中统计访问量,并根据 userid/uid 在 topic2 中统计访问来源的年龄分布。
检索分析语句
* | select count(*) as pv, t2.age as age_group from project.topic1 as t1 left join project.topic2 as t2 on t1.userid = t2.uid group by t2.age order by pv desc
检索分析结果
age_group | pv |
---|---|
10~20 | 8000 |
20~30 | 5000 |
30~40 | 2000 |
场景
分析活跃用户的年龄分布。在 project1 日志项目的 topic1 日志主题中统计访问量,并根据 userid/uid 在 project2 日志项目的 topic2 日志主题中统计访问来源的年龄分布。
检索分析语句
* | select count(*) as pv, t2.age as age_group from project1.topic1 as t1 left join project2.topic2 as t2 on t1.userid = t2.uid group by t2.age order by pv desc
检索分析结果
age_group | pv |
---|---|
10~20 | 8000 |
20~30 | 5000 |
30~40 | 2000 |
场景
分析活跃用户的年龄分布。在名为 topic1 的日志主题和名为 tls_external_store 的外部数据源中进行联合查询,两个数据源通过 userid 和 uid 字段关联。在 topic1 日志主题中统计访问量,并根据 userid/uid 在 tls_external_store 中统计访问来源的年龄分布。
检索分析语句
* | select count(*) as pv, t2.age as age_group from project.topic1 as t1 left join tls_external_store as t2 on t1.userid = t2.uid group by t2.age order by pv desc
检索分析结果
age_group | pv |
---|---|
10~20 | 8000 |
20~30 | 5000 |
30~40 | 2000 |