Apache Iceberg 底層數(shù)據(jù)查詢?cè)斫馕?/h1>
更新時(shí)間:2024年09月27日 16:11:01 作者:喻師傅
Apache Iceberg是一個(gè)開源表格格式,用于大型分析數(shù)據(jù)集,本文主要介紹了如何通過快照、Manifest文件和元數(shù)據(jù)文件查詢Iceberg表的數(shù)據(jù),通過解析元數(shù)據(jù)文件獲取當(dāng)前表的快照ID,進(jìn)而讀取對(duì)應(yīng)的Avro文件和Manifest文件中的Parquet數(shù)據(jù)文件,感興趣的朋友一起看看吧

Apache Iceberg 底層數(shù)據(jù)存儲(chǔ)


Iceberg 數(shù)據(jù)組織圖(HDFS): 5個(gè)SnapShot對(duì)應(yīng)5個(gè)manifest list清單列表。

1.查詢最新快照數(shù)據(jù)


獲取最新元數(shù)據(jù)
獲取 Iceberg 表的最新元數(shù)據(jù)文件,eg:00000-ec504.metadata.json。

解析元數(shù)據(jù)
從元數(shù)據(jù)文件中提取以下信息:
- 當(dāng)前表的快照 ID:
949358624197301886 - 所有快照信息:在 JSON 中的
snapshots 數(shù)組。

獲取快照文件信息
根據(jù)快照 ID,找到對(duì)應(yīng)的 Avro 文件信息,eg:snap--32800.avro。

在該快照文件中,提取 Manifest File清單文件信息:
*32800-m0.avro*2abba-m0.avro*d33de-m0.avro*748bf-m0.avro*b946e-m0.avro

讀取最新數(shù)據(jù)
讀取以上 Manifest File清單文件中描述的 Parquet 數(shù)據(jù)文件(Data files)。

分析 Snap 文件
在 snap--32800.avro 文件中,可以找到以下屬性:
deleted data files countadded data files countexisting data files count

判斷數(shù)據(jù)文件狀態(tài)
Iceberg 根據(jù) deleted data files count 判斷是否存在被刪除的數(shù)據(jù):
如果該值大于 0,表示對(duì)應(yīng)的 Manifest 文件中有已刪除的數(shù)據(jù)。讀取數(shù)據(jù)時(shí),無需讀取這些被刪除的文件。

Manifest 清單文件分析
根據(jù) Manifest 清單文件,找到對(duì)應(yīng)的 Parquet 文件存儲(chǔ)位置。
每個(gè) Manifest 文件中有 status 屬性:
1:代表對(duì)應(yīng)的 Parquet 文件為新增文件,需要讀取。
2:代表 Parquet 文件被刪除。
2.查詢指定快照(歷史快照)數(shù)據(jù)
Apache Iceberg 支持查詢歷史上任何時(shí)刻的快照。
要查詢特定快照,需要指定 snapshot-id 屬性,可以通過 Spark 或 Flink 實(shí)現(xiàn)。
在 Spark 中查詢指定快照的數(shù)據(jù):
spark.read
.option("snapshot-id", 6155488348798912701L)
.format("iceberg")
.load("path")
查詢某個(gè)快照數(shù)據(jù)的原理:
指定快照 ID
在讀取數(shù)據(jù)時(shí),通過 snapshot-id 指定要查詢的快照。
查找快照信息
Iceberg 會(huì)根據(jù)指定的快照 ID 檢索相關(guān)的元數(shù)據(jù)(如下metadata里面的snapshots數(shù)組),包括快照中包含的數(shù)據(jù)文件和 Manifest 文件。

3.根據(jù)時(shí)間戳查詢某個(gè)快照數(shù)據(jù)
Apache Iceberg 支持通過 as-of-timestamp 參數(shù)讀取特定時(shí)間戳的快照數(shù)據(jù),通常也是通過 Spark 或 Flink 實(shí)現(xiàn)。
在 Spark 中根據(jù)時(shí)間戳查詢數(shù)據(jù):
spark.read
.option("as-of-timestamp", "時(shí)間戳")
.format("iceberg")
.load("path")
指定時(shí)間戳
使用 as-of-timestamp 指定要查詢的時(shí)間點(diǎn)。
查找快照信息
Iceberg 將查找與時(shí)間戳對(duì)應(yīng)的快照,利用 *.metadata.json 文件中的信息。
屬性解析
在元數(shù)據(jù)文件中,除了 current-snapshot-id 和 snapshots 屬性外,還有一個(gè) snapshot-log 屬性,該屬性記錄了快照的歷史信息。

到此這篇關(guān)于Apache Iceberg - 底層數(shù)據(jù)查詢?cè)淼奈恼戮徒榻B到這了,更多相關(guān)Apache Iceberg原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
-
Linux之多線程以及多線程并發(fā)訪問同一塊內(nèi)存的處理問題
這篇文章主要介紹了Linux之多線程以及多線程并發(fā)訪問同一塊內(nèi)存的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教 2023-03-03
-
Windows 和 Linux 上Redis的安裝守護(hù)進(jìn)程配置方法
​ Redis是目前最常用的非關(guān)系型數(shù)據(jù)庫(kù)(NOSql)之一,常以Key-Value的形式存儲(chǔ)。這篇文章主要介紹了Windows 和 Linux 上Redis的安裝守護(hù)進(jìn)程配置 ,需要的朋友可以參考下 2019-06-06
-
關(guān)于Linux的透明大頁(yè)詳細(xì)介紹
這片文章介紹了Linux的Transparent HugePages,一是介紹了查看是否啟用透明大頁(yè),二是如何啟用、警用透明大頁(yè),需要的朋友可以參考下 2015-07-07
-
解決Centos7 安裝騰達(dá)U12無線網(wǎng)卡驅(qū)動(dòng)問題
這篇文章主要介紹了Centos7 安裝騰達(dá)U12無線網(wǎng)卡驅(qū)動(dòng),本文給出了解決過程,通過兩種方法給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下 2019-10-10
-
Linux 檢測(cè)服務(wù)器是否連接著網(wǎng)絡(luò)
這篇文章主要介紹了Linux 檢測(cè)服務(wù)器是否連接著網(wǎng)絡(luò)的相關(guān)資料,需要的朋友可以參考下 2017-05-05
最新評(píng)論

Apache Iceberg 底層數(shù)據(jù)存儲(chǔ)


Iceberg 數(shù)據(jù)組織圖(HDFS): 5個(gè)SnapShot對(duì)應(yīng)5個(gè)manifest list清單列表。

1.查詢最新快照數(shù)據(jù)


獲取最新元數(shù)據(jù)
獲取 Iceberg 表的最新元數(shù)據(jù)文件,eg:00000-ec504.metadata.json。

解析元數(shù)據(jù)
從元數(shù)據(jù)文件中提取以下信息:
- 當(dāng)前表的快照 ID:
949358624197301886 - 所有快照信息:在 JSON 中的
snapshots數(shù)組。

獲取快照文件信息
根據(jù)快照 ID,找到對(duì)應(yīng)的 Avro 文件信息,eg:snap--32800.avro。

在該快照文件中,提取 Manifest File清單文件信息:
*32800-m0.avro*2abba-m0.avro*d33de-m0.avro*748bf-m0.avro*b946e-m0.avro

讀取最新數(shù)據(jù)
讀取以上 Manifest File清單文件中描述的 Parquet 數(shù)據(jù)文件(Data files)。

分析 Snap 文件
在 snap--32800.avro 文件中,可以找到以下屬性:
deleted data files countadded data files countexisting data files count

判斷數(shù)據(jù)文件狀態(tài)
Iceberg 根據(jù) deleted data files count 判斷是否存在被刪除的數(shù)據(jù):
如果該值大于 0,表示對(duì)應(yīng)的 Manifest 文件中有已刪除的數(shù)據(jù)。讀取數(shù)據(jù)時(shí),無需讀取這些被刪除的文件。

Manifest 清單文件分析
根據(jù) Manifest 清單文件,找到對(duì)應(yīng)的 Parquet 文件存儲(chǔ)位置。
每個(gè) Manifest 文件中有 status 屬性:
1:代表對(duì)應(yīng)的 Parquet 文件為新增文件,需要讀取。
2:代表 Parquet 文件被刪除。
2.查詢指定快照(歷史快照)數(shù)據(jù)
Apache Iceberg 支持查詢歷史上任何時(shí)刻的快照。
要查詢特定快照,需要指定 snapshot-id 屬性,可以通過 Spark 或 Flink 實(shí)現(xiàn)。
在 Spark 中查詢指定快照的數(shù)據(jù):
spark.read
.option("snapshot-id", 6155488348798912701L)
.format("iceberg")
.load("path")查詢某個(gè)快照數(shù)據(jù)的原理:
指定快照 ID
在讀取數(shù)據(jù)時(shí),通過 snapshot-id 指定要查詢的快照。
查找快照信息
Iceberg 會(huì)根據(jù)指定的快照 ID 檢索相關(guān)的元數(shù)據(jù)(如下metadata里面的snapshots數(shù)組),包括快照中包含的數(shù)據(jù)文件和 Manifest 文件。

3.根據(jù)時(shí)間戳查詢某個(gè)快照數(shù)據(jù)
Apache Iceberg 支持通過 as-of-timestamp 參數(shù)讀取特定時(shí)間戳的快照數(shù)據(jù),通常也是通過 Spark 或 Flink 實(shí)現(xiàn)。
在 Spark 中根據(jù)時(shí)間戳查詢數(shù)據(jù):
spark.read
.option("as-of-timestamp", "時(shí)間戳")
.format("iceberg")
.load("path")指定時(shí)間戳
使用 as-of-timestamp 指定要查詢的時(shí)間點(diǎn)。
查找快照信息
Iceberg 將查找與時(shí)間戳對(duì)應(yīng)的快照,利用 *.metadata.json 文件中的信息。
屬性解析
在元數(shù)據(jù)文件中,除了 current-snapshot-id 和 snapshots 屬性外,還有一個(gè) snapshot-log 屬性,該屬性記錄了快照的歷史信息。

到此這篇關(guān)于Apache Iceberg - 底層數(shù)據(jù)查詢?cè)淼奈恼戮徒榻B到這了,更多相關(guān)Apache Iceberg原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux之多線程以及多線程并發(fā)訪問同一塊內(nèi)存的處理問題
這篇文章主要介紹了Linux之多線程以及多線程并發(fā)訪問同一塊內(nèi)存的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
Windows 和 Linux 上Redis的安裝守護(hù)進(jìn)程配置方法
​ Redis是目前最常用的非關(guān)系型數(shù)據(jù)庫(kù)(NOSql)之一,常以Key-Value的形式存儲(chǔ)。這篇文章主要介紹了Windows 和 Linux 上Redis的安裝守護(hù)進(jìn)程配置 ,需要的朋友可以參考下2019-06-06
關(guān)于Linux的透明大頁(yè)詳細(xì)介紹
這片文章介紹了Linux的Transparent HugePages,一是介紹了查看是否啟用透明大頁(yè),二是如何啟用、警用透明大頁(yè),需要的朋友可以參考下2015-07-07
解決Centos7 安裝騰達(dá)U12無線網(wǎng)卡驅(qū)動(dòng)問題
這篇文章主要介紹了Centos7 安裝騰達(dá)U12無線網(wǎng)卡驅(qū)動(dòng),本文給出了解決過程,通過兩種方法給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
Linux 檢測(cè)服務(wù)器是否連接著網(wǎng)絡(luò)
這篇文章主要介紹了Linux 檢測(cè)服務(wù)器是否連接著網(wǎng)絡(luò)的相關(guān)資料,需要的朋友可以參考下2017-05-05

