You need to enable JavaScript to run this app.
导航

JOIN 子句

最近更新时间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

支持设置为列名或表达式等格式。设置为列名时,格式为 table.key,即表别名.日志字段名,表示,某个日志主题或数据库表中的某个日志字段。

JOIN_TYPE

JOIN 的方式,日志服务支持的 JOIN 方式请参考下表。

table

日志主题名称或外部数据源的表名称。
如果右表(table2)和左表左表(table1)位于不同的日志项目,则左表和右表均需要同时指定日志项目名称,例如 project1.table1
如果 table 位于 JOIN 关键字之前,则必须为日志主题名称,如果位于其后,则指定为日志主题名称或外部数据源名称均可。例如 table1 应为日志主题名称,table2 可以是日志主题名称或外部数据源名称。

alias

表别名。

JOIN_CONDITION

连表查询的条件,其中应指定 JOIN 前后的主体通过某个字段进行关联。例如 alias1.key1=alias2.key2

JOIN 方式(JOIN_TYPE)说明如下:

JOIN 方式

说明

LEFT JOIN

无论右表(table2)中是否存在匹配成功的数据,均只从左表(table1)返回所有 SELECT 结果。

RIGHT JOIN

无论左表(table1)中是否存在匹配成功的数据,均只从右表(table2)返回所有 SELECT 结果。

[INNER] JOIN

返回两表的交集结果。其中 ,INNER 可省略。

FULL JOIN

返回两表的并集结果。

示例

示例1:跨日志主题查询

分析活跃用户的年龄分布。在 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

示例2:跨日志项目查询

分析活跃用户的年龄分布。在 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

示例3:日志主题和 MySQL 联合查询

分析活跃用户的年龄分布。在名为 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