阿里云流计算中维表join VS 流join

简介:

最近业务上使用blink进行清洗数据,使用到了双流join和维表join,今天有同学问我流join和维表join有什么区别。在此我做个简单的说明,描述不对的地方,欢迎大家纠正,后面补充。

流式计算过程中常见的需求是为数据流去补充字段。我们需要补充字段通常会在另一个流中,或者在一个动态表中(一张不断变化的表,静态表可以理解为它的特例)。在另一个流中,这个比较适合于使用流join,例于补齐包裹表中的包裹明细信息。在一个静态表中,使用维表join要更好些,例如包裹明细关联商品明细表去得到商品体积和重量。

流join

流join比较简单,它是两个流之间的join,和传统批上join一样,都是两张表之间的join(table a join table b on a.x=b.x)。具体如何流join语法,这里不做细说,可以查看官方文档。这里主要从下面几个问题进行说明。

1、我们在对A 和 B 进行join时,经常会有这样的疑惑。如果A中的数据先到达,B中的数据后到达,会不会形成堵塞,不会的话又是怎样操作的?
这个是不会的,在对A进行JOIN B时,如果B中的数据没有达到,会先把A中的数据保存到checkpoint中去,等待B到达时再进行join。这里需要注意下的是,采用A LEFT JOIN B的话,虽然B没有达到,但是他还是会把结果传递到下一个节点。

2、流中的撤回是如何实现的?是不是所有场景都可以
撤回(retraction)可以理解成传统意义上的更新操作。可以看下面的例子
image

没有撤回会导致结果不正确。在数据源入口处增加last_value操作就可以实现撤回。

create view table_count as
SELECT 
word,
count(num) AS cnt 
FROM table by word

create view table_lastValue as 
SELECT
word,
last_value(cnt) as cnt
FROM table_count
GROUP BY word;

把上面图片中的SQL改成这样就行了。

SELECT
cnt,
count(word) as freq
FROM table_lastValue 
GROUP BY cnt 

image
注意: 如果采用的是metaq,并且已经消费了消息,这种情况下是没办法进行撤回的。

维表join

由于维表是一个不断变化的表,如果用传统的join是肯定不行的,因为我们不知道是join的哪一时刻。所以维表join在使用时要指定下的它的join时刻。详细的语法可以查看下官方文档。这里主要阐述下几个注意事项。

1、使用 JOIN 当前维表功能需要注意的是,JOIN行为只发生在处理的时刻(processing time),即使维表中的数据都被删了或者修改,之前JOIN流已经发出的关联上的数据也不会被撤回或改变。
2、维表JOIN的ON条件中一定要包括维表primary key的等值条件,因为需要根据key去查维表
3、在使用维表join时,如果数据量超过百万时,要使用LRU进行缓存,不要使用ALL。

此文章转载于智谨的原创!

目录
相关文章
|
7月前
|
流计算
Flink 多个stream合并聚合
Flink 多个stream合并聚合
113 0
Flink 多个stream合并聚合
|
4月前
|
消息中间件 SQL Kafka
实时计算 Flink版产品使用问题之使用StarRocks作为Lookup Join的表是否合适
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
消息中间件 存储 Kafka
实时计算 Flink版产品使用问题之 从Kafka读取数据,并与两个仅在任务启动时读取一次的维度表进行内连接(inner join)时,如果没有匹配到的数据会被直接丢弃还是会被存储在内存中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
Java 数据处理 Apache
实时计算 Flink版产品使用问题之lookup Join hologres的维表,是否可以指定查bitmap
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用合集之flinksql多流join,left右边任意一张表数据到后,是否都会更新test中对应的数
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7月前
|
消息中间件 关系型数据库 MySQL
[flink 实时流基础] 输出算子(Sink)
[flink 实时流基础] 输出算子(Sink)
224 1
|
7月前
|
负载均衡 算法 大数据
[flink 实时流基础] 转换算子
[flink 实时流基础] 转换算子
|
7月前
|
缓存 API 流计算
[实时流基础 flink] 窗口函数
[实时流基础 flink] 窗口函数
164 2
|
7月前
|
存储 监控 数据库
Flink CDC产品常见问题之Lookup Join之后再分组聚合部分数据从零开始如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
7月前
|
缓存 分布式计算 Java
MapReduce编程:join操作和聚合操作
MapReduce编程:join操作和聚合操作
122 0