(3)输出模式详解

由于查询的方式和业务需求的不同,会产生不同的输出模式,在这里主要是有三种输出模式:

A)Append mode(default):仅仅从上次触发计算到当前新增的行会被输出到sink。仅仅支持行数据插入结果表后不进行更改的query操作。因此,这种方式能保证每行数据仅仅输出一次。例如,带有Select,where,map,flatmap,filter,join等的query操作支持append模式。

B)Complete mode:每次trigger都会将整个结果表输出到sink。这个是针对聚合操作的。

C) Updata mode:仅仅是自上次trigger之后结果表有变更的行会输出到sink。在以后的版本中会有更详细的信息。

1. 查询和输出模式对应关系

不同类型的Streaming query支持不同的输出模式。

Query Type

支持的输出模式

注释

带聚合的查询

Aggregation on event-time with watermark

Append,

 Update,

Complete

Append mode和Update mode采用watermark来drop掉历史的聚合状态。Complete mode不会删除历史聚合状态。

Other aggregations

Complete

,

Update

由于没有定义watermark,旧的聚合状态不会drop。Append mode不支持是因为聚合操作是违反该模式的含义的。

mapGroupsWithState

Update

 

flatMapGroupsWithState

Append

Append

flatMapGroupsWithState之后运行Aggregations

Update

Update

flatMapGroupsWithState之后不允许Aggregations

Join

Append

带有join操作的至今不支持update和complete模式。

Other queries

Append, Update

Complete mode不支持这种模式的原因是在结果表保留所有的非聚合的数据是不合适的。

 2. 输出模式和sink

    

Sink

Outputmode

Options

容错

注释

FileSink

Append

path:输出路径,必须指定

Yes, 仅一次处理

支持写入分区表。按照时间分区或许比较好使。

Kafkasink

Append,Update,complete

会有专题

YES。最少一次处理语义。

会有专题

ForeachSink

Append,Update,Complete

None

依赖于具体的ForeachWriter的实现

下面会有例子

ConsoleSink

Append,Complete,Update

NumRows:每个trigger显示的行数。Truncate:假如太长是否删除,默认是true

No

 

MemorySink

Append,Complete

None

No.但是在Completemode 重新query就会导致重新创建整张表

后续sql使用的表名就是queryName

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值