实践数据湖iceberg 第三十六课 基于数据湖icerberg的流批一体架构--update mysql select from icberg语法是增量更新测试

数据湖技术之Iceberg-01 原理解析、特性演进与Hive集成指南 数据湖技术是集中存储多源异构数据的解决方案,支持批流一体处理。传统数据仓库难以满足实时分析需求,而Kappa架构存在存储和查询限制。Apache Iceberg作为开放表格式,支持ACID事务、分区演化、模式变更等特性,实现存储层统一。其分层元数据设计(Snapshot、Manifest等)与轻量级集成能力,解决了实时数仓的痛点,成为大数据领域的重要技术。 阅读详情

系列文章目录

实践数据湖iceberg 第一课 入门
实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式
实践数据湖iceberg 第三课 在sqlclient中,以sql方式从kafka读数据到iceberg
实践数据湖iceberg 第四课 在sqlclient中,以sql方式从kafka读数据到iceberg(升级版本到flink1.12.7)
实践数据湖iceberg 第五课 hive catalog特点
实践数据湖iceberg 第六课 从kafka写入到iceberg失败问题 解决
实践数据湖iceberg 第七课 实时写入到iceberg
实践数据湖iceberg 第八课 hive与iceberg集成
实践数据湖iceberg 第九课 合并小文件
实践数据湖iceberg 第十课 快照删除
实践数据湖iceberg 第十一课 测试分区表完整流程(造数、建表、合并、删快照)
实践数据湖iceberg 第十二课 catalog是什么
实践数据湖iceberg 第十三课 metadata比数据文件大很多倍的问题
实践数据湖iceberg 第十四课 元数据合并(解决元数据随时间增加而元数据膨胀的问题)
实践数据湖iceberg 第十五课 spark安装与集成iceberg(jersey包冲突)
实践数据湖iceberg 第十六课 通过spark3打开iceberg的认知之门
实践数据湖iceberg 第十七课 hadoop2.7,spark3 on yarn运行iceberg配置
实践数据湖iceberg 第十八课 多种客户端与iceberg交互启动命令(常用命令)
实践数据湖iceberg 第十九课 flink count iceberg,无结果问题
实践数据湖iceberg 第二十课 flink + iceberg CDC场景(版本问题,测试失败)
实践数据湖iceberg 第二十一课 flink1.13.5 + iceberg0.131 CDC(测试成功INSERT,变更操作失败)
实践数据湖iceberg 第二十二课 flink1.13.5 + iceberg0.131 CDC(CRUD测试成功)
实践数据湖iceberg 第二十三课 flink-sql从checkpoint重启
实践数据湖iceberg 第二十四课 iceberg元数据详细解析
实践数据湖iceberg 第二十五课 后台运行flink sql 增删改的效果
实践数据湖iceberg 第二十六课 checkpoint设置方法
实践数据湖iceberg 第二十七课 flink cdc 测试程序故障重启:能从上次checkpoint点继续工作
实践数据湖iceberg 第二十八课 把公有仓库上不存在的包部署到本地仓库
实践数据湖iceberg 第二十九课 如何优雅高效获取flink的jobId
实践数据湖iceberg 第三十课 mysql->iceberg,不同客户端有时区问题
实践数据湖iceberg 第三十一课 使用github的flink-streaming-platform-web工具,管理flink任务流,测试cdc重启场景
实践数据湖iceberg 第三十二课 DDL语句通过hive catalog持久化方法
实践数据湖iceberg 第三十三课 升级flink到1.14,自带functioin支持json函数
实践数据湖iceberg 第三十四课 基于数据湖icerberg的流批一体架构-流架构测试
实践数据湖iceberg 第三十五课 基于数据湖icerberg的流批一体架构–测试增量读是读全量还是仅读增量
实践数据湖iceberg 第三十六课 基于数据湖icerberg的流批一体架构–update mysql select from icberg语法是增量更新测试
实践数据湖iceberg 更多的内容目录


前言

续上一课,计算一个PV的,案例,最终把结果更新到MYSQL
本文测试如下语法是否增量更新
insert into default_catalog.default_database.mysql_pv select dt, cast(count() as int) as pv from hive_iceberg_catalog.ods_base.IcebergSink_XXZH /+ OPTIONS(‘streaming’=‘true’, ‘monitor-interval’=‘1s’)*/ where dt is not null group by dt;


一、实现思路

在这里插入图片描述
思路如上图,从左到右,数据从kafka流入,pv统计值,从db查看

二、测试案例

1. 建表

DROP TABLE IF EXISTS `mysql_pv`;
CREATE TABLE `mysql_pv` (
  `dt` int(255) NOT NULL,
  `pv` int(255) DEFAULT NULL,
  PRIMARY KEY (`dt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. 编写一提到的代码

CREATE TABLE IF NOT EXISTS KafkaTableSource_XXZH (
    `log` STRING,
	`dt` STRING
) WITH (
    'connector' = 'kafka',
    'topic' = 'test_xxzh',
    'properties.bootstrap.servers' = 'hadoop101:9092,hadoop102:9092,hadoop103:9092',
    'properties.group.id' = 'testGroup',
    'scan.startup.mode' = 'earliest-offset',
    'csv.ignore-parse-errors'='true',
    'format' = 'csv'
);
CREATE TABLE if not exists mysql_pv(
  `dt`  INT NOT NULL,
  `pv`    INT NOT NULL,
   PRIMARY KEY(dt) NOT ENFORCED
) with(
  'connector' = 'jdbc',
  'url' = 'jdbc:mysql://hadoop103:3306/xxzh_stock',
  'username' = 'hive',
  'password' = '123456',
  'table-name' = 'mysql_pv'
);


CREATE CATALOG hive_iceberg_catalog WITH (
    'type'='iceberg',
    'catalog-type'='hive',
    'uri'='thrift://hadoop101:9083',
    'clients'='5',
    'property-version'='1',
    'warehouse'='hdfs:///user/hive/warehouse/hive_iceberg_catalog'
);
use catalog hive_iceberg_catalog;
CREATE TABLE IF NOT EXISTS ods_base.IcebergSink_XXZH (
    `log` STRING,
	`dt` INT
)with(
    'write.metadata.delete-after-commit.enabled'='true',
    'write.metadata.previous-versions-max'='5',
    'format-version'='2'
 );
 

 
 insert into  hive_iceberg_catalog.ods_base.IcebergSink_XXZH select log, cast(dt as int) as dt from default_catalog.default_database.KafkaTableSource_XXZH;
 
insert into default_catalog.default_database.mysql_pv  select dt, cast(count(*) as int) as pv from hive_iceberg_catalog.ods_base.IcebergSink_XXZH /*+ OPTIONS('streaming'='true', 'monitor-interval'='1s')*/ where dt is not null group by dt;

三、测试

1.mysql,目前已经有的测试数据

在这里插入图片描述

2. 往生产者增加一条20220617的数据

a,20220617

发现: mysql结果表: 增加了一条
在这里插入图片描述

3.分析binglog

[root@hadoop103 mysql]# mysqlbinlog -v --base64-output=decode-rows mysql-bin.000004 |tail -n 100
BEGIN
/*!*/;
# at 28356
#220617 14:11:14 server id 1  end_log_pos 28414 CRC32 0xfcdda6c9        Table_map: `xxzh_stock`.`mysql_pv` mapped to number 181
# at 28414
#220617 14:11:14 server id 1  end_log_pos 28458 CRC32 0xb0c17384        Write_rows: table id 181 flags: STMT_END_F
### INSERT INTO `xxzh_stock`.`mysql_pv`
### SET
###   @1=20220617
###   @2=1
# at 28458
#220617 14:11:14 server id 1  end_log_pos 28489 CRC32 0xdb5dca0c        Xid = 17793262
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file

发现插入了一条 @1=20220617, @2=1

4. 发送一条在b,20220617,发现结果表20220617的pv变为2

在这里插入图片描述

5.分析mysql binglog:

看binlog命令:

[root@hadoop103 mysql]# mysqlbinlog -v --base64-output=decode-rows mysql-bin.000004 |tail -n 100
### INSERT INTO `xxzh_stock`.`mysql_pv`
### SET
###   @1=20220617
###   @2=1
# at 28458
#220617 14:11:14 server id 1  end_log_pos 28489 CRC32 0xdb5dca0c        Xid = 17793262
COMMIT/*!*/;
# at 28489
#220617 14:13:25 server id 1  end_log_pos 28554 CRC32 0xadfe9011        Anonymous_GTID  last_committed=101      sequence_number=102     rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 28554
#220617 14:13:25 server id 1  end_log_pos 28632 CRC32 0xd07997a1        Query   thread_id=588   exec_time=0     error_code=0
SET TIMESTAMP=1655446405/*!*/;
BEGIN
/*!*/;
# at 28632
#220617 14:13:25 server id 1  end_log_pos 28690 CRC32 0x75154cc2        Table_map: `xxzh_stock`.`mysql_pv` mapped to number 181
# at 28690
#220617 14:13:25 server id 1  end_log_pos 28744 CRC32 0xf4ff361c        Update_rows: table id 181 flags: STMT_END_F
### UPDATE `xxzh_stock`.`mysql_pv`
### WHERE
###   @1=20220617
###   @2=1
### SET
###   @1=20220617
###   @2=2
# at 28744
#220617 14:13:25 server id 1  end_log_pos 28775 CRC32 0xfe2b874e        Xid = 17799053
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file

发现只是对增量的数据进行update

总结

ICEBERG的更新,是增量更新的,旧的结果如果没有发生变更,就不会产生更新

数仓及其维度(分层)建模(ODS DWD DWS DWT ADS) 一. 数仓及其维度 1. 什么是数仓? 数据仓库,简称数仓,( Data Warehouse )。从逻辑上理解,数据库和数仓没有区别,都是通过数据库软件实现存放数据的地方,只不过从数据量来说,数据仓库要比数据库更庞大。 数仓主要是为企业制定决策,提供数据支持的。当业务简单,可以用数据库来存储,分析,制表。但当数据量几何式增长,需要跨机器整合时,数仓就是非常必要的了。 2. 数仓的特点 (1)集成性 数仓中存储的数据来源于多个数据源,原始数据在不同数据源中的存储方式......... 阅读详情

相关推荐

数据湖(十六):Structured Streaming实时写入Iceberg

文章目录Structured Streaming实时写入Iceberg一、创建Kafka topic二、编写向Kafka生产数据代码三、编写Structured Streaming读取Kafka数据实时写入Iceberg四、查看Iceberg中数据结果目前Spark中Structured Streaming只支持实时向Iceberg中写入数据,不支持实时从Iceberg中读取数据,下面案例我们将使用Structured Streaming从Kafka中实时读取数据,然后将结果实时写入到Iceberg中。启动

Lansonli(蓝深李)的博客 1687

Iceberg从入门到精通系列之九:flink sql修改Iceberg表和删除Iceberg表

Iceberg从入门到精通系列之九:flink sql修改Iceberg表和删除Iceberg表。

zhengzaifeidelushang的博客 2063

手机拍照也能玩高光谱?教你用TensorFlow Lite在Android上实现实时RGB转高光谱

本文介绍了如何利用TensorFlow Lite在Android设备上实现实时RGB到高光谱的图像重构技术。通过深度学习模型优化和移动端部署策略,使智能手机具备专业级光谱分析能力,适用于农业检测、化妆品分析等多个领域。

weixin_29091105的博客 245

Iceberg 基础知识与基础使用

为了解决数据存储和计算引擎之间的适配的问题,Netflix开发了Iceberg,2018年11月16日进入Apache孵化器,2020 年5月19日从孵化器毕业,成为Apache的顶级项目。Iceberg是一个面向海量数据分析场景的开放表格式(Table Format)。表格式(Table Format)可以理解为元数据以及数据文件的一种组织方式,处于计算框架(Flink,Spark…)之下,数据文件之上。

Direction_Wind的博客 2260

Centos7 XFS(dm-0):Internal error XFS_WANT_CORRUPTED_GOTO

在k8s的道路上我们都是小白,每天启动虚机都会遇到各种各样的问题,这不。部署的k8s虚机启动发现操作系统启动异常,提示如下报错信息。进入/dev/mapper目录下,查询目录下路径信息。可以通过对文件系统进行修复操作,操作如下。重启完成后虚机恢复正常登录。

hedao0515的专栏 4583

Rasa Core开发指南

文章目录1. Rasa Core简介1.1 Rasa Core消息处理流程1.2 安装Rasa Core2. Dialogue模型训练2.1 Story样本数据2.2 Domain2.2.0 intents2.2.1 actions2.2.2 templates2.2.3 entities2.2.4 slots3 .训练和使用对话模型3.1 训练对话模型3.2 使用对话模型4. 搭建CustomA...

老蒋也疯狂 1万+

Iceberg与SparkSQL写操作整合

spark操作iceberg之前先要配置spark catalogs,详情参考Iceberg与Spark整合环境配置。有些操作需要在spark3中开启iceberg sql扩展。Iceberg使用Apache Spark的DataSourceV2 API来实现数据源和catalog。

SunnyRivers 1372

具身机器人内部PCB板分类与系统架构详解

本文系统梳理了机器人内部PCB板的功能架构,将其划分为5大模块:1)核心主板(含主控计算机板、实时控制板等);2)感知类PCB(视觉、听觉、触觉等);3)运动控制类PCB(伺服驱动、编码器等);4)电源与安全类PCB(电源管理、BMS等);5)通信类PCB(EtherCAT背板等)。通过人体器官类比(如大脑对应主控板、小脑对应实时控制板),详解了各模块的芯片选型、位置分布及协同关系,并给出信号/能量/指令的三流闭环示意图和典型系统参数(48V供电、1ms通信周期)。整体呈现了机器人"神经系统&qu

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 318

使用Scala/Java对Iceberg数据湖各模块进行操作(metadata、scanning、update、transactions、types、expressions)

目录1. 表metadata API2. 表Scanning2.1 File Level2.2 Row level3. 表update操作4. Transactions5. Types数据类型5.1 基础数据类型5.2 集合数据类型6. Expressions表达式7. Iceberg各模块说明 下面以Hadoop Catalog为例进行讲解 1. 表metadata API import org.apache.hadoop.conf.Configuration import org.apache.ic

Bulut0907 3146

TOPSIS+熵权法组合拳:5分钟学会供应商选择决策模型

本文详细介绍了如何运用TOPSIS和熵权法这对黄金组合,快速构建科学、客观的供应商评估决策模型。通过数据标准化、权重计算和综合排序,帮助企业在半小时内完成高效、准确的供应商选择,解决传统主观打分法的弊端,提升供应链管理效率。

weixin_29051149的博客 275

【系统分析师】2025年下半年真题:论文及解题思路

摘要 本文探讨软件测试技术的应用,重点关注静态测试与动态测试的比较。静态测试在不运行程序的情况下,通过审查、走查等方式分析需求、设计文档和代码,能早期发现高层次缺陷,降低修复成本。动态测试通过实际运行程序,使用单元测试、集成测试等方法验证功能性能,是发现运行时错误的唯一途径。二者在缺陷类型、介入阶段和修复成本上具有互补性,建议项目实践中结合使用以提升软件质量。

数据知道的博客 5787

实践数据湖iceberg 第三十四课 基于数据湖icerberg的流批一体架构-流架构测试

lambda架构中, kafka->flink中支持 各种流函数, 数据入iceberg后,如何对icberg进行流操作,实现类似流函数的结果? 基于数据湖的流批一体是什么意思?

spark_dev的博客 2189

【华为OD技术面试真题 - 技术面】- python面试题(1)

华为OD面试技术面准备指南 华为OD面试技术面常见问题解答 华为OD面试技术面经验分享 华为OD面试技术面注意事项 华为OD面试技术面攻略 华为OD面试技术面模拟题目与解析 华为OD面试技术面知识点梳理 华为OD面试技术面常考

算法大师! 5532

Iceberg:基于Spark3.x的MERGE INTO语法实现数据的增量写入

/ 新旧数据记录,Merge阶段,会为每一个结果行添加一个新的列,其列名就这个常量。

Dreamming Time的博客 2931

零基础学simulink仿真建模--基于Simulink进行近端策略优化(PPO)路径规划的仿真建模

特点高效性与稳定性:通过引入剪裁机制,在更新策略时限制步长,从而提高了训练过程的稳定性和效率。适用于多种动作空间:可以处理连续和离散的动作空间问题。无需模型:不需要预先知道环境的确切模型,适合复杂或未知环境。挑战收敛速度与稳定性:确保算法能够在合理的时间内找到近似最优解,并保持训练过程的稳定性。探索与利用平衡:在探索新路径和利用已知信息之间取得平衡。计算资源:对于大规模状态空间和动作空间,计算资源需求较高。首先明确要模拟的任务内容。目标(例如到达指定地点、避开障碍物等)。

amy_mhd的博客 249

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Flink 如何实时分析 Iceberg 数据湖的 CDC 数据

常见的 CDC 分析方案 为何选择 Flink + Iceberg 如何实时写入读取 未来规划 一、常见的 CDC 分析方案 我们先看一下今天的 topic 需要设计的是什么?输入是一个 CDC 或者 upsert 的数据,输出是 Database 或者是用于大数据 OLAP 分析的存储。 我们常见的输入主要有两种数据,第一种数据是数据库的 CDC 数据,不断的产生 changeLog;另一种场景是流计算产生的 upsert 数据,在最新的 Flink 1.12 版本已经支持了 upsert 数据

hellozhxy的博客 755

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Flink Icerberg 离线输仓-维度建模过程(二)

维度建模一般按照以下四个步骤: 选择业务过程→声明粒度→确认维度→确认事实选择业务过程在业务系统中,挑选我们感兴趣的业务线,比如下单业务,支付业务,退款业务,物流业务,一条业务线对应一张事实表。声明粒度数据粒度指数据仓库的数据中保存数据的细化程度或综合程度的级别。 声明粒度意味着精确定义事实表中的一行数据表示什么,应该尽可能选择最小粒度,以此来应各种各样的需求。典型的粒度声明如下:订单事实表中一行数据表示的是一个订单中的一个商品项; 支付事实表中一行数据表示的是一个支付记录。确定维度维度的主要作用是描述业务

wank1259162的博客 483

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

实践数据湖iceberg 第三十五课 基于数据湖icerberg的流批一体架构--测试增量读是读全量还是仅读增量

上一课中,讲到增量更新,小弟的boss问到,增量实现,是读增量数据还是把历史数据也重新读了一次? 暴击,按照我的理解,就是读增量。。。,大佬是不认按照理解的! 好吧,测试一下,故有本文,读者感到我滴血的心嘛,试问大家有没有这种经历。。。 ......

spark_dev的博客 1162

Iceberg 学习笔记

Iceberg 学习笔记。

第一片心意的博客 2262

Apache Iceberg 分区表探索与实践

组件版本 组件 版本 Apache Iceberg 0.11 Apache Hive 2.1.0 Apache Spark 3.0 Apache Flink 1.11 文章目录简介测试分区表功能建表写入数据重写指定分区重写动态分区 简介 本篇介绍Apache Icerberg分区表自己的一些探索与实践,包括建表、数据写入、重写分区、删除分区、添加分区,数据链路操作设计如下图: 备注: 创建分区表、修改标属性:使用Hive 批量写入数据、重写分区:使用Spark 实时计算.

高矮 2757

数据湖Iceberg介绍和使用(集成Hive、SparkSQL、FlinkSQL)

为了解决数据存储和计算引擎之间的适配的问题,Netflix开发了Iceberg,2018年11月16日进入Apache孵化器,2020 年5月19日从孵化器毕业,成为Apache的顶级项目。Iceberg是一个面向海量数据分析场景的开放表格式(Table Format)。表格式(Table Format)可以理解为元数据以及数据文件的一种组织方式,处于计算框架(Flink,Spark…)之下,数据文件之上。大数据领域发展至今已经经历了相当长时间的发展和探索,虽然大数据技术的出现和迭代降低了用户处理海量数据的

迷雾总会解 9920

Iceberg从入门到精通系列之一:Iceberg核心概念理解

Manifest(清单):描述Table状态的元数据,包括Table的Schema(模式)、Partition Spec(分区规范)和Current Snapshot ID(当前快照ID)等信息。Partition(分区):将数据按照指定规则分隔成的逻辑单元,Partition由一个或多个数据块(Block)组成。Block(块):其中存储的是Partition的数据,每个块都有一个唯一的ID,块的大小可以在表级别进行配置。创建了一个包含id和name字段的表,并且定义了以id字段为分区键的分区规则。

zhengzaifeidelushang的博客 8687

Iceberg (一、presto和trino实践——行级更新)

Iceberg 是一种用于大型分析表的高性能格式。Iceberg 为大数据带来了 SQL 表的可靠性和简单性,文章讲述 Presto/Trino对iceberg的入门实践

yyoc97的专栏 4194

iceberg总结简介

Iceberg 会在插入数据的时候根据分区策略跟踪新数据的分区信息,并将其记录在元数据中;当修改 Iceberg 表中的分区规则时,修改之前的数据还是按照以前的分区方式存储,而修改之后的数据才会按照新的规则存储,修改前后的分区元数据是分开存储的,这就意味着在同一个表中允许存在多种分区策略。最上层中记录了 Iceberg 表当前元数据的版本,对应的是version-hint.text文件,version-hint.text文件中只记录了一个数字表示当前的元数据版本,初始为 1,后续表每变更一次就加 1。

bitcarmanlee的博客 2418

【数据中台】初探数据湖-iceberg

文章目录1. 什么是数据湖2. iceberg的特性2.1 优化数据入库的流程2.2 支持更多的分析引擎2.3 统一数据存储和灵活的文件组织2.4 增量读取处理能力3. 数据湖技术催生的新架构3.1 原有方案3.2 新方案4. 新架构应用场景 1. 什么是数据湖 准确来讲就是数据入湖中间件技术,它并不是一个存储或者计算引擎,它的存在就是更好的将存储和计算解耦,构建与存储格式之上的数据组织方式,并提供ACID(atomicity原子性、consistency一致性、isolation隔离性、durabilit

孟知之的搬砖填坑历险记 1660

Netflix借Apache Iceberg实现高效增量处理

Netflix借Apache Iceberg实现高效增量处理

weixin_46812959的博客 1245
上一篇: 实践数据湖iceberg 第三十五课 基于数据湖icerberg的流批一体架构--测试增量读是读全量还是仅读增量
下一篇: 实践数据湖iceberg 第三十七课 kakfa写入iceberg的 icberg表的 enfource ,not enfource测试
*星星之火*
博客等级 码龄12年 3798粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值