本文翻译自官网:Query Configuration  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/streaming/query_configuration.html

Flink Table Api & SQL 翻译目录

表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 概念 —— 查询配置的更多相关文章

  1. 【翻译】Flink Table Api & SQL —Streaming 概念 ——在持续查询中 Join

    本文翻译自官网 :  Joins in Continuous Queries   https://ci.apache.org/projects/flink/flink-docs-release-1.9 ...

  2. 【翻译】Flink Table Api & SQL —Streaming 概念 ——动态表

    本文翻译自官网:Flink Table Api & SQL 动态表 https://ci.apache.org/projects/flink/flink-docs-release-1.9/de ...

  3. 【翻译】Flink Table Api & SQL —Streaming 概念 —— 时态表

    本文翻译自官网: Temporal Tables https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/strea ...

  4. 【翻译】Flink Table Api & SQL ——Streaming 概念

    本文翻译自官网:Streaming 概念  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/streamin ...

  5. 【翻译】Flink Table Api & SQL —Streaming 概念 ——时间属性

    本文翻译自官网: Time Attributes   https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/str ...

  6. 【翻译】Flink Table Api & SQL —Streaming 概念 —— 表中的模式匹配 Beta版

    本文翻译自官网:Detecting Patterns in Tables Beta  https://ci.apache.org/projects/flink/flink-docs-release-1 ...

  7. 【翻译】Flink Table Api & SQL — 流概念

    本文翻译自官网:Streaming Concepts  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/st ...

  8. Flink Table Api & SQL 翻译目录

    Flink 官网 Table Api & SQL  相关文档的翻译终于完成,这里整理一个安装官网目录顺序一样的目录 [翻译]Flink Table Api & SQL —— Overv ...

  9. 【翻译】Flink Table Api & SQL —— 概念与通用API

    本文翻译自官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/common.html Flink Tabl ...

随机推荐

  1. MySQL/MariaDB数据库的冷备份和还原

    MySQL/MariaDB数据库的冷备份和还原 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL/MariaDB数据库的备份和还原概述 1>.为什么要备份 为了 ...

  2. MySQL/MariaDB数据库的查询缓存优化

    MySQL/MariaDB数据库的查询缓存优化 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL架构 Connectors(MySQL对外提供的交互接口,API): ...

  3. ansible中的docker_container模块

    docker_container模块 1.docker_container模块主要是用于ansible-playbook操作docker容器的一个模块,使用该模块可以实现批量创建docker容器 An ...

  4. 《老子》是帝王术,提倡复古,崇拜圣人,主张愚民,甘居下流,不争上游:4星|李零《人往低处走:<老子>天下第一》

    ​​“ 俗话说,“人往高处走,水往低处流”.<老子>正好相反,它强调的是作“天下谷”.“天下溪”.“天下之牝”,甘居下流,不争上游(第28和第61章).司马谈说,道家的特点是“去健羡,绌聪 ...

  5. 如何有效使用Project(1)——编制进度计划、保存基准

    1.前言: 软件产品的研发.升级.定制等,一般都是以项目的形式进行,此时项目进度计划以及资源使用情况就变成了项目经理关注的重点.如何让项目计划有效可控,及时暴露问题?如何查看资源的负荷情况,看资源分配 ...

  6. Array.Sort(valuesArry);

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  7. mysql udf提权

    参考文章:https://blog.csdn.net/q1352483315/article/details/98483668

  8. Kali Linux 2019.4 vmtool安装

    1.如图点击 2.桌面上光盘把vmtool拿出来 然后解压加权限并执行 3.一路回车即可 如下图安装成功 然后reboot重启即可

  9. gitbase cube.js schema 文件项目

    cube.js 进行数据分析,需要我们编写schema 文件,但是因为gitbase 的原因没发进行自动生成,而且还有些问题 所以做了一些简单的修改 注意直接使用cube-cli 0.9.0 可以自动 ...

  10. CSP-S乱搞记

    还有一年的时间,没人能挡住我前进的脚步 以后不打算写游记了,补完这篇再写就等退役吧,不太想传播什么负能量,走这条路,希望能得到自己想要的东西 Day-n 上了一个月文化课,班主任突然催我搞竞赛??? ...