本文翻译自官网: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. Centos7安装配置Nginx_笔记

    从Nginx官方网站下载稳定的主要分支版本.然后解压开来. 在Linux中需要使用编译工具编译安装Nginx. 首先安装“Development Tools”工具,包含了所有编译Nginx所需的依赖工 ...

  2. Spring Cloud Ribbon负载均衡(快速搭建)

    Spring Cloud Ribbon 是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过 Spring Cloud 的封装, 可以让我们轻松地将面向服务的 ...

  3. Linux代理服务器使用

    1. 介绍 代理(即网络代理)是一种特殊的网络服务, 允许一个网络终端(客户端)通过这个服务与另一个终端(服务器)进行非直接连接,从而提供服务. 其中, 提供代理的网络终端称为代理服务器(Proxy ...

  4. 项目Alpha冲刺——集合

    作业描述 课程: 软件工程1916|W(福州大学) 作业要求: 项目Alpha冲刺(团队) 团队名称: 火鸡堂 作业目标: 完成项目Alpha冲刺 团队信息 队名:火鸡堂 队员学号 队员姓名 博客地址 ...

  5. 项目Alpha冲刺(团队)-第九天冲刺

    格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队) 团队名称:为了交项目干杯 作业目标:描述第九天冲刺的项目进展.问题困难.心得体会 队员姓名与学号 队员学号 ...

  6. JQuery系列(2) - 事件处理

    JQuery事件绑定 (1)on方法 on方法是jQuery事件绑定的统一接口.后面介绍的事件绑定的那些简便方法,其实都是on方法的简写形式. $('li').on('click', function ...

  7. SignalR入门二、使用 SignalR 2 实现服务器广播

    一.概述 这篇教程通过实现一个股票报价的小程序来讲解如何使用SignalR进行服务器端的推送,服务器会模拟股票价格的波动,并把最新的股票价格推送给所有连接的客户端,最终的运行效果如下图所示. 教程:使 ...

  8. django-用户认证模型

    django本身会在mysql里存储一个user数据库 为了和django本身的user表区分 要在第一次迁移数据库前配置认证系统使用的用户模型 settings.py # django认证系统使用的 ...

  9. STM32 IAP程序 源码 和测试代码 有详细的中文注释

    http://bbs.21ic.com/forum.php?mod=viewthread&tid=588265&reltid=624002&pre_pos=2&ext= ...

  10. 每个开发人员必须知道PDB文件知识

    大多数开发人员都意识到PDB文件有助于您进行调试,但仅此而已.如果你不知道PDB文件是怎么回事,不要觉得很糟糕,因为虽然有文档在那里,但它分散在周围,而且大部分是为编译器和调试器编写器准备的.虽然编写 ...