当前位置: 首页 > 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,发明了一大堆没什么用的名词之后,最终发现这些操作都是花里胡哨,让开发者越陷越深。 最终你会发现一个真理&…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...