iceberg 用户文档(持续更新)
iceberg 用户文档
- 表 Schema 变更
- 查看表的元数据信息
- 表参数变更
表 Schema 变更
Iceberg 支持使用 Alter table … alter column 语法对 Schema 进行变更,示例如下
-- spark sql
-- 更改字段类型
ALTER TABLE prod.db.sample ALTER COLUMN measurement TYPE double;-- 更新字段和 comment
ALTER TABLE prod.db.sample ALTER COLUMN measurement TYPE double COMMENT 'unit is bytes per second'-- 更改字段顺序, FIRST/AFTER
ALTER TABLE prod.db.sample ALTER COLUMN col FIRST
ALTER TABLE prod.db.sample ALTER COLUMN nested.col AFTER other_col
-- null 更改,如果该字段是主键则不支持
ALTER TABLE prod.db.sample ALTER COLUMN id DROP NOT NULL
ALTER TABLE prod.db.sample ALTER COLUMN id SET NOT NULL
查看表的元数据信息
Iceberg 采用 MVCC 的设计模式,存在多个快照,允许使用使用 Spark 语法查询 iceberg 的历史快照及相关变更信息。同时Iceberg实现了文件级别的追踪,所有data files的字段max、min等数据也可以直接通过sql查询。在工场Alpha的即席查询中即可进行Iceberg表的元数据查询。下面会展示如何通过sql查询表的历史、快照信息、分区信息、数据文件信息、manifest信息:
注意:查询表的元数据时一定要以三级结构名称对表进行引用,比如:catalog_name.db_name.table_name.history
catalog_name.db_name.table_name.snapshots
- 查看表的历史 : SELECT * FROM catalog_name.db_name.table_name.history
+-------------------------+---------------------+---------------------+---------------------+
| made_current_at | snapshot_id | parent_id | is_current_ancestor |
+-------------------------+---------------------+---------------------+---------------------+
| 2019-02-08 03:29:51.215 | 5781947118336215154 | NULL | true |
| 2019-02-08 03:47:55.948 | 5179299526185056830 | 5781947118336215154 | true |
| 2019-02-09 16:24:30.13 | 296410040247533544 | 5179299526185056830 | false |
| 2019-02-09 16:32:47.336 | 2999875608062437330 | 5179299526185056830 | true |
| 2019-02-09 19:42:03.919 | 8924558786060583479 | 2999875608062437330 | true |
| 2019-02-09 19:49:16.343 | 6536733823181975045 | 8924558786060583479 | true |
+-------------------------+---------------------+---------------------+---------------------+
- 查看表的快照
–会显示表的当前有效快照,已过期快照不包含在内。
SELECT * FROM catalog_name.db_name.table_name.snapshots
+-------------------------+----------------+-----------+-----------+----------------------------------------------------+-------------------------------------------------------+
| committed_at | snapshot_id | parent_id | operation | manifest_list | summary |
+-------------------------+----------------+-----------+-----------+----------------------------------------------------+-------------------------------------------------------+
| 2019-02-08 03:29:51.215 | 57897183625154 | null | append | s3://.../table/metadata/snap-57897183625154-1.avro | { added-records -> 2478404, total-records -> 2478404, |
| | | | | | added-data-files -> 438, total-data-files -> 438, |
| | | | | | spark.app.id -> application_1520379288616_155055 } |
| ... | ... | ... | ... | ... | ... |
+-------------------------+----------------+-----------+-----------+----------------------------------------------------+-------------------------------------------------------+
查询快照那一刻的数据:
select * from table /+ OPTIONS(‘snapshot-id’=‘284660747962682079’)/;
summary 信息很有用,该字段记录了本次 snapshot 新增的文件数、记录数及变更的分区。你也可以通过直接指定想要的summary中字段来获取指定信息:
select snapshot_id, summary[‘total-data-files’] from catalog_name.db_name.table_name.snapshots;
- 查看表的分区信息
–Iceberg不支持Hive那样查询分区信息:
show partitions table_name --❌
–在Iceberg中查询分区信息方式:
SELECT * FROM catalog_name.db_name.table_name.partitions --✅
+--------------------+---------------+-------------+--+
| partition | record_count | file_count |
+--------------------+---------------+-------------+--+
| {"date":20210407} | 1000000 | 1 |
| {"date":20210420} | 1000000 | 1 |
| {"date":20210421} | 1000000 | 1 |
| {"date":20210930} | 1000000 | 1 |
| {"date":20210418} | 1000000 | 1 |
+--------------------+---------------+-------------+--+
- 查看数据文件的信息
Iceberg将每一个数据文件的每个字段的max、min等信息都通过manifest文件记录了下来,可以直接通过sql查到:
SELECT * FROM catalog_name.db_name.table_name.files
+-------------------------------------------------------------------------+-------------+--------------+--------------------+--------------------+------------------+-------------------+------------------+-----------------+-----------------+--------------+---------------+
| file_path | file_format | record_count | file_size_in_bytes | column_sizes | value_counts | null_value_counts | nan_value_counts | lower_bounds | upper_bounds | key_metadata | split_offsets |
+-------------------------------------------------------------------------+-------------+--------------+--------------------+--------------------+------------------+-------------------+------------------+-----------------+-----------------+--------------+---------------+
| s3:/.../table/data/00000-3-8d6d60e8-d427-4809-bcf0-f5d45a4aad96.parquet | PARQUET | 1 | 597 | [1 -> 90, 2 -> 62] | [1 -> 1, 2 -> 1] | [1 -> 0, 2 -> 0] | [] | [1 -> , 2 -> c] | [1 -> , 2 -> c] | null | [4] |
| s3:/.../table/data/00001-4-8d6d60e8-d427-4809-bcf0-f5d45a4aad96.parquet | PARQUET | 1 | 597 | [1 -> 90, 2 -> 62] | [1 -> 1, 2 -> 1] | [1 -> 0, 2 -> 0] | [] | [1 -> , 2 -> b] | [1 -> , 2 -> b] | null | [4] |
| s3:/.../table/data/00002-5-8d6d60e8-d427-4809-bcf0-f5d45a4aad96.parquet | PARQUET | 1 | 597 | [1 -> 90, 2 -> 62] | [1 -> 1, 2 -> 1] | [1 -> 0, 2 -> 0] | [] | [1 -> , 2 -> a] | [1 -> , 2 -> a] | null | [4] |
+-------------------------------------------------------------------------+-------------+--------------+--------------------+--------------------+------------------+-------------------+------------------+-----------------+-----------------+--------------+---------------+
- 查看Manifest文件信息
SELECT * FROM catalog_name.db_name.table_name.manifests
+----------------------------------------------------------------------+--------+-------------------+---------------------+------------------------+---------------------------+--------------------------+--------------------------------------+
| path | length | partition_spec_id | added_snapshot_id | added_data_files_count | existing_data_files_count | deleted_data_files_count | partition_summaries |
+----------------------------------------------------------------------+--------+-------------------+---------------------+------------------------+---------------------------+--------------------------+--------------------------------------+
| s3://.../table/metadata/45b5290b-ee61-4788-b324-b1e2735c0e10-m0.avro | 4479 | 0 | 6668963634911763636 | 8 | 0 | 0 | [[false,null,2019-05-13,2019-05-15]] |
+----------------------------------------------------------------------+--------+-------------------+---------------------+------------------------+---------------------------+--------------------------+--------------------------------------+
partition_summaries列的字段依次对应了:
| Filed name | Type | Description | v1 | v2 |
|---|---|---|---|---|
| contains_null | boolean | manifest文件是否包含了至少一个分区字段为null值的行 | required | required |
| contains_nan | boolean | manifest文件是否包含了至少一个分区字段为NaN值的行 | optional | optional |
| lower_bound | bytes | 分区字段中非空、非NaN值的下界,如果所有值都是空或NaN,则为空 | optional | optional |
| upper_bound | bytes | 分区字段中非空、非NaN值的上界,如果所有值都是空或NaN,则为空 | optional | optional |
表参数变更
Iceberg 支持通过 Spark DDL 进行修改,示例如下:
ALTER TABLE prod.db.sample SET TBLPROPERTIES ('read.split.target-size'='268435456'
);
相关文章:
iceberg 用户文档(持续更新)
iceberg 用户文档 表 Schema 变更查看表的元数据信息表参数变更 表 Schema 变更 Iceberg 支持使用 Alter table … alter column 语法对 Schema 进行变更,示例如下 -- spark sql -- 更改字段类型 ALTER TABLE prod.db.sample ALTER COLUMN measurement TYPE doubl…...
基于YOLOv8的船舶检测系统
基于YOLOv8的船舶检测系统 (价格85) 包含 【散货船,集装箱船,渔船,杂货船,矿砂船,客船】 6个类 通过PYQT构建UI界面,包含图片检测,视频检测,摄像头实时检测。 (该…...
使用腾讯云域名解析实现网站重定向
前言 最近,在CSDN平台上我写了一系列博客,希望能与同学分享一些技术心得。然而,每当需要向他人推荐我的博客时,那串复杂且缺乏规律的CSDN博客首页域名总让我感到不便。这让我开始思考,如果能将这一域名替换为一个既个…...
为什么相比直接使用new和std::shared_ptr构造函数,make_shared在内存分配和管理方面更为高效。
使用std::make_shared相比于直接使用new和std::shared_ptr构造函数在内存分配和管理方面更为高效,主要原因如下: 内存分配效率 std::make_shared通过一次内存分配来同时分配控制块(用于引用计数等)和对象的内存。这种方式减少了…...
7-Python数据类型——列表和元组的详解(增删改查、索引、切片、步长、循环)
一、列表 1.1 列表 list 有序且可变的容器,可以存放多个不同类型的元素 列表就是专门用来记录多个同种属性的值 列表:存储同一个类别的数据,方便操作 字符串,不可变:即:创建好之后内部就无法修改【内置…...
大数据-61 Kafka 高级特性 消息消费02-主题与分区 自定义反序列化 拦截器 位移提交 位移管理 重平衡
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...
Google Gemma2 2B:语言模型的“小时代”到来?
北京时间8月1日凌晨(当地时间7月31日下午),Google发布了其Gemma系列开源语言模型的更新,在AI领域引发了巨大的震动。Google Developer的官方博客宣布,与6月发布的27B和9B参数版本相比,新的2B参数模型在保持…...
三线程顺序打印1-100
三线程顺序打印1-100 题目 三个线程顺序打印1-100; 解题 基本思路 首先需要创建三个线程, 确定使用线程1打印 num % 3 1 的数, 线程2打印 num % 3 2 的数, 线程3打印 num % 3 0 的数;使用 synchronized 同步锁让每次只有一个线程进行打印, 每个线程打印前先判断当前数是…...
中央处理器CPU
中央处理器CPU cpu的组成(从功能方面来看)cpu的执行过程★.取指令阶段★.解码阶段★.执行阶段 重点: 1.cpu的组成 2.cpu怎么执行程序(命令) cpu的组成(从功能方面来看) 寄存器:用来临…...
用Python实现AI人脸识别
实现AI人脸识别通常涉及到使用深度学习库,如TensorFlow或PyTorch,配合预训练的人脸识别模型。以下是一个使用Python和TensorFlow框架中的tensorflow_hub模块来加载和使用一个预训练的人脸识别模型的简单示例。 步骤 1: 安装必要的库 首先,你…...
MSPM0G3507_2024电赛自动行驶小车(H题)_问题与感悟
这次电赛题目选的简单了,还规定不能使用到摄像头,这让我之前学习的Opencv 4与树莓派无用武之地了,但我当时对于三子棋题目饶有兴趣,但架不住队友想稳奖,只能选择这个H题了...... 之后我还想抽空将这个E题三子棋题目做…...
C语言:指针(2)
一.数组名 在了解数组名前我们先看一段代码 int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0]; 根据我们上一篇学习的知识,我们知道&arr[0]是数组第一个元素的地址,这时我们再看另一段代码的运行结果。 #include <stdio.h> int ma…...
数组——二维数组
数组(中) 二维数组 定义 二维数组本质上是一个行列式的组合,也就是说二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。 二维数组可被视为一个特殊的一维数组,相当于二维数组又是一个一维数组,只不过它的元素是一维数组。 …...
深入 Vue 组件与状态管理的教程
目录 深入 Vue 组件与状态管理的教程第一部分:深入组件1. 理解插槽(Slots)的使用1.1 基础插槽示例1.2 具名插槽1.3 作用域插槽 第二部分:Vue Router1. 学习 Vue Router 的基本配置1.1 基本路由配置1.2 嵌套路由1.3 路由参数 2. 导…...
Spring Boot 实现异步处理多个并行任务
在现代Web应用开发中,异步处理和多任务并行处理对于提高系统的响应性和吞吐量至关重要。Spring Boot 提供了多种机制来实现异步任务处理,本文将介绍如何利用这些机制来优化您的应用程序性能。 1. 引言 在高负载情况下,如果所有的请求都采用…...
TiDB系列之:使用Flink TiDB CDC Connector采集数据
TiDB系列之:使用Flink TiDB CDC Connector采集数据 一、依赖项二、Maven依赖三、SQL Client JAR四、如何创建 TiDB CDC 表五、连接器选项六、可用元数据七、特征一次性处理启动阅读位置多线程读取DataStream Source 八、数据类型映射 TiDB CDC 连接器允许从 TiDB 数…...
每日一道算法题 最接近的三数之和
题目 16. 最接近的三数之和 - 力扣(LeetCode) Python class Solution:def threeSumClosest(self, nums: List[int], target: int) -> int:nums.sort()nlen(nums)ans0min_diffinf # infinite 无穷for i in range(n-2):tmpnums[i]li1rn-1while l<…...
搭建自己的金融数据源和量化分析平台(六):下载并存储沪深两市上市公司财报
基于不依赖wind、某花顺等第三方平台数据的考虑,尝试直接从财报中解析三大报表进而计算ROE等财务指标,因此需要下载沪深两市的上市公司财报数据,便于后续从pdf中解析三大报表。 深市爬虫好做,先放深市爬虫: 根据时间段…...
C语言-常见关键字详解
一、const 关键字const用于声明常量,赋值后,其值不能再被修改。 示例: const int MAX_COUNT 100; 二、static static关键字在不同情境下有不同作用: 1.函数中的静态变量:保留变量状态,仅初始化一次&a…...
异步编程之std::future(一): 使用
目录 1.概述 2.std::future的基本用法 3.使用 std::shared_future 4.std::future的使用场景 5.总结 1.概述 在编程实践中,我们常常需要使用异步调用。通过异步调用,我们可以将一些耗时、阻塞的任务交给其他线程来执行,从而保证当前线程的…...
自然语言处理助力法律领域AI架构,提升司法服务质量
自然语言处理助力法律领域AI架构:从技术落地到司法服务升级的全链路实践 1. 引言:法律行业的“效率痛点”与NLP的破局之路 1.1 痛点引入:当法律遇到“信息过载”与“专业门槛” 深夜十点的律师办公室里,张律师还在揉着太阳穴核对第三份合同的条款——密密麻麻的法条引用…...
Qwen3-ASR-1.7B部署案例:AI初创公司低成本构建ASR SaaS服务
Qwen3-ASR-1.7B部署案例:AI初创公司低成本构建ASR SaaS服务 想象一下,你是一家AI初创公司的技术负责人,老板给你下了个任务:两周内,为公司的新产品上线一个语音转文字(ASR)功能。要求是识别要准…...
电工必看:正弦交流电路中的相量法实战技巧(附计算示例)
电工必看:正弦交流电路中的相量法实战技巧(附计算示例) 在电气工程领域,正弦交流电路的分析是每位电工和电气工程师必须掌握的核心技能。面对复杂的电路计算,传统的三角函数解析法往往让从业者陷入繁琐的运算泥潭。相量…...
从‘深度学习之美’到TensorFlow 2.9:一个MNIST手写识别项目的实战重构记
1. 当经典教材遇上TensorFlow 2.9:我的MNIST重构历险记 记得第一次翻开《深度学习之美》这本书时,我被其中用TensorFlow实现MNIST手写识别的案例深深吸引。但当我兴冲冲打开电脑准备复现时,却发现书中的TensorFlow 1.x代码在2.9环境下几乎寸步…...
3步解锁苹果电脑新玩法:用PlayCover畅玩iOS游戏和应用
3步解锁苹果电脑新玩法:用PlayCover畅玩iOS游戏和应用 【免费下载链接】PlayCover Community fork of PlayCover 项目地址: https://gitcode.com/gh_mirrors/pl/PlayCover 还在羡慕朋友在iPad上玩热门手游,而你的Mac只能干看着?想知道…...
告别手动Dockerfile!io.fabric8插件如何用Maven配置自动生成镜像(附Spring Boot实战)
告别手动Dockerfile!io.fabric8插件如何用Maven配置自动生成镜像(附Spring Boot实战) 在Java生态中,容器化部署已成为现代应用交付的标准方式。传统做法要求开发者同时维护Dockerfile和构建脚本,这种割裂的配置方式不仅…...
StackEdit:让Markdown创作如虎添翼的开源编辑器全攻略
StackEdit:让Markdown创作如虎添翼的开源编辑器全攻略 【免费下载链接】stackedit In-browser Markdown editor 项目地址: https://gitcode.com/gh_mirrors/st/stackedit 1. 核心价值解析:为什么StackEdit能重塑你的写作体验? 想象一…...
3分钟完成Axure RP中文界面汉化:终极完整指南
3分钟完成Axure RP中文界面汉化:终极完整指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包,不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axu…...
提升Blender渲染效率:立方盒反射烘培与材质优化指南
提升Blender渲染效率:立方盒反射烘培与材质优化指南 在3D创作领域,渲染效率与质量始终是设计师面临的核心挑战。Blender作为开源三维软件的代表,其渲染引擎的灵活性与强大功能为艺术家提供了无限可能,但同时也对硬件资源提出了较高…...
从零推导贝尔曼方程:强化学习中的价值函数与策略优化
1. 强化学习中的价值函数基础 想象你正在玩一个迷宫游戏,每走一步都会消耗体力,找到出口能获得大奖。这时候你会想:**"从当前位置出发,最终能获得多少奖励?"这个问题的答案就是价值函数(Value Fu…...
