【翻译】Flink Table Api & SQL —Streaming 概念 —— 查询配置
本文翻译自官网:Query Configuration https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/streaming/query_configuration.html
表API和SQL查询具有相同的语义,无论其输入是有界批处理输入还是无界流输入。在许多情况下,对流输入的连续查询能够计算与脱机计算的结果相同的准确结果。 但是,这在一般情况下是不可能的,因为连续查询必须限制它们所维护的状态的大小,以避免存储空间用完并能够长时间处理无限制的流数据。 结果,根据输入数据和查询本身的特征,连续查询可能只能提供近似结果。
Flink的Table API和SQL界面提供了用于调整连续查询的准确性和资源消耗的参数。 通过QueryConfig对象指定参数。 QueryConfig可以从TableEnvironment获取,并在转换表时(即,将其转换为DataStream或通过TableSink发出时)传入。
val env = StreamExecutionEnvironment.getExecutionEnvironment
val tableEnv = StreamTableEnvironment.create(env) // obtain query configuration from TableEnvironment
val qConfig: StreamQueryConfig = tableEnv.queryConfig
// set query parameters
qConfig.withIdleStateRetentionTime(Time.hours(12), Time.hours(24)) // define query
val result: Table = ??? // create TableSink
val sink: TableSink[Row] = ??? // register TableSink
tableEnv.registerTableSink(
"outputTable", // table name
Array[String](...), // field names
Array[TypeInformation[_]](...), // field types
sink) // table sink // emit result Table via a TableSink
result.insertInto("outputTable", qConfig) // convert result Table into a DataStream[Row]
val stream: DataStream[Row] = result.toAppendStream[Row](qConfig)
在下文中,我们描述的参数QueryConfig以及它们如何影响查询的准确性和资源消耗。
空闲状态保留时间
许多查询在一个或多个关键属性上聚合或 join 记录。 在流上执行这种查询时,连续查询需要收集记录或维护每个键的部分结果。 如果输入流的密钥域正在发展,即,活动密钥值随时间而变化,则随着观察到越来越多的不同密钥,连续查询将累积越来越多的状态。 但是,一段时间后,密钥通常变得不活动,并且它们的相应状态变得陈旧且无用。
例如,以下查询计算每个会话的点击次数。
SELECT sessionId, COUNT(*) FROM clicks GROUP BY sessionId;
sessionId属性用作分组键,连续查询会为其观察到的每个sessionId保持计数。 sessionId属性会随着时间的推移而发展,并且sessionId值仅在会话结束之前(即一段有限的时间段内)才有效。 但是,连续查询无法了解sessionId的此属性,并且期望每个sessionId值都可以在任何时间出现。 它为每个观察到的sessionId值维护一个计数。 因此,随着观察到越来越多的sessionId值,查询的总状态大小不断增长。
空闲状态保留时间参数定义密钥状态保留多长时间而不被更新,然后再将其删除。 对于上一个示例查询,sessionId的计数将在配置的时间段内未更新时立即删除。
通过删除键的状态,连续查询完全忘记了它之前已经看过该键。 如果处理了带有键的记录(其状态之前已被删除),则该记录将被视为具有相应键的第一条记录。 对于上面的示例,这意味着sessionId的计数将再次从0开始。
有两个参数可配置空闲状态保留时间:
- 最小空闲状态保留时间定义了非活动密钥的状态至少要保留多长时间才能被删除。
- 最大空闲状态保留时间定义非活动密钥的状态在被移除之前最多保持多长时间。
参数说明如下:
val qConfig: StreamQueryConfig = ??? // set idle state retention time: min = 12 hours, max = 24 hours
qConfig.withIdleStateRetentionTime(Time.hours(12), Time.hours(24))
清理状态需要额外的状态,这对于minTime和maxTime的差异越大变得越便宜。 minTime和maxTime之间的差异必须至少为5分钟。
欢迎关注Flink菜鸟公众号,会不定期更新Flink(开发技术)相关的推文

【翻译】Flink Table Api & SQL —Streaming 概念 —— 查询配置的更多相关文章
- 【翻译】Flink Table Api & SQL —Streaming 概念 ——在持续查询中 Join
		本文翻译自官网 : Joins in Continuous Queries https://ci.apache.org/projects/flink/flink-docs-release-1.9 ... 
- 【翻译】Flink Table Api & SQL —Streaming 概念 ——动态表
		本文翻译自官网:Flink Table Api & SQL 动态表 https://ci.apache.org/projects/flink/flink-docs-release-1.9/de ... 
- 【翻译】Flink Table Api & SQL —Streaming 概念 —— 时态表
		本文翻译自官网: Temporal Tables https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/strea ... 
- 【翻译】Flink Table Api & SQL ——Streaming 概念
		本文翻译自官网:Streaming 概念 https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/streamin ... 
- 【翻译】Flink Table Api & SQL —Streaming 概念 ——时间属性
		本文翻译自官网: Time Attributes https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/str ... 
- 【翻译】Flink Table Api & SQL —Streaming 概念 —— 表中的模式匹配 Beta版
		本文翻译自官网:Detecting Patterns in Tables Beta https://ci.apache.org/projects/flink/flink-docs-release-1 ... 
- 【翻译】Flink Table Api & SQL — 流概念
		本文翻译自官网:Streaming Concepts https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/st ... 
- Flink Table Api & SQL 翻译目录
		Flink 官网 Table Api & SQL 相关文档的翻译终于完成,这里整理一个安装官网目录顺序一样的目录 [翻译]Flink Table Api & SQL —— Overv ... 
- 【翻译】Flink Table Api & SQL —— 概念与通用API
		本文翻译自官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/common.html Flink Tabl ... 
随机推荐
- node基础学习——操作文件系统fs
			操作文件系统fs 1.在Node.js中,使用fs模块来实现所有有关文件及目录的创建.写入及删除.在fs模块中,所有对文件及目录的操作都可以使用同步与异步两种方法,具有Sync后缀的方法均为同步方法. ... 
- python代码规范 自动优化工具Black
			自动优化工具Black 在众多代码格式化工具中,Black算是比较新的一个,它***的特点是可配置项比较少,个人认为这对于新手来说是件好事,因为我们不必过多考虑如何设置Black,让 Black 自己 ... 
- hdu1384Intervals(差分约束)
			#include <bits/stdc++.h> using namespace std; ; const int inf = 0x3f3f3f3f; int n, head[maxn], ... 
- Laravel —— 多模块开发
			Laravel 框架比较庞大,更适用于比较大的项目. 为了整个项目文件结构清晰,不同部分分为不同模块很有必要. 一.安装扩展包 1.根据不同 Laravel 版本,选择扩展包版本. packagest ... 
- 15-Flutter移动电商实战-商品推荐区域制作
			1.推荐商品类的编写 这个类接收一个List参数,就是推荐商品的列表,这个列表是可以左右滚动的. /*商品推荐*/class Recommend extends StatelessWidget { ... 
- shell随机数比较
			#!/bin/bash a=$(expr $RANDOM % ) #生成一到一百的随机数 echo $a #打印随机数 b= while true do let b++ echo "比较了第 ... 
- video.js学习笔记
			video.js学习笔记获取用户观看时长 
- js无限轮播算法中干掉if判断
			无限轮播在网页应用中经常见到,这其中算法各有千秋,在学习算法分析一书中发现自增取余方法可以干掉一些不必要的if判断,具体代码如下: var arr= [1,2,3,4,5,6,7,8]; var in ... 
- 洛谷P4343 [SHOI2015]自动刷题机
			题目 易得该题目中的\(n\)和\(k\)具有单调性,满足二分的性质,因此该题目而已用二分来枚举\(n\),然后对于每个\(n\)模拟出它所对应的\(k\),然后注意注意代码细节,并且当当前\(k\) ... 
- 【2019.11.18】SDN阅读作业
			为什么需要SDN?SDN特点? 随着网络的快速发展,传统互联网出现了如传统网络配置复杂度高等诸多问题,这些问题说明网络架构需要革新,可编程网络的相关研究为 SDN 的产生提供了可参考的理论依据 SDN ... 
