Flink:Temporal Table Function(时态表函数)和 Temporal Join
![]() | 博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维码进入京东手机购书页面。 |
我们知道,时态表(确切地说应该是版本表)提供了回溯历史的能力,也就是能读取一条记录过去某个时刻所对应的值。要想查询版本表在过去某个时刻对应的值,我们得在查询时把这个时间作为参数传递给版本表,但这个时间参数绝不会是一个 where 条件,它是另一个维度(时间维度)上的参数,那么用怎样的形式才能把这个时间参数合理地表达到查询中呢? Flink 使用了 UDF 的形式,主要思路就是:注册一个 UDF 来指代一张版本表,表名不能有参数,但函数可以有,这时把想访问版本表的目标时间点作为参数传给这个UDF,返回的就是当时表中的数据了,这个 UDF 就被称作:Temporal Table Function!
例如:以下代码将汇率表 currency_rates 注册成了时态表函数 rates。(注意:目前在 Flink SQL 中是不支持定义 Temporal Table Function 的!只能以代码方式定义,但是 SQL 中可以定义 Temporal Table DDL)
rates = tEnv.from("currency_rates").createTemporalTableFunction("update_time", "currency")tEnv.createTemporarySystemFunction("rates", rates);
然后,使用下面的 SQL 就能查询出在 11:05 时的汇率信息了:
SELECT * FROM rates('11:05');
可以说:是时态表函数是访问时态表的“入口”,是时态表的“正确打开方式”!
但是,像上面那样直接查询某一时刻版本表上的数据的情形其实并不多,真正常见是:其他表主动 Join 一张时态表,期望获得表中记录所代表的事件在发生时刻时态表中的当时的数据,就是我们曾经解释的“当时对当时”的需求场景(典型案例:Join 汇率表计算订单当时的总价):
-- 基于时态表函数实现的Join,由于指定的 order_time 是一个事件时间
-- 所以该SQL实现的是:基于事件时间的 Temporal Join,也就是 Join 事件发生时刻关联表当时的值
SELECTSUM(amount * rate) AS amount
FROMorders,LATERAL TABLE (rates(order_time))
WHERErates.currency = orders.currency
上面的 SQL 就是标准的 Temporal Table Function Join 语法,SQL 中使用了关键字 LATERAL TABLE,填入一个 Temporal Table Function / 时态表函数 rates,设定传给时态表的时间属性(基于什么时间查找时态表上的版本)order_time。
这里,官方文档其实隐去了一个背景信息,order_time 其实是 orders 表的事件时间属性,所以,上述使用 Temporal Table Function Join 语法实现的是:基于事件时间的 Temporal Join,这种 Join 还可以通过 FOR SYSTEM_TIME AS OF 关键字实现, Temporal Table Function Join 语法除了能实现基于事件时间的 Temporal Join 外,还能实现基于处理时间的 Temporal Join 了,语法不变,只要将传给 rates 函数的时间属性从一个事件时间改为一个处理时间就可以了,就像 [ 官方文档 ] 给出的示例中那样,使用了一个 o_proctime 字段,这个字段是 orders 表的处理时间属性:
-- 基于时态表函数实现的Join,由于指定的 o_proctime 是一个处理时间
-- 所以该SQL实现的是:基于处理时间的 Temporal Join,也就是总是 Join 关联表当前最新状态的数据
SELECTo_amount, r_rate
FROMOrders,LATERAL TABLE (rates(o_proctime))
WHEREr_currency = o_currency
相关文章:
Flink:Temporal Table Function(时态表函数)和 Temporal Join
博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…...
Go语言中的时间控制:定时器技术详细指南
Go语言中的时间控制:定时器技术详细指南 引言定时器基础创建和使用time.Timer使用time.Ticker实现周期性任务定时器的内部机制小结 使用time.Timer实现简单的定时任务创建和启动定时器停止和重置定时器定时器的实际应用小结 利用time.Ticker处理重复的定时任务创建和…...
面试笔记系列六之redis+kafka+zookeeper基础知识点整理及常见面试题
目录 Redis redis持久化机制:RDB和AOF Redis 持久化 RDB的优点 RDB的缺点 AOF 优点 AOF 缺点 4.X版本的整合策略 Redis做分布式锁用什么命令? Redis做分布式锁死锁有哪些情况,如何解决? Redis如何做分布式锁?…...
Golang动态高效JSON解析技巧
JSON如今广泛用于配置和通信协议,但由于其定义的灵活性,很容易传递错误数据。本文介绍了如何使用mapstructure工具实现动态灵活的JSON数据解析,在牺牲一定性能的前提下,有效提升开发效率和容错能力。原文: Efficient JSON Data Ha…...
双重检验锁
双重检验锁:设计模式中的单例模式,细分为单例模式中的懒加载模式。 单例模式 单例模式:指的是一个类只有一个对象。最简单的实现方式是设一个枚举类,只有一个对象。缺点是当对象还没有被使用时,对象就已经创建存在了…...
【RISC-V 指令集】RISC-V DSP 扩展指令集介绍(一)
前言: 本笔记是基于对RISC-V DSP扩展指令集文档总结的,《P-ext-proposal.pdf》文档的关键内容如下: 主要介绍了RISC-V的P扩展指令集及其相关细节。 首先,对P扩展指令进行了概述,并列出了其与其他扩展重复的指令。 …...
RocketMQ - CentOS 7.x 安装单机版并测试
【安装前环境准备】检查是否安装好JDK(必要):java -version查看CPU信息: # cat /proc/cpuinfo # lscpu # getconf _NPROCESSORS_ONLN # cat /sys/devices/system/cpu/online # cat /proc/interrupts | egrep -i cpu查看内存信息: # free -hm …...
[JavaWeb玩耍日记]HTML+CSS+JS快速使用
目录 一.标签 二.指定css 三.css选择器 四.超链接 五.视频与排版 六.布局测试 七.布局居中 八.表格 九.表单 十.表单项 十一.JS引入与输出 十二.JS变量,循环,函数 十三.Array与字符串方法 十四.自定义对象与JSON 十五.BOM对象 十六.获取…...
如何使用ArcGIS Pro创建最低成本路径
虽然两点之间直线最短,但是在实际运用中,还需要考虑地形、植被和土地利用类型等多种因素,需要加权计算最低成本路径,这里为大家介绍一下计算方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载…...
Neoverse CSS N3:实现市场领先能效的最快途径
区分老的架构 从云到边缘,Arm Neoverse 提供无与伦比的性能、效率、设计灵活性和 TCO 优势,正在颠覆传统基础设施芯片。 我们看到云和超大规模服务运营商正在推动更高的计算密度。随着 128 核心 CPU 设计上市(Microsoft Cobalt、阿里巴巴 Y…...
JavaScript实现的计时器效果
之前做过电商网站倒计时的效果,今天在倒计时的基础上,把代码修改了一下,改为计时器效果,实现了以下功能: 1.点击“开始”后,按秒计时且“开始”文字变为“停止”; 2.点击“停止”,计…...
仿函数(Functor(c++))
定义 仿函数(Functor)是一个可以像函数那样被调用的类对象。这意味着它实现了operator(),使得类的对象可以像函数那样被调用。 仿函数的主要特点 它是一个类。它重载了operator()。可以通过创建该类的对象,并像函数那样调用该对…...
智能汽车加速车规级存储应用DS2431P+TR 汽车级EEPROM 存储器IC
DS2431PT&R是一款1024位1-Wire EEPROM芯片,由四页存储区组成,每页256位。数据先被写入一个8字节暂存器中,经校验后复制到EEPROM存储器。该器件的特点是,四页存储区相互独立,可以单独进行写保护或进入EPROM仿真模式…...
js json转换成字符串
js中JSON数据转换成字符串,可以使用JSON.stringify()方法。 var obj {name: "张三", age: 18, gender: "男"}; var jsonString JSON.stringify(obj); console.log(jsonString); // 输出 {"name":"张三","age"…...
Linux笔记--基本操作指令
一、查看日期与日历 1.date指令 显示日期 #用法1:dateCST: China Standard Time时区,中国标准时间 #用法2: date 指定格式 [常用格式]: "%Y-%m-%d"(%F): 2022-07-25 "%H:%M:%S"(%T): 14:53:44 "%F %T" #用法3: date -d "-1 da…...
论文阅读:基于超像素的图卷积语义分割(图结构数据)
#Superpixel-based Graph Convolutional Network for Semantic Segmentation github链接 引言 GNN模型根据节点特征周围的边来训练节点特征,并获得最终的节点嵌入。通过利用具有不同滤波核的二维卷积对来自附近节点的信息进行整合,给定超像素方法生成的…...
记录踩过的坑-macOS下使用VS Code
目录 切换主题 安装插件 搭建Python开发环境 装Python插件 配置解释器 打开项目 打开终端 切换主题 安装插件 方法1 方法2 搭建Python开发环境 装Python插件 配置解释器 假设解释器已经通过Anaconda建好,只需要在VS Code中关联。 打开项目 打开终端...
30天JS挑战(第十四天)------数据的复制
第十四天挑战(数据的复制) 地址:https://javascript30.com/ 所有内容均上传至gitee,答案不唯一,仅代表本人思路 中文详解:https://github.com/soyaine/JavaScript30 该详解是Soyaine及其团队整理编撰的,是对源代码…...
【洛谷 P8682】[蓝桥杯 2019 省 B] 等差数列 题解(数学+排序+辗转相除法)
[蓝桥杯 2019 省 B] 等差数列 题目描述 数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N N N 个整数。 现在给出这 N N N 个整数,小明想知道包含这 N N N 个整数的最短的等差数列有几项? 输…...
Linux:kubernetes(k8s)部署CNI网络插件(4)
在上一章进行了node加入master Linux:kubernetes(k8s)node节点加入master主节点(3)-CSDN博客https://blog.csdn.net/w14768855/article/details/136420447?spm1001.2014.3001.5501 但是他们显示还是没准备好 看一下…...
search-engine-optimization内容创作黄金法则:如何写出搜索引擎喜爱的文章
search-engine-optimization内容创作黄金法则:如何写出搜索引擎喜爱的文章 【免费下载链接】search-engine-optimization 🔍 A helpful checklist/collection of Search Engine Optimization (SEO) tips and techniques. 项目地址: https://gitcode.co…...
零代码部署:文墨共鸣水墨风语义分析平台快速搭建指南
零代码部署:文墨共鸣水墨风语义分析平台快速搭建指南 1. 水墨与AI的完美邂逅 在数字化浪潮中,我们常常被冰冷的代码和机械的界面所包围。文墨共鸣(Wen Mo Gong Ming)项目带来了一股清流——它将前沿的AI语义分析技术与传统的中国…...
ESP32语音唤醒实战:VADNet模型配置与防截断缓存机制详解(附代码)
ESP32语音唤醒实战:VADNet模型配置与防截断缓存机制详解(附代码) 在智能语音设备开发中,语音唤醒功能的稳定性直接影响用户体验。ESP32作为物联网领域的热门芯片,其内置的VADNet语音活动检测模型为开发者提供了强大的工…...
蔚蓝档案自动化脚本实战指南:5个技巧提升游戏效率
蔚蓝档案自动化脚本实战指南:5个技巧提升游戏效率 【免费下载链接】blue_archive_auto_script 支持按轴凹总力战, 无缝制造三解, 用于实现蔚蓝档案自动化的程序( Steam已适配 ) 项目地址: https://gitcode.com/gh_mirrors/bl/blue_archive_auto_script 蔚蓝档…...
雷达信号处理所有公式整理
一、雷达基本功能与距离测量 1.1 目标距离公式 $$R = \frac{ct_0}{2} \tag{1.1}$$ 详细解释: 物理意义: 计算目标距离的基本公式,其中 $t_0$ 是雷达信号从发射到接收的双程传播时间(时延),$c$ 为光速($3 \times 10^8$ m/s)。 推导: 电磁波往返传播距离为 $2R$,传…...
Jellyfin豆瓣插件:5分钟打造中文影视库的完整教程
Jellyfin豆瓣插件:5分钟打造中文影视库的完整教程 【免费下载链接】jellyfin-plugin-douban Douban metadata provider for Jellyfin 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-douban 还在为Jellyfin媒体库缺少中文元数据而烦恼吗&…...
别再手动摆引脚了!嘉立创EDA专业版符号库设计,从蓝桥杯真题到高效实战
嘉立创EDA符号库设计实战:从竞赛真题到工程级规范 第一次用嘉立创EDA专业版设计符号库时,我盯着满屏的引脚和属性栏发呆了十分钟——明明教程里的步骤看起来那么简单,为什么自己操作时总在"摆引脚-改属性-保存报错"的循环里打转&am…...
云边协同 智启未来 | 阿里云 × ZStack 云边一体解决方案正式落地
随着数字化转型的不断深入,企业对于云计算的需求已从"集中上云"逐步演进为"云边协同"。在智慧城市、工业互联网、智慧交通、能源电力等行业场景中,数据的实时处理、低延迟响应以及本地化合规需求日益迫切。单一的中心化云架构已难以…...
3秒完整保存:颠覆传统的Full Page Screen Capture网页截图新方案
3秒完整保存:颠覆传统的Full Page Screen Capture网页截图新方案 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-ch…...
从OpenAI Assistants API看厂商对Agent生态的战略布局
从OpenAI Assistants API看厂商对Agent生态的战略布局 引言 背景介绍 人工智能技术正在以前所未有的速度改变着我们的世界。从最早的规则引擎到机器学习,再到如今的大语言模型(LLMs),AI技术的每一次飞跃都带来了新的可能性和商业机…...
