FlinkSql-Temporal Joins-Lookup Join
说明
在 Flink SQL 中,Temporal Joins 是一种常见的数据关联操作,特别适用于处理包含时间维度的数据。Lookup Join 是 Temporal Joins 的一种类型,它允许将流数据与维表数据进行关联。使用场景如下:
-
实时维度关联: 当您有一个实时的流数据流,并且需要与维表进行关联,以获取维度信息时,Lookup Join 是一个很有用的工具。例如,在电商领域,您可以将实时的订单流与商品维表进行关联,以获取商品的详细信息,如名称、价格、类别等。
-
动态数据关联: 如果您的维表数据是动态变化的,例如产品信息或用户配置信息,而且您希望在流数据处理过程中及时地获取最新的维度信息,Lookup Join 可以帮助您实现这一点。您可以将流数据与动态更新的维表进行关联,以确保关联的维度信息始终是最新的。
-
事件时间关联: Lookup Join 支持基于事件时间的关联操作,这意味着您可以根据事件发生的时间点来进行关联。这在需要处理时间窗口或事件序列的场景中特别有用。例如,您可以将实时的用户行为数据与用户配置信息进行关联,以便根据用户行为的时间戳获取相应的用户配置。
-
高效的维度查询: Lookup Join 通过将维表数据加载到内存中进行索引,提供了高效的维度查询能力。这使得在流数据处理过程中通过内存索引快速查找和关联维度数据成为可能,而无需频繁地访问外部存储系统。
总的来说,Lookup Join 适用于需要实时、动态和高效地关联流数据与维度数据的场景。它可以帮助您获取最新的维度信息,并在流数据处理过程中进行高效的维度查询和关联操作。
假设您有以下两个数据流:
- 订单流(Orders Stream)包含实时生成的订单数据,其中每个订单都包含商品ID(
productId)和订单数量(quantity)。 - 商品维表(Products Dimension Table)包含商品的详细信息,包括商品ID(
productId)、商品名称(productName)和商品价格(price)。
您可以使用 Lookup Join 将订单流与商品维表进行关联,以获取订单中商品的详细信息。以下是一个使用 Flink SQL 的示例:
-- 创建订单流表
CREATE TABLE orders (productId INT,quantity INT,orderTime TIMESTAMP(3),WATERMARK FOR orderTime AS orderTime - INTERVAL '5' SECOND
) WITH ('connector.type' = 'kafka','connector.version' = 'universal','connector.topic' = 'orders_topic','connector.properties.bootstrap.servers' = 'kafka:9092','format.type' = 'json'
);-- 创建商品维表
CREATE TABLE products (productId INT,productName STRING,price DECIMAL(10, 2),PRIMARY KEY (productId) NOT ENFORCED
) WITH ('connector.type' = 'jdbc','connector.url' = 'jdbc:mysql://mysql:3306/my_database','connector.table' = 'products','connector.driver' = 'com.mysql.jdbc.Driver','connector.username' = 'username','connector.password' = 'password'
);-- 执行 Lookup Join 操作
CREATE TABLE enrichedOrders AS
SELECT o.*, p.productName, p.price
FROM orders AS o
JOIN products FOR SYSTEM_TIME AS OF o.orderTime AS p
ON o.productId = p.productId;
在上述示例中,我们首先创建了订单流表和商品维表。订单流表从 Kafka 主题中读取实时订单数据,商品维表通过 JDBC 连接到 MySQL 数据库中的商品表。
然后,我们执行 Lookup Join 操作,将订单流表 orders 与商品维表 products 关联起来。通过 JOIN products FOR SYSTEM_TIME AS OF o.orderTime,我们将商品维表与订单流进行关联,并根据订单的事件时间 orderTime 来获取相应时间点的维度信息。
最后,我们将关联后的结果存储在 enrichedOrders 表中,其中包含了订单流的所有字段以及关联的商品名称和价格。
通过这个示例,您可以看到如何使用 Lookup Join 将流数据与维度数据进行关联,以获取实时的维度信息,丰富您的数据分析和处理过程。在实际应用中,您需要根据具体的数据源和业务需求进行相应的配置和调整。
实例demo
--模拟stream表
CREATE view kafka_mock as
select '123' as key, proctime() as _proc; -- proctime()作为处理时间-1,proctime()数据类型为TIMESTAMP_LTZ(3)--可以直接查询的外部系统
CREATE TABLE es_dim(p_key STRING,p_type STRING
)
with ('connector' = 'elasticsearch-6','index' = 'index01','document-type' = 'type01','hosts' = 'http://xxx:9200','format' = 'json'
);SELECTa.key,a._proc,CAST(a._proc AS TIMESTAMP(3)) as _proc_local
FROM kafka_mock a
join es_dim FOR SYSTEM_TIME AS OF a._proc as b --利用时态表,关联stream表-2
on a.key = b.p_key
时态表join-查找join
参考:Lookup Join
相关文章:
FlinkSql-Temporal Joins-Lookup Join
说明 在 Flink SQL 中,Temporal Joins 是一种常见的数据关联操作,特别适用于处理包含时间维度的数据。Lookup Join 是 Temporal Joins 的一种类型,它允许将流数据与维表数据进行关联。使用场景如下: 实时维度关联: 当…...
STM32之定时器
目录 1、定时器介绍 1.定时器工作原理 2.定时器的分类 3.通用定时器主要功能介绍 4.定时器计数模式 5.定时器时钟源 6.定时器溢出时间计算公式 2、定时器中断的实验 codeMX的配置 代码编写 1.使用到的HAL库函数 1.中断回调函数需要我们重写 2. 在中断模式下启动TIM…...
Canvas鼠标画线
鼠标按下开始画线,鼠标移动根据鼠标的轨迹去画,鼠标抬起停止画线 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…...
Docker 安装部署 Sentinel Dashboard
1、下载 jar 包 官方 jar 包下载地址:https://github.com/alibaba/Sentinel/releases 或者点击 链接 直接跳转到下载页 进入链接下载你需要的版本 下载完毕(我这里统一放在一个sentinel目录内) 2、编写 Dockerfile 文件(这里我不…...
第21章网络通信
Internet 提供了大量有用的信息,很少有人能在接触过Internet后拒绝它的诱惑。计算机网络实现了多台计算机间的互联,使得它们彼此之间能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序,这些程序借助于网络协议,…...
一、运行时数据区域
根据 《Java 虚拟机规范》的规定,Java 虚拟机所管理的内存将会包括以下截个运行时数据区域,如图所示。 1、程序计数器 程序计数器是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在 Java 虚拟机的概念模型里&#x…...
OCR原理解析
目录 1.概述 2.应用场景 3.发展历史 4.基于传统算法的OCR技术原理 4.1 图像预处理 4.1.1 灰度化 4.1.2 二值化 4.1.3 去噪 4.1.4 倾斜检测与校正 4.1.4.2 轮廓矫正 4.1.5 透视矫正 4.2 版面分析 4.2.1 连通域检测文本 4.2.2 MSER检测文本 4.3 字符切割 4.3.1 连…...
使用com组件编辑word
一个普通的窗体应用,6个button using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; u…...
国产Euler(欧拉)系统安装docker
国产的真™难用呀 生态又差还不开源 血泪经验 解压Docker安装包。 tar zxf docker-19.03.10.tgz 将解压后目录中的文件移动到“/usr/bin”下。 cp docker/* /usr/bin配置docker.service文件。 编辑docker.service文件。 vim /usr/lib/systemd/system/docker.service添加以…...
Linux 进程控制
文章目录 进程创建进程终止进程结果wait函数waitpid函数status参数 进程替换进程替换原理进程替换函数 补充/拓展 进程创建 fork函数 #include <unistd.h>pid_t fork(void);函数返回值: 在父进程中,fork函数返回子进程的进程ID(PID&…...
[ Linux Audio 篇 ] 音频开发入门基础知识
在短视频兴起的背景下,音视频开发越来越受到重视。接下来将为大家介绍音频开发者入门知识,帮助读者快速了解这个领域。 轻柔的音乐、程序员有节奏感的键盘声、嗡嗡的发动机、刺耳的手提钻……这些声音是如何产生的呢?又是如何传到我们耳中的…...
关于高校电子邮件系统开通双因素认证的经验分享-以清华大学为例
清华大学信息化技术中心 马云龙 作者简介: 马云龙,男,清华大学信息化技术中心高级工程师;Coremail管理员社区大咖嘉宾 深耕高校计算机网络/信息化/网络安全岗位20年,对大规模计算机网络及信息系统规划,开发/建设,运维有深刻体会。 目前,越来越多的高校/企业/政府机关…...
「Swift」类淘宝商品瀑布流展示
前言:需要做一个类似于淘宝商品页面的瀑布流展示 结构分析: ps:图片来源 思路分析: 该瀑布流主要还是基于UICollectionView进行展示,只是在cell展示的UICollectionViewFlowLayout需要进行相应调整和自定义ÿ…...
道可云会展元宇宙平台全新升级,打造3D沉浸式展会新模式
随着VR虚拟现实、人工智能、虚拟数字人等元宇宙技术的快速发展,各个行业正试图通过元宇宙技术寻求新的发展突破口,会展行业也不例外。会展作为经贸领域的重要产业形态,越来越多的企业和组织开始寻求通过元宇宙技术为展会赋能,以满…...
Ant Design Pro初始化报错
今天按照官网步骤初始化项目,第一次报错 fatal: unable to access https://github.com/ant-design/ant-design-pro/: SSL certificate problem: unable to get local issuer certificate 致命:无法访问https://github.com/ant-design/ant-design-pro/&…...
第16届中国R会议暨2023X-AGI大会开幕,和鲸科技分享ModelOps在数据科学平台中的实践与应用
11月25日,第 16 届中国 R 会议暨 2023 X-AGI 大会在在中国人民大学逸夫会堂拉开帷幕,本次会议由中国人民大学统计学院、中国人民大学应用统计科学研究中心、统计之都、原灵科技和中国商业统计学会人工智能分会(筹)主办,…...
❀My学习Linux命令小记录(12)❀
目录 ❀My学习Linux命令小记录(12)❀ 46.arp指令 47.tcpdump指令 48.chmod指令 49.chown指令 50.bash调用脚本指令 shell介绍 shell脚本的组成部分 脚本执行方式 检查脚本语法 bash之变量 变量的种类:根据生效的范围不同来区分 …...
MySQL学习day05
DCL(Data Control Language)数据控制语言学习 作用:用来创建数据库用户、控制数据库的访问权限 1)查询用户: use mysql; select * from user; 2)创建用户: create user 用户名主机名 identifi…...
JAVA面试题7
1.Java中的ClassLoader是什么? 它有什么作用? 答案:ClassLoader是一种加载Java类文件的机制,可以从不同的来源加载类文件,如本地文件系统、网络等。ClassLoader可以帮助实现模块化开发和动态加载类等功能。 2.什么是J…...
好用免费的AI换脸5个工具
在当今社会的发展中,人工智能(Artificial Intelligence, AI)扮演着关键的角色,其应用领域不断扩展。作为AI的一个分支,换脸技术近年来备受欢迎。这项技术使得将一个人的面部特征迁移到另一个人的照片或视频成为可能。除…...
基于MCP协议构建AI金融数据可视化服务器:从原理到实战部署
1. 项目概述:一个为AI智能体提供实时金融数据可视化的MCP服务器最近在折腾AI智能体(Agent)的生态,发现一个挺有意思的痛点:当你想让AI帮你分析股票、基金或者加密货币时,它往往只能给你干巴巴的数字和文字描…...
从零打造会“看”的电子眼:Teensy与OLED的嵌入式图形与传感器实践
1. 项目概述:打造一个会“看”的电子生命体几年前,我第一次在创客社区看到“Uncanny Eyes”项目时就被深深吸引了。一个微小的OLED屏幕,在代码驱动下,竟然能呈现出如此逼真、灵动的眼球运动,那种介于生命与机械之间的诡…...
【独家首发】ElevenLabs乌尔都语语音SDK逆向分析(v2.4.1):提取未文档化emotion_intensity参数,实现新闻播报级庄严语调控制
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs乌尔都语语音SDK逆向分析全景概览 ElevenLabs 官方未公开乌尔都语(ur-PK)的独立语音 SDK,但其 Web API 实际支持该语言的 TTS 合成。通过对官方 JS SDK&am…...
Simulink模型到汽车控制器:基于模型开发的完整路径
Simulink模型到汽车控制器:基于模型开发的完整路径 一辆智能电动汽车的"灵魂",通常写在300万行以上的嵌入式代码里。但如果每一行代码都要工程师手写,开发周期会从18个月变成……永远完成不了。 一个真实的问题 2023年,…...
MATLAB/Simulink模型化设计驱动树莓派:从LED闪烁到快速原型开发
1. 项目概述:当MATLAB/Simulink遇见树莓派 如果你是一名算法工程师、控制工程师,或者正在学习嵌入式系统,那么“模型化设计”和“快速原型开发”这两个词对你来说一定不陌生。它们听起来很高大上,但核心目标其实很朴素࿱…...
AI智能体开发实战:从Devin现象到代码辅助智能体构建
1. 项目概述:当开发者遇上AI智能体最近在GitHub上闲逛,发现一个叫“awesome-devins”的仓库热度飙升。点进去一看,好家伙,这简直是一个关于“AI智能体”的宝藏目录。这个由e2b-dev团队维护的项目,本质上是一个精心整理…...
如何永久保存微信聊天记录?三步实现完整备份与智能分析
如何永久保存微信聊天记录?三步实现完整备份与智能分析 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCh…...
嵌入式开发革命:LuatOS云编译实战指南与效率提升
1. 项目概述:为什么我们需要云编译?作为一名在嵌入式领域摸爬滚打了十多年的老鸟,我太懂那种“买板一时爽,环境火葬场”的痛了。尤其是这几年,合宙、乐鑫、兆易这些厂商的产品线越来越丰富,Air780E、ESP32-…...
Arm Neoverse CMN-700一致性网格网络架构与寄存器配置详解
1. Arm Neoverse CMN-700一致性网格网络架构解析 在现代多核处理器设计中,一致性网格网络(Coherent Mesh Network)已成为解决核间通信瓶颈的关键技术。Arm Neoverse CMN-700作为第二代一致性互连架构,相比前代CMN-600在拓扑灵活性…...
基于CircuitPython与Adafruit IO的DIY智能门铃摄像头全栈开发指南
1. 项目概述与核心思路几年前,我还在用传统的猫眼和门铃,每次快递员敲门或者有访客,都得急匆匆跑到门口,从那个小小的、视野受限的孔洞里费力张望。后来市面上出现了各种智能门铃摄像头,功能是挺诱人,但要么…...
