Flink:Temporal Table 的两种实现方式 Temporal Table DDL 和 Temporal Table Function

《大数据平台架构与原型实现:数据中台建设实战》博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维码进入京东手机购书页面。

从各方收集的资料以及官方文档对 Temporal Joins 和 Temporal Table Function 两部分的描述可以确定的是:

Flink 是先有的 Temporal Table Function,利用它实现了类版本表的功能,注意,是类版本表,不是现在文档中定义的标准版本表概念,后来,Flink 才引入了 Temporal Table (版本表 / 普通表)概念(本文称之为“Temporal Table DDL”方式),同时实现了 SQL 2011 标准,引入了 FOR SYSTEM_TIME AS OF 关键字实现了基于版本表的 Temporal Join

在 Temporal Join 中,有两种模式,分别是:基于事件时间 和 基于处理时间,最初,Temporal Table DDL 和 Temporal Table Function 都支持这两种模式,但后来,由于 FLINK-19830 问题,使用 Temporal Table DDL 定义的时态表不再支持基于处理时间的 Temporal Join,这就是为什么我们今天搜索一些 Temporal Join 的技术文章时,会发现很多 Temporal Table DDL + 基于处理时间的 Temporal Join 示例,但在现在的官方文档中是没有对等示例的。

本质上,Temporal Table DDL 和 Temporal Table Function 是一样的,它们定义出的都是 “版本表”,再次强调一遍:它们定义出的都是 “版本表”,都具有版本回溯(Time Travel)能力

在这里插入图片描述

对 Temporal Table DDL 来说,这是自然的,大家更容易误解的其实是 Temporal Table Function,认为 Temporal Table Function 可以是“版本表” 也可以是 “普通表”,这是受到了 “只能通过 Temporal Table Function 才可以实现基于处理时间的 Temporal Join”结论的影响而产生的错误解读(至少我本人曾这样错误的认为过)。只要我们认真看一下声明一个 Temporal Table Function 的方法就知道了:Table.createTemporalTableFunction(“时间属性列”, “主键列”),你会看到,定义一个 Temporal Table Function 必须同时指定主键和时间戳两个字段,这个 Temporal Table DDL 是一样的

Temporal Table DDL 和 Temporal Table Function 虽然本质上是等价的,但它们之间存在两点差异:

  • SQL 中可以定义 Temporal Table DDL,但不能定义 Temporal Table Function,后者只能在代码中使用 Table API 注册

  • Temporal Table DDL 和 Temporal Table Function 都可以实现 Temporal Join,它们都支持基于事件时间的 Temporal Join,但只有 Temporal Table Function 可以 Temporal Join 任何表/视图的最新版本(即"基于处理时间的 Temporal Join"),而 Temporal Table DDL 最初引入时可以的,后因 FLINK-19830 问题又被禁止

以下是对 Temporal Table DDL 和 Temporal Table Function 的对比总结:

方式基于事件时间的 Temporal Join基于处理事件的 Temporal Join可完全在 SQL 中定义
Temporal Table DDL支持不支持 (曾经支持,因为 Issue FLINK-19830 而在新版本中禁止)可以
Temporal Table Function支持支持(但同样有语义问题,出于兼容考虑才支持)不可以(目前只能在代码中函数注册函数)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/270661.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多线程相关面试题(2024大厂高频面试题系列)

1、聊一下并行和并发有什么区别? 并发是同一时间应对多件事情的能力,多个线程轮流使用一个或多个CPU 并行是同一时间动手做多件事情的能力,4核CPU同时执行4个线程 2、说一下线程和进程的区别? 进程是正在运行程序的实例&#xff…

【MySQL】not in遇上null的坑

今天遇到一个问题: 1、当 in 内的字段包含 null 的时候,正常过滤; 2、当 not in 内的字段包含 null 的时候,不能正常过滤,即使满足条件,最终结果也为 空。 测试如下: select * from emp e;当…

网络爬虫部分应掌握的重要知识点

目录 一、预备知识1、Web基本工作原理2、网络爬虫的Robots协议 二、爬取网页1、请求服务器并获取网页2、查看服务器端响应的状态码3、输出网页内容 三、使用BeautifulSoup定位网页元素1、首先需要导入BeautifulSoup库2、使用find/find_all函数查找所需的标签元素 四、获取元素的…

vue+uniapp实现图形验证码功能-插件(附源码)

一、需求背景 vueuniapp实现图形验证码功能-插件(附源码) 在登录系统时,除了密码登录,还需要提供验证码登录。 涉及验证码,为了安全,一般会加入图形验证码,然后再发短信验证码。 如图&#xff1…

CVPR 2024 | Modular Blind Video Quality Assessment:模块化无参视频质量评估

无参视频质量评估 (Blind Video Quality Assessment,BVQA) 在评估和改善各种视频平台并服务用户的观看体验方面发挥着关键作用。当前基于深度学习的模型主要以下采样/局部块采样的形式分析视频内容,而忽视了实际空域分辨率和时域帧率对视频质量的影响&am…

力扣--动态规划516.最长回文子序列

思路分析: 创建一个二维动态规划表dp,其中dp[i][j]表示在子串s[i...j]中的最长回文子序列的长度。初始化基本情况:对角线上的元素dp[i][i]都为1,因为单个字符本身就是长度为1的回文子序列。从字符串末尾向前遍历,填充…

实现qq音乐歌词滚动效果

闲来无事,听音乐的时候,突发奇想 实现该效果中,包含了根据声音高低生成音波的功能,有兴趣的直接下载代码即可 这是启动后的效果。

13 丢弃法dropout【李沐动手学深度学习v2笔记】

1. 丢弃法 在层之间加入随机噪音 加入噪音的一些规则 加入噪音后不要改变期望 使用丢弃法 推理中的丢弃法 总结 2. 代码实现 4.6. 暂退法(Dropouthttps://zh.d2l.ai/chapter_multilayer-perceptrons/dropout.html 2.1 Dropout import torch from torch import n…

视频压缩会影响画质吗?正确答案在这里!

在当今数字时代,我们生活在一个高清、甚至是4K视频的世界中。随之而来的是巨大的视频文件大小,这在存储、传输和分享方面都带来了一些挑战。为了解决这一问题,许多人转向视频压缩,以便更有效地管理和共享视频内容。 然而&#xf…

报表生成器FastReport .Net用户指南:表达式(下)

在上一篇文章《报表生成器FastReport .Net用户指南:表达式(上)》中,我们已经介绍了表达式中的表达式编辑器、引用报告对象、使用 .Net 函数、数据元素参考这四部分,接下来让我们继续介绍表达式中的:引用数据…

【word】引用文献如何标注右上角

一、在Word文档中引用文献并标注在右上角的具体步骤如下 1、将光标移动到需要添加文献标注的位置: 2、在文档上方的工具栏中选择“引用”选项: 3、点击“插入脚注”或“插入尾注”: ①如果选择的是脚注,则脚注区域会出现在本页的…

RabbitMQ使用SpringAMQP

简介 绝对的简单,绝对的易懂,方便初学者,更加利于理解和上手使用(代码可直接复制粘贴进行使用) 如有其它问题,大家可以留言或私聊。 主要为了给大家展示各个代码使用 如果需要更加完整的文档&#xff0…

Android使用Sensor.TYPE_STEP_COUNTER计步器传感器进行步数统计

1、首先,申请权限 必须声明 ACTIVITY_RECOGNITION 权限,以便您的应用在运行 Android 10 (API 级别 29) 或更高版本的设备上使用此传感器。 Manifest.xml也记得声明 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {Log.d(TAG, "[权限]&quo…

虚拟化之CPU

一 cpu 1 如何查看内核版本:uname -r 2 如何查看操作系统的发行版本:cat /etc/redhat-release 3 计算机系统子的系统 cpu处理器memory内存storage存储network 网络Display显示 4 进程模式 用户模式(user mode)主要处理I/O的模…

CTP-API开发系列之四:接口对接准备

CTP-API开发系列之四:接口对接准备 CTP-API开发系列之四:接口对接准备CTP-API文件清单CTP-API通用规则命名规则Spi与Api CTP-API通讯模式开发语言选择 CTP-API开发系列之四:接口对接准备 CTP-API文件清单 文件名说明ThostFtdcTraderApi.h交…

微前端之什么是微前端

什么是微前端 微前端分类 基于路由的微前端:组件化微前端:iframe嵌入式微前端: 优点缺点 动态加载/懒加载微前端:微应用容器化方案: 微前端解决方案 single-spa阿里巴巴 Cloud Alfaiframe 方案Web ComponentsModule Fe…

kafka消费端消息去重方案

背景 我们在日常工作中,消费kafka消息是一个最常见的操作,不过由于kafka队列中经常包含重复的消息,并且消息量巨大,所以我们消费端总是需要先把消息进行去重后在消费,以减少消费端的压力,那么日常中我们一…

Android视角看鸿蒙第一课(工程目录)

Android视角看鸿蒙第一课(工程目录) 导读 鸿蒙马上就来了,这个工作很有可能落到Android开发的头上,既是机遇也是挑战,希望能跟上时代的浪潮,迫不得已开始学习鸿蒙开发,顺带分享记录下 我的学…

四、神经网络语言模型(NNLM)

神经网络(Neural Network,NN)主要由输入层、隐藏层、输出层构成,输入层的的节点数等于待处理数据中输入变量的个数(每一个变量代表了一个特征),输出层的节点数等于与每个输入变量关联的输出的数…

docker mysql主从复制

新建主服务器容器实例3301 mysql 主 3301 docker run -p 3301:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ -v /home/mysql/mysql-files:/var/lib/…