当前位置: 首页 > news >正文

【Iceberg分析】Spark与Iceberg集成之常用存储过程

文章目录

  • Spark与Iceberg集成之常用存储过程
    • 调用语法
    • 调用样例
    • 表快照管理
      • 快照回滚
        • 根据snapshotid进行回滚
        • 根据timestamp进行回滚
      • 设置表当前生效的快照
    • 表元数据管理
      • 设置快照过期时间
      • 清除孤岛文件
      • 重写数据文件
      • 运用参数示例
        • options
          • General Options
          • Options for sort strategy
          • Options for sort strategy with zorder sort_order
      • 重写清单文件
      • 重写位置删除文件
        • Options

Spark与Iceberg集成之常用存储过程

spark与iceberg集成后,可以通过内置的存储过程来进行表的管理。使用CALL来调用存储过程。所有的存储过程在system的命名空间中。

官网地址

由于表迁移功能的风险较大,所以不去进行表的迁移,使用重建Iceberg表,重写数据的方式进行切换。

调用语法

catalog_name代表catalog的名称,procedure_name代表存储过程的名称,参数可以通过指定参数名的方式入参,也可以使用位移的方式入参。

CALL catalog_name.system.procedure_name(arg_name_2 => arg_2, arg_name_1 => arg_1);
CALL catalog_name.system.procedure_name(arg_1, arg_2, ... arg_n);

调用样例

 SparkSession spark = SparkSession.builder().master("local").appName("Iceberg spark example").config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions").config("spark.sql.catalog.local", "org.apache.iceberg.spark.SparkCatalog").config("spark.sql.catalog.local.type", "hadoop") //指定catalog 类型.config("spark.sql.catalog.local.warehouse", "iceberg_warehouse").getOrCreate();spark.sql("CALL local.system.rollback_to_snapshot('iceberg_db.table2', 3285133177610707025) ");

表快照管理

快照回滚

根据snapshotid进行回滚

存储过程名 rollback_to_snapshot

参数名称是否必填参数类型备注
table✔️string表名
snapshot_id✔️longmetadata文件中snapshots中的快照子项snapshot-id的值
根据timestamp进行回滚

存储过程名 rollback_to_timestamp

参数名称是否必填参数类型备注
table✔️string表名
timestamp✔️timestampmetadata文件中snapshots中的快照子项timestamp-ms的值

设置表当前生效的快照

存储过程名 set_current_snapshot

参数名称是否必填参数类型备注
table✔️string表名
snapshot_idlongmetadata文件中snapshots中的快照子项snapshot-id的值
refstring快照引用,取metadata文件中refs中的分支名称或者标记名称

❗️ snapshot_idref只能取其一。

表元数据管理

设置快照过期时间

Iceberg中的每次write/update/delete/upsert/compaction都会生成一个新快照,同时保留旧数据和元数据,以便进行快照隔离和时间旅行。expire_snapshots过程可用于删除不再需要的旧快照及其文件。

这个过程将删除旧快照和那些旧快照唯一需要的数据文件。这意味着expire_snapshots过程永远不会删除未过期快照仍然需要的文件。

存储过程名 expire_snapshots

参数名称是否必填参数类型备注
table✔️string表名
older_thantimestamp超过该时限的快照将被删除 ,默认是: 5天前的被删除
retain_lastint忽略 older_than作用, 而保留的快照数量 (defaults to 1)
max_concurrent_deletesint用于删除文件操作的线程池大小(默认情况下不使用线程池)
stream_resultsbooleantrue时,删除文件将按 RDD 分区发送给 Spark 驱动程序(默认情况下,所有文件都将发送给 Spark 驱动程序)。建议将该选项设置为 true,以防止 Spark 驱动程序因文件大小而发生 OOM。
snapshot_idsarray of long要过期的快照 ID 数组

如果省略 older_thanretain_last,则将使用表的expiration properties。仍被分支或标记引用的快照不会被删除。默认情况下,分支和标记永不过期,但可以使用表属性 history.expire.max-ref-age-ms 更改其保留策略。main分支永不过期。

❗️ 使用此存储过程时,必须增加stream_results且值为true

清除孤岛文件

用于删除未在iceberg表的任何元数据文件中引用的文件,因此可视为 “孤岛”。

存储过程名 remove_orphan_files

参数名称是否必填参数类型备注
table✔️string表名
older_thantimestamp删除在此时间戳之前创建的孤岛文件 (Defaults to 3 days ago)
locationstring查找文件的目录 (defaults to the table’s location)
dry_runboolean预执行,若值为true,实际并未删除文件 (defaults to false)
max_concurrent_deletesint用于删除文件操作的线程池大小(默认情况下不使用线程池)
file_list_viewstring查找文件的数据集(跳过目录列表)
equal_schemesmap被视为相同的文件系统方案的映射。键是一个以逗号分隔的方案列表,值是一个方案 (defaults to map('s3a,s3n','s3')).
equal_authoritiesmap被视为等同的文件系统权限映射。键是以逗号分隔的权限列表,值是权限。
prefix_mismatch_modestring位置前缀(方案/授权)不匹配时的操作行为:
ERROR- 抛出异常. (default)
IGNORE - 啥也不干.
DELETE - 删除文件.

重写数据文件

Iceberg 在一个表格中跟踪每个数据文件。数据文件越多,存储在清单文件中的元数据也就越多,而数据文件过小则会导致不必要的元数据量和文件打开成本,从而降低查询效率。

Iceberg 可以使用 Spark 的 rewriteDataFiles 操作并行压缩数据文件。这将把小文件合并为大文件,以减少元数据开销和运行时文件打开成本。

存储过程名 rewrite_data_files

参数名称是否必填参数类型备注
table✔️string表名
strategystring策略名称 - 二进制包或排序。默认为 binpack 策略
sort_orderstring对于 Zorder,请在 zorder() 中使用逗号分隔的列列表。例如:zorder(c1,c2,c3)。否则,以逗号分隔的排序顺序格式为(ColumnName SortDirection NullOrder)。其中,SortDirection 可以是 ASC 或 DESC。NullOrder 可以是 NULLS FIRST 或 NULLS LAST。默认为表格的排序顺序
optionsmap支持一些配置项
wherestring用于筛选文件的字符串。请注意,所有可能包含匹配过滤器数据的文件都会被选中进行重写

运用参数示例

spark.sql("CALL catalog_name.system.rewrite_data_files(table => 'db.sample', options => map('min-input-files','2'))");
options
General Options
属性名称Default Value备注
max-concurrent-file-group-rewrites5同时重写的最大文件组数
partial-progress.enabledfalse是否“分步提交”,允许在完成整个重写之前提交文件组
partial-progress.max-commits10如果启用了部分进度,允许此重写产生的最大提交次数
use-starting-sequence-numbertrue使用压缩开始时快照的序列号,而不是新生成快照的序列号
rewrite-job-ordernone
target-file-size-bytes536870912 (512 MB, default value of write.target-file-size-bytes from table properties)重写输出文件大小
min-file-size-bytes75% of target file size低于此阈值的文件将被考虑重写,而不考虑任何其他标准
max-file-size-bytes180% of target file size文件大小超过此阈值时,将考虑重写,而不考虑任何其他标准
min-input-files5任何文件组的文件数超过这个数量,都将被重写,而不考虑其他标准
rewrite-allfalse强制重写所有提供的文件,优先于其他选项
max-file-group-size-bytes107374182400 (100GB)单个文件组中应重写的最大数据量。整个重写操作会根据分区和分区内文件组的大小分成若干块。这有助于分解超大分区的重写,否则由于群集的资源限制,这些分区可能无法重写。
delete-file-threshold2147483647考虑重写数据文件所需的最少删除次数
Options for sort strategy
属性名称Default Value备注
compression-factor1.0shuffle 分区的数量以及 Spark 排序创建的输出文件数量取决于文件重写器使用的输入数据文件的大小。由于压缩,磁盘文件大小可能无法准确代表输出文件的大小。该参数允许用户调整用于估算实际输出数据大小的文件大小。系数大于 1.0 会生成比我们根据磁盘文件大小所预期的更多的文件。如果数值小于 1.0,根据磁盘上的文件大小,生成的文件将比我们预期的少
shuffle-partitions-per-file1每个输出文件要使用的分区数量。iceberg会使用自定义的合并操作,将这些已排序的分区拼接成一个已排序的文件。
Options for sort strategy with zorder sort_order
属性名称Default Value备注
var-length-contribution8从长度可变的输入列(字符串、二进制)中考虑的字节数
max-output-size2147483647ZOrder 算法中的字节交错量

重写清单文件

重写表的清单,优化扫描规划。

清单中的数据文件按分区规范中的字段排序。该程序使用 Spark 作业并行运行。

存储过程名 rewrite_manifests

参数名称是否必填参数类型备注
table✔️string表名
use_cachingboolean在运行过程中使用 Spark 缓存(默认为 true)
spec_idint要重写的清单的规格 ID(默认为当前规格 ID)

重写位置删除文件

Iceberg 可以重写位置删除文件,这样做有两个目的:

  • 小型压缩: 将小的位置删除文件压缩成大文件。这样可以减少存储在清单文件中的元数据大小,并减少打开小的删除文件的开销。
  • 删除悬而未决的删除记录: 过滤掉引用不再有效的数据文件的位置删除记录。重写数据文件后,指向重写数据文件的位置删除记录并不总是被标记为删除,而是会继续被表的实时快照元数据跟踪。这就是所谓的 “悬空删除 ”问题。

存储过程名 rewrite_position_delete_files

参数名称是否必填参数类型备注
table✔️string表名
optionsmap支持一些配置项

在重写过程中,悬挂删除总是会被过滤掉。

Options
属性名称Default Value备注
max-concurrent-file-group-rewrites5同时重写的最大文件组数
partial-progress.enabledfalse是否“分步提交”,允许在完成整个重写之前提交文件组
partial-progress.max-commits10如果启用了部分进度,允许此重写产生的最大提交次数
rewrite-job-ordernone
target-file-size-bytes67108864 (64MB, default value of write.delete.target-file-size-bytes from table properties)重写输出文件大小
min-file-size-bytes75% of target file size低于此阈值的文件将被考虑重写,而不考虑任何其他标准
max-file-size-bytes180% of target file size文件大小超过此阈值时,将考虑重写,而不考虑任何其他标准
min-input-files5任何文件组的文件数超过这个数量,都将被重写,而不考虑其他标准
rewrite-allfalse强制重写所有提供的文件,优先于其他选项
max-file-group-size-bytes107374182400 (100GB)单个文件组中应重写的最大数据量。整个重写操作会根据分区和分区内文件组的大小分成若干块。这有助于分解超大分区的重写,否则由于群集的资源限制,这些分区可能无法重写。

相关文章:

【Iceberg分析】Spark与Iceberg集成之常用存储过程

文章目录 Spark与Iceberg集成之常用存储过程调用语法调用样例表快照管理快照回滚根据snapshotid进行回滚根据timestamp进行回滚 设置表当前生效的快照 表元数据管理设置快照过期时间清除孤岛文件重写数据文件运用参数示例optionsGeneral OptionsOptions for sort strategyOptio…...

[旧日谈]关于Qt的刷新事件频率,以及我们在Qt的框架上做实时的绘制操作时我们该关心什么。

[旧日谈]关于Qt的刷新事件频率,以及我们在Qt的框架上做实时的绘制操作时我们该关心什么。 最近在开发的时候,发现一个依赖事件来刷新渲染的控件会导致程序很容易异常和崩溃。 当程序在运行的时候,其实软件本身的负载并不高,所以…...

云上考场小程序+ssm论文源码调试讲解

2 关键技术简介 2.1 微信小程序 微信小程序,简称小程序,英文名Mini Program,是一种全新的连接用户与服务的方式,可以快速访问、快速传播,并具有良好的使用体验。 小程序的主要开发语言是JavaScript,它与…...

城域网——IP城域网、城域以太网、光城域网

一、城域网 1、城域网(Metropolitan Area Network,MAN):一个城市范围内所建立的计算机通信网。 2、分布式队列双总线(Distributed Queue Dual Bus,DQDB):即IEEE802.6,由…...

华为Eth-trunk链路聚合加入到E-trunk实现跨设备的链路聚合

一、适用场景(注:e-trunk与eth-trunk是2个不同的概念) 1、企业中有重要的server服务器业务不能中断的情况下,可将上行链路中的汇聚交换机,通过eth-trunk链路聚合技术,实现链路故障后,仍有可用的…...

【网络安全】JSONP劫持原理及攻击实战

未经许可,不得转载。 文章目录 JSONP简介JSONP工作原理JSONP劫持Callback可定义问题JSONP简介 JSONP(JavaScript Object Notation Padding)是一种用于绕过浏览器同源策略限制的技术,使得网页可以从不同域名的服务器请求数据。由于浏览器的同源策略限制,网页通常只能向与其…...

VR全景摄影的拍摄和编辑软件推荐

随着虚拟现实技术的不断进步,VR全景摄影逐渐成为商业、娱乐和教育等多个领域中的重要工具。通过专业的设备与软件,摄影师能够创作出沉浸式的360度全景作品,为观众提供身临其境的视觉体验。在这篇文章中,我们将介绍VR全景摄影的相关…...

linux:使用sar诊断问题

使用sar诊断问题 1. CPU 使用情况2. 内存与交换3. 磁盘 I/O 活动4. 网络 I/O 活动5. 进程与上下文切换6. 系统调用与文件活动7. 电源管理8. 延迟分析9. 系统全局统计10. 查看历史记录11. 特定时间段12. 自动定时采样其他参数:使用实例: sar(S…...

CUDA编程技巧(不断搜集更新)

1 使用位运算替换部分乘法或除法 位移操作主要适用于无符号整数,对于带符号数的位移,特别是负数,可能会导致问题,如果你需要对负数执行除法或者乘法,最好谨慎使用位移运算。 1.1 替换除法 当需要将一个数除以 2、4、…...

云计算(第二阶段):mysql后的shell

第一章:变量 前言 什么是shell Shell 是一种提供用户与操作系统内核交互的工具,它接受用户输入的命令,解释后交给操作系统去执行。它不仅可以作为命令解释器,还可以通过脚本完成一系列自动化任务。 shell的特点 跨平台&#xff1a…...

Debian12离线部署Mysql全网最详细教程

一、下载安装所需要的库 1、所需要的库 # 所需要的库有 libc6_2.36-9deb12u8_amd64.deb libgcc-s1_12.2.0-14_amd64.deb libstdc6_12.2.0-14_amd64.deb gcc-12-base_12.2.0-14_amd64.deb psmisc_23.6-1_amd64.deb libnuma1_2.0.18-1_amd64.deb libmecab2_0.996-14b14_amd64.d…...

文本生成视频技术:艺术与科学的交汇点

在人工智能技术的飞速发展下,文本生成视频(Text-to-Video)技术已经成为现实。这项技术能够根据文本描述生成相应的视频内容,极大地拓展了内容创作的边界。本文将从三个主要方面对文本生成视频技术进行深入探讨:技术能达…...

【Windows】【DevOps】Windows Server 2022 采用WinSW将一个控制台应用程序作为服务启动(方便)

下载WinSW 项目地址: GitHub - winsw/winsw: A wrapper executable that can run any executable as a Windows service, in a permissive license. 下载地址: https://github.com/winsw/winsw/releases/download/v2.12.0/WinSW-x64.exe 参考配置模…...

OpenAI董事会主席Bret Taylor的Agent公司Sierra:专注于赋能下一代企业用户体验

本文由readlecture.cn转录总结。ReadLecture专注于音、视频转录与总结,2小时视频,5分钟阅读,加速内容学习与传播。 视频来源 youtube: https://www.youtube.com/watch?vriWB5nPNZEM&t47s 大纲 介绍 欢迎与介绍 介绍Bret Taylor&#x…...

【linux】信号(下)

8. 阻塞信号 (一)信号其他相关常见概念 实际执行信号的处理动作称为信号递达(Delivery)信号从产生到递达之间的状态,称为信号未决(Pending)进程可以选择阻塞 (Block )某个信号被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作(即被阻塞的信…...

Notepad++ 初学者指南

引言 对于初学者来说,选择合适的编程工具很重要,特别是考虑到易用性和计算机资源的需求。 虽然集成开发环境(IDE)如 Eclipse、IntelliJ IDEA 和 Visual Studio 提供了许多强大的功能,但对于刚开始学习编程的人来说&a…...

Web Socket 使用详解

在信息爆炸的时代,用户对网页的期待早已超越了静态内容的展示。实时聊天、股票报价、协同编辑等功能的实现,都离不开服务器与客户端之间持续、高效的数据交互。传统的HTTP请求-响应模型难以满足这种需求,而WebSocket的出现,为构建…...

【Python Web开发】Python Web开发知识全解析

Python Web开发知识全解析 Python 是一种强大的编程语言,以其简洁和高效而闻名,尤其在 Web 开发领域,它有着广泛的应用。Python 提供了许多功能强大且灵活的 Web 框架,如 Flask、Django、FastAPI 等,使得构建现代 Web…...

Android开发展开收起功能

Android开发展开收起功能 文字过长展开收起功能很普通,也很需要。 一、思路: 自定义控件MoreTextView 二、效果图: 三、关键代码: public class MoreTextView2 extends LinearLayout {/*** TextView的实际高度*/private int …...

Sealos Devbox 发布,珍爱生命,远离 CI/CD

水滴攻击太阳系用的是最原始的攻击方式:撞击!却又如此有效率。 当我们搞了一堆容器、编排、CI/CD、DevOps,发明了一大堆没什么用的名词之后,最终发现这些操作都是花里胡哨,让开发者越陷越深。 最终你会发现一个真理&…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...