最近更新时间:2024.01.22 17:20:01
首次发布时间:2024.01.22 17:20:01
JOIN 子句用于连表查询。日志服务支持跨日志项目查询、日志主题和 MySQL 外部数据源的联合查询。本文档介绍 JOIN 子句的基本的语法与典型示例。
日志服务支持通过 JOIN 子句进行连表查询,即同时查询某一日志项目中的多个日志主题,或查询指定日志主题与外部 MySQL 数据源。
说明
使用 JOIN 进行连表查询时,JOIN_CONDITION 等处需要指定表名时,应填写 AS 指定的列别名,请勿填写原始表名。
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 方式(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 |
分析活跃用户的年龄分布。在 topic1 日志主题中统计访问量,并根据 userid/uid 在 project2 日志项目的 topic2 日志主题中统计访问来源的年龄分布。
查询分析语句:
* | select count(*) as pv t2.age as age_group from project.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 |