You need to enable JavaScript to run this app.
导航
JOIN 子句
最近更新时间:2024.05.20 14:28:01首次发布时间:2024.01.22 17:20:01

JOIN 子句用于连表查询。日志服务支持跨日志项目查询、日志主题和 MySQL 外部数据源的联合查询。本文档介绍 JOIN 子句的基本的语法与典型示例。

语法格式

JOIN 子句的语法格式如下。

* |
SELECT 
  Key
FROM table1 AS alias1 
JOIN_TYPE table2 AS alias2
  ON JOIN_CONDITION

参数说明如下:

参数

说明

Key

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

JOIN_TYPE

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

table

日志主题或外部数据源的表。

  • 如果是日志主题,则需指定日志项目名称,例如 project1.table1
  • 位于 JOIN 关键字之前的 table 必须为日志主题;位于 JOIN 关键字之后的 table,可以为日志主题或外部数据源的表。例如 table1 必须为日志主题,table2 可以是日志主题或外部数据源的表。
  • 当名称中包含-/$*&%#@等特殊字符时,需使用双引号 "" 包裹,例如 "test-log.open_api"

alias

表别名。

JOIN_CONDITION

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

说明

JOIN_CONDITION 处需要指定表名时,应填写 AS 指定的列别名,请勿填写原始表名。

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:跨日志项目查询

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

示例 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