flink lookup join[阿里云实时计算 Flink版]

select
table_A.user_id
,max(table_B.end_time) as last_time
from table_A
left join table_B FOR SYSTEM_TIME as of table_A.process_time as table_B
on table_A.user_id=table_B.user_id
and table_B.status=’0′
group by table_A.user_id

如果右表的数据被on条件过滤掉,理论上结果应该是有user_id,last_time为null,为什么我执行select结果没数据

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
12 条回复 A 作者 M 管理员
  1. 如果右表的数据被on条件过滤掉,那么在使用FOR SYSTEM_TIME as of子句时,将找不到匹配的数据,导致左表也找不到相应的历史数据。因此,如果执行select语句没有结果,则说明没有匹配的数据可以用于返回结果。

  2. 如果右表的数据被on条件过滤掉,那么在使用left join时,左表中的所有行都会包含在结果中,而右表中的匹配行将会被包含,没有匹配的行将会被填充为NULL。根据你的查询语句,如果右表中的数据被过滤掉,那么结果应该会返回左表中的所有user_id,而last_time将会被填充为NULL。

  3. 如果右表的数据被on条件过滤掉,那么理论上结果应该是有user_id,last_time为null。如果您的查询结果没有数据,那么可能是因为您的查询语句中存在一些错误或者不完整的地方。例如,您可能没有正确地使用LEFT JOIN或者INNER JOIN等操作符,或者没有正确地使用GROUP BY等操作符。此外,您可能还没有正确地使用WHERE等操作符来过滤数据。因此,您需要仔细检查您的查询语句,并确保它是正确的。

  4. 可能是因为您的查询中缺少了必要的条件,导致无法正确地将左表和右表连接起来。在这种情况下,即使右表中的数据被过滤掉,左表和右表仍然无法连接。因此,建议您检查一下查询语句是否正确,并添加必要的条件以确保正确的连接。

  5. 楼主你好,在Flink中,使用FOR SYSTEM_TIME AS OF进行时间旅行查询时,需要注意以下几点:

    1. 只能在维度表(右表)上进行时间旅行查询,不能在事实表(左表)上进行时间旅行查询。因为事实表是实时更新的,历史数据只存在于维度表中。

    2. 时间旅行查询需要基于事件时间或处理时间进行,如果使用了FOR SYSTEM_TIME AS OF,则查询的是处理时间。因此,在查询语句中需要指定processing-time语义,并将左表的时间字段和右表的时间字段统一为处理时间。

    3. 在执行时间旅行查询时,需要保证左表和右表的时间窗口对齐。即,左表和右表的时间窗口需要有交集,否则右表的数据无法参与到左表的聚合计算中。

    根据你提供的查询语句,可以看到使用了FOR SYSTEM_TIME AS OF进行时间旅行查询,并且指定了左表的process_time字段作为时间字段。但是,你没有给出左表和右表的时间窗口定义,也没有给出左表和右表的时间窗口边界对齐的规则。因此,可能存在以下情况:

    1. 如果左表和右表的时间窗口没有交集,那么右表的数据无法参与到左表的聚合计算中,因此查询结果为空。

    2. 如果左表和右表的时间窗口有交集,但是右表的数据被ON条件过滤掉了,那么左表的聚合计算结果中,对应右表的last_time列值为NULL。如果查询结果为空,可能是因为没有符合条件的左表数据,或者左表和右表的时间窗口没有交集。

    因此,建议你检查一下左表和右表的时间窗口定义,以及左表和右表的时间窗口边界对齐的规则,确保查询语句正确执行。同时,可以尝试将查询语句拆分成多个步骤,逐步排查问题所在。

  6. 您好!根据您提供的SQL语句,在Flink SQL中,如果右表的数据被ON条件过滤掉,LEFT JOIN查询结果中对应的列值将会是NULL。因此,您的SQL语句理论上应该能够返回符合条件的结果,其中last_time列的值为NULL。

    如果您执行SELECT语句后没有返回任何结果,可能是由于没有符合条件的数据。您可以检查以下几个方面:

    1. 检查表A和表B中是否存在符合ON条件的数据。如果不存在,LEFT JOIN查询不会返回任何数据。

    2. 检查表B中是否存在满足WHERE条件的数据。如果不存在,LEFT JOIN查询结果中对应的列值将会是NULL。

    3. 检查表A和表B中是否存在符合GROUP BY条件的数据。如果不存在,GROUP BY查询不会返回任何数据。