广告位联系
返回顶部
分享到

Apache Iceberg底层数据查询原理解析

linux 来源:互联网 作者:佚名 发布时间:2024-09-28 21:46:41 人浏览
摘要

Apache Iceberg 底层数据存储 Iceberg 数据组织图(HDFS): 5个SnapShot对应5个manifest list清单列表。 1.查询最新快照数据 获取最新元数据 获取 Iceberg 表的最新元数据文件,eg:00000-ec504.metadata.json。 解析

Apache Iceberg 底层数据存储

Iceberg 数据组织图(HDFS): 5个SnapShot对应5个manifest list清单列表。

1.查询最新快照数据

获取最新元数据
获取 Iceberg 表的最新元数据文件,eg:00000-ec504.metadata.json。

解析元数据
从元数据文件中提取以下信息:

  • 当前表的快照 ID:949358624197301886
  • 所有快照信息:在 JSON 中的 snapshots 数组。

获取快照文件信息
根据快照 ID,找到对应的 Avro 文件信息,eg:snap--32800.avro。

在该快照文件中,提取 Manifest File清单文件信息:

  • *32800-m0.avro
  • *2abba-m0.avro
  • *d33de-m0.avro
  • *748bf-m0.avro
  • *b946e-m0.avro

读取最新数据
读取以上 Manifest File清单文件中描述的 Parquet 数据文件(Data files)。

分析 Snap 文件
在 snap--32800.avro 文件中,可以找到以下属性:

  • deleted data files count
  • added data files count
  • existing data files count

判断数据文件状态
Iceberg 根据 deleted data files count 判断是否存在被删除的数据:

如果该值大于 0,表示对应的 Manifest 文件中有已删除的数据。读取数据时,无需读取这些被删除的文件。

Manifest 清单文件分析
根据 Manifest 清单文件,找到对应的 Parquet 文件存储位置。
每个 Manifest 文件中有 status 属性:

1:代表对应的 Parquet 文件为新增文件,需要读取。

2:代表 Parquet 文件被删除。

2.查询指定快照(历史快照)数据

Apache Iceberg 支持查询历史上任何时刻的快照。

要查询特定快照,需要指定 snapshot-id 属性,可以通过 Spark 或 Flink 实现。

在 Spark 中查询指定快照的数据:

1

2

3

4

spark.read

  .option("snapshot-id", 6155488348798912701L)

  .format("iceberg")

  .load("path")

查询某个快照数据的原理:

指定快照 ID
在读取数据时,通过 snapshot-id 指定要查询的快照。

查找快照信息
Iceberg 会根据指定的快照 ID 检索相关的元数据(如下metadata里面的snapshots数组),包括快照中包含的数据文件和 Manifest 文件。

3.根据时间戳查询某个快照数据

Apache Iceberg 支持通过 as-of-timestamp 参数读取特定时间戳的快照数据,通常也是通过 Spark 或 Flink 实现。

在 Spark 中根据时间戳查询数据:

1

2

3

4

spark.read

  .option("as-of-timestamp", "时间戳")

  .format("iceberg")

  .load("path")

指定时间戳
使用 as-of-timestamp 指定要查询的时间点。

查找快照信息
Iceberg 将查找与时间戳对应的快照,利用 *.metadata.json 文件中的信息。

属性解析
在元数据文件中,除了 current-snapshot-id 和 snapshots 属性外,还有一个 snapshot-log 属性,该属性记录了快照的历史信息。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 解决生产环境遇到的curl和yum命令报错问题

    解决生产环境遇到的curl和yum命令报错问题
    生产环境进行了漏洞扫描检测出sshd服务的版本漏洞(CVE-2024-6387),给出的解决方案是升级最新版本的sshd服务即最新版本9.8,升级sshd服务需
  • Apache Iceberg底层数据查询原理解析

    Apache Iceberg底层数据查询原理解析
    Apache Iceberg 底层数据存储 Iceberg 数据组织图(HDFS): 5个SnapShot对应5个manifest list清单列表。 1.查询最新快照数据 获取最新元数据 获取 Icebe
  • Apache Airflow使用教程介绍
    Apache Airflow 是一个用于编排和调度任务的开源平台。它适用于创建、调度和监控数据工作流。以下是使用 Airflow 的基本步骤: 1. 安装 Apach
  • Linux文件传输及解决yum安装失效的方法

    Linux文件传输及解决yum安装失效的方法
    Linux文件传输地图如下,先选取你所需的场景,若你是需要Linux和Linux之间传输文件就查看SCP工具即可。 一.下载网站文件 前提是有网: 检查
  • 实现在Linux上执行exe文件

    实现在Linux上执行exe文件
    在Linux上执行exe文件 出现这个问题的初衷是,要用工控机去实现一些控制 于是乎买了个无线网卡,其自带的驱动是exe文件 在Ubuntu上无法执行
  • Linux指定端口连接Redis服务器的步骤方法
    Redis是一种流行的开源内存数据库,常用于缓存、消息队列等场景。在Linux系统上,连接Redis服务器需要使用客户端工具,在本篇博文中,我
  • linux设置定时任务的教程
    linux设置定时任务执行定时脚本 系统定时任务周期:每小时 控制定时任务目录: /etc/cron.hourly 定时 每小时顺序: 1.进入定时任务目录 1 [r
  • Nginx动静分离的代码
    为了加快网站的解析速度,就是把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。 简单来说,就
  • Nginx访问控制的原理及实现
    什么是访问控制? 访问控制是一种安全机制,旨在限制系统或网络资源的访问权限,确保只有经过授权的用户或系统可以访问这些资源。对
  • Nginx超时时间的配置介绍
    Nginx是一款自由、开源、高性能的HTTP和反向代理服务器,它可以通过不同的设置来提高网站的性能和安全性。其中,设置Nginx超时时间非常重
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计