【翻译】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 ...
随机推荐
- SpringCloud2.0 Ribbon 服务发现 基础教程(四)
1.启动[服务中心]集群,即 Eureka Server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) 2.启动[服务提供者]集群,即 Eureka Cli ...
- Maven之setting.xml 配置详解
文件存放位置 全局配置: ${M2_HOME}/conf/settings.xml 用户配置: ${user.home}/.m2/settings.xml note:用户配置优先于全局配置.${use ...
- WPF MVVM之INotifyPropertyChanged接口的几种实现方式(转)
原地址:https://www.cnblogs.com/xiwang/archive/2012/11/25/2787358.html 序言 借助WPF/Sliverlight强大的数据绑定功能,可以比 ...
- 项目alpha冲刺-测试
作业要求 这个作业属于哪个课程 软件工程1916-W(福州大学) 这个作业要求在哪里 项目Alpha冲刺 团队名称 基于云的胜利冲锋队 项目名称 云评:高校学生成绩综合评估及可视化分析平台 这个作业的 ...
- MySQL备份的三中方式
一.备份的目的 做灾难恢复:对损坏的数据进行恢复和还原需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用 二.备份需要考虑的问题 可以容忍丢失多长时间的数据:恢复数据要在多长时间内 ...
- 集成omnibus-ctl+ chef 制作一个可配置的软件包
前边有写过使用omnibus-ctl 制作软件包的,但是当时没有集成chef,只有一个空壳子,实际上omnibus-ctl 已经内置 了对于chef 的操作(但是我们还需要在添加一个依赖),以下简单说 ...
- ipcs
用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表.共享内存和信号量的信息
- 浅谈SPFA判负环
目录 SPFA判负环 [前言] [不可代替性] [具体实现] SPFA的过程 判负环 [核心代码] [例题] SPFA判负环 有不足的地方请指出 本蒟蒻一定会修改吼 [前言] 最短路的求法中最广为人知 ...
- 4、spark streaming+kafka
一.Receiver模式 1. receiver模式原理图 在SparkStreaming程序运行起来后,Executor中会有receiver tasks接收kafka推送过来的数据.数据会被持久化 ...
- 框架 get 请求乱码
解决方案: 在 tomcat 配置文件中添加 URIEncoding="utf-8"