精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Apache Iceberg 中引入索引提升查詢性能

開發 開源
本文將討論火山引擎EMR團隊針對 Iceberg 組件的優化思路,通過引入索引來提高查詢性能。

Apache Iceberg 是一種開源數據 Lakehouse 表格式,提供強大的功能和開放的生態系統,如:Time travel,ACID 事務,partition evolution,schema evolution 等功能。

本文將討論火山引擎EMR團隊針對 Iceberg 組件的優化思路,通過引入索引來提高查詢性能。

采用 Iceberg 構建數據湖倉

火山引擎 E-MapReduce(簡稱 EMR)是火山引擎數智平臺(VeDI)旗下的云原生開源大數據平臺產品, 提供了企業級的 Hadoop、Spark、Flink、Hive、Presto、Kafka、StarRocks、Doris、Hudi、Iceberg 等大數據生態組件,100% 開源兼容,可以幫助企業快速構建企業級大數據平臺,降低運維門檻。秉承業界領先的 EMR Stateless 理念,火山引擎 EMR 可以實現集群級別的彈性伸縮,即無業務需求時釋放集群,有業務需求時再拉起集群,配合智能化的冷熱數據分層存儲能力,助力企業在大數據基建領域進一步降本提效。

基于火山引擎 EMR 產品,可以構建數據湖倉、近實時數倉、實時數倉等場景。例如,使用 Iceberg 構建數據湖倉,從 ODS 到 DWD 等不同的分層進行建模,將數據 HFDS 或 TOS(火山引擎對象存儲產品)上,然后采用 Trino 或者 Spark 去做分析。

圖片

如何加速查詢性能,使其盡可能接近專門的分布式數倉(如 ClickHouse 等),是需要思考和探究的問題。

索引是業界常用的提高查詢性能的手段之一,針對 Iceberg 我們也采用了增加索引的方式。對常用的列字段構建 Index,在進行 table scan 時利用 Index 只返回匹配的數據,降低匹配數據量,從而大大提高查詢性能。

Iceberg 介紹

介紹 Iceberg Index 功能之前,我們先簡單介紹下 Iceberg 的架構。Iceberg 具有分層的元數據架構,如下如所示。

圖片

Spark、Presto、Flink 等多種引擎讀取 Iceberg 的數據,就是利用分層的元數據找到 data file 列表。例如,Spark 引擎解析 SQL 語句,然后調用 Iceberg 的接口,獲取 data file 并進行 task 切分。

圖片

在 Manifest file 中記錄了 data file 中字段的最大值和最小值。

"data_file": {
        "content": 0,
        "file_path": "hdfs://emr-cluster/warehouse/hive/db.db/sample/data/ts_day=2020-12-31/category=diamond/00000-0-220aa9a6-4530-499f-9450-da946d667624-00001.parquet",
        "file_format": "PARQUET",
        ......
        "lower_bounds": {
                "array": [{
                        "key": 1,
                        "value": "\u0006\u0000\u0000\u0000"
                }, {
                        "key": 2,
                        "value": "diamond"
                }, {
                        "key": 3,
                        "value": "\u0000\u0004ü??·\u0005\u0000"
                }]
        },
        "upper_bounds": {
                "array": [{
                        "key": 1,
                        "value": "\u0007\u0000\u0000\u0000"
                }, {
                        "key": 2,
                        "value": "diamond"
                }, {
                        "key": 3,
                        "value": "\u0000¨od?·\u0005\u0000"
                }]
        },
        ......
}

利用這些信息,可以進行 data file 級別的初步過濾,把不符合條件的 data file 過濾掉,進而減少一部分數據的讀取。

實現索引的必要性

既然 Iceberg 已經提供 data file 級別的過濾。為什么我們還需要引入索引呢?以下面例子進行介紹,左邊兩個表格分別是 data file 文件里面的內容,右邊表格是 data file 對應的 manifest file。

圖片

針對SELECT * FROM table WHERE age > 50,利用 min-max 統計信息,很容易發現 data file 1 中沒有滿足條件的數據,因此 data file 1 就不會參與計算。

但是針對多維分析,如name = 'LiLy' AND age > 30,利用nameage的min-max的統計信息分別對條件name = 'LiLy'age > 30進行判斷,得到 data file 1 和 data file 2 都滿足條件。然而,仔細分析 data file 1 和 data file 2 的數據,并不存在符合條件的數據,因此 min-max 過濾效果不太理想。所以通過引入合適的索引功能,可以提高 data skipping 的概率,提高查詢性能。

1.  首先探究索引類型

索引類型有多種,如 BloomFilter、Ribbon Filter、Dictionary Index、BitMap 等。為了滿足多維分析場景,我們選擇了[Range-Encoded BitMap]https://www.featurebase.com/blog/range-encoded-bitmaps ( Base-2, Bit-sliced Index),可適用于高基數場景,滿足=、<、>、IN、BETWEEN 等操作的多維分析。

例如,對上面的 name 和 age 兩列分別計算索引信息。由于 name 屬于字符串類型,需要先進行字典編碼再進行計算索引信息。采用 Range-Encoded 技術,根據數據的二進制相關信息以及對應的 pos 信息生成索引數據。利用索引數據分析得到,同時滿足name = 'LiLy'age > 30的數據不在同一行,恰好可利用 Range-Encoded 的交并運算將數據進行過濾掉,因此 data file 1 不用參與計算。

也就是說,BitMap 的交并運算可以更好地在復雜過濾條件的情況下過濾掉更多的數據文件。

圖片

2.  接下來探究索引的粒度。

Iceberg 提供的 min-max,也是一種文件級別的索引。文件級別的索引就是根據 filter 條件過濾掉不符合條件的 data file。文件級別的索引可適用于多種文件類型,但這種粒度比較粗,只要 data file 中有一條數據符合條件,該 data file 中的數據就會全部讀取出來參與計算,從而影響 SQL 的查詢性能。

對于 Parquet、ORC 的文件格式,提供有 file chunk 的概念(row group or stripe),我們完全可以按照 row group / stripe 粒度,對數據進行過濾。(為了方便描述,我們將 row group 和 stripe 統稱 split。)

如:SQL語句:SELECT * FROM table WHERE col_1> v1 AND col_2 = v2,其中對 col_1 字段和 col_2 字段已構建 Index 信息。現在利用索引對 SQL 語句作用。

圖片

SQL 語句解析后,將符合條件的 data file 列表進行切分后,得到很多 split 的列表。利用索引,分析 split 中數據是否滿足條件,如果不滿足則跳過。如上圖 data file 列表切分后,得到數萬級別數量的 split 列表。將索引數據作用在 split1,發現 split1 中沒有同時col_1> v1 AND col_2 = v2滿足條件的數據,該 split1 中的數據就不會參與計算。最后處理后,只得到了少量的 split 列表,數據過濾度達到 10% 以上,查詢性能有明顯提升。

因此,采用 row group / stripe 級別的細粒度索引,可以過濾大部分數據。

細粒度索引實現邏輯

Iceberg 元數據中 manifest file 中除了提供 min-max 等統計信息,還提供有 split 相關信息:"split_offsets":{"array":[4,...]},極大方便我們實現 row group / stripe 級別的細粒度索引。

  1. 提供索引的構建 API

Iceberg 中提供構建索引的 API,引擎端調用該 API 即可實現索引構建功能。對于 Spark 3.3 及以上版本,已經提供有索引的 SQL 語句,在 Iceberg 的 Spark 模塊實現 Spark 提供的索引接口即可。

  1. 構建索引

我們采用異步構建索引,不影響主線任務。也提供了增量構建索引功能,只對 append 數據進行構建索引。調用 TableScan 讀取數據,按照 data file 的 split offset 切分數據,進行構建索引,并保存索引數據和對應的元數據信息。為了避免出現小文件存在,我們會進行索引數據合并。

  1. 索引文件存儲

索引文件格式采用[puffin]https://iceberg.apache.org/puffin-spec/格式,這是一種二進制格式。 Magic Blob? Blob? ... Blob? Footer

在 Footer 中保存每個 blob 的元數據信息。索引構建成功后,會生成類似于下面內容的文件。

圖片

索引帶來的收益

Range-Encoded BitMap 適用于多維分析場景,且 Ranger 范圍較小時,效果非常明顯。下面我們基于 Spark 引擎性能測試。

  1. 構造 1TB 的 SSB 測試數據,分別在構建 Index 前后,對以下用例進行測試。
Q1: SELECT count(*) FROM lineorder WHERE  lo_ordtotalprice = 19665277
Q2: SELECT count(*) FROM lineorder WHERE  lo_ordtotalprice = 19665277 AND lo_revenue  = 2141624
Q3: SELECT count(*) FROM lineorder WHERE  lo_ordtotalprice = 19665277 AND lo_revenue  >=10304000
Q4: SELECT count(*) FROM lineorder WHERE  lo_ordtotalprice = 21877827 AND lo_revenue  >= 83800  AND lo_revenue  <= 103800
Q5: SELECT count(*) FROM lineorder WHERE  lo_ordtotalprice > 21877827 AND lo_revenue  >= 83800  AND lo_revenue  <= 93800
Q6: SELECT count(*) FROM lineorder WHERE lo_ordtotalprice >= 93565 AND   lo_ordtotalprice < 93909
Q7: SELECT count(*) FROM lineorder WHERE   lo_ordtotalprice >= 93565 AND   lo_ordtotalprice < 91003562 AND lo_revenue    >=904300 AND lo_revenue    <= 9904300

圖片

左圖展示了 7 條 SQL 語句分別在沒有 Index 和采用 Index 情況下的執行時間。右圖展示采用 Index 后,7 條 SQL 語句讀數據的 split 數量。很明顯讀數據的 split 數量越少,Index 效果越好。最糟糕的情況,所有的 split 都參數計算,這時和沒有構建索引的效果類似。

  1. 采用 SSB 基準測試

由于 SSB 提供的測試場景,和 Range-Encoded 有利的場景,不太匹配,所以 Index 的效果并沒有明顯的效果。但也不會比不采用 Index 的效果差。如下面左圖,分別是構建索引前后,SQL 語句的執行時間,構建索引的優勢并沒有體現出來。右圖中,可以看到所有的 split 都參與了計算。

圖片

總結

根據上面的介紹,這里總結下 Iceberg 中索引實現的一些特征:

  • 細粒度索引級別:提供 RowGroup/Stripe 級別的索引,可以更加精確的定位數據的查詢范圍,減少不必要數據輸入,從而提高查詢性能;
  • 索引作用于執行端:查詢任務被分配多個執行端,每個執行端只判斷該節點上的 RowGroup/Stripe 數據是否符合即可;
  • 適配多種引擎:索引構建后,可用于多種引擎;
  • 提供異步構建 Index,從而不影響主業務的進行;
  • 適用于高基數 & 低基數場景,且占有存儲空間小。滿足范圍查詢、等值查詢等場景。且范圍越小,收益效果越明顯。
責任編輯:龐桂玉 來源: 字節跳動技術團隊
相關推薦

2024-09-19 08:09:37

MySQL索引數據庫

2023-12-14 12:56:00

MongoDB數據庫優化

2022-09-16 13:53:14

ClouderaApache湖倉

2024-12-11 07:59:02

2012-04-13 10:00:04

LINQ

2017-03-13 09:50:00

HadoopHive

2014-04-01 09:52:46

MySQL

2024-10-29 08:21:05

2018-06-07 08:54:01

MySQL性能優化索引

2014-04-28 10:17:01

2024-04-12 08:28:38

優化查詢語句PostgreSQL索引

2023-11-14 18:04:26

SQL語句性能

2020-11-27 06:58:24

索引

2024-02-22 16:55:13

2024-11-15 10:45:56

2011-08-24 11:22:38

SQL ServerUNION代替OR

2024-01-02 18:01:12

SQLSELECT查詢

2024-04-03 09:12:03

PostgreSQL索引數據庫

2010-06-03 09:24:46

Oracle

2024-05-23 10:58:49

點贊
收藏

51CTO技術棧公眾號

美女做暖暖视频免费在线观看全部网址91| www色com| av3级在线| 久久午夜电影网| 国产精品黄色av| 欧美成人免费看| 先锋影音国产精品| 欧美日韩成人综合在线一区二区| 黄色一级片黄色| 特黄视频在线观看| 日韩电影免费在线看| 欧美日韩成人网| 日韩中文字幕有码| jizz国产精品| 欧美精品aⅴ在线视频| heyzo国产| 宅男在线观看免费高清网站| 国产日韩高清在线| 精品国产乱码久久久久软件| 国产精品无码久久av| 免费看的黄色欧美网站| 欧美丰满少妇xxxxx| 日韩视频在线观看免费视频| 欧美影院天天5g天天爽| 91精品国产免费久久综合| 久色视频在线播放| 欧美黄色视屏| 中文字幕一区在线观看视频| 欧美日韩一区二| 全部免费毛片在线播放一个| 激情图片小说一区| 国产精品色午夜在线观看| 亚洲免费在线视频观看| 精品动漫3d一区二区三区免费版 | 亚洲 欧美综合在线网络| 国产精品h视频| 成人亚洲综合天堂| 国产亚洲一区二区在线观看| 精品在线视频一区二区| 亚洲欧美强伦一区二区| 国产成人亚洲精品狼色在线 | 成人小视频在线看| 国产99在线观看| 亚洲电影一级黄| 免费一级特黄毛片| 黄污视频在线观看| 亚洲高清在线视频| r级无码视频在线观看| 欧美伦理免费在线| 亚洲制服欧美中文字幕中文字幕| 少妇高潮大叫好爽喷水| av大大超碰在线| 18欧美亚洲精品| 国产又黄又爽免费视频| www.久久ai| 一区二区三区毛片| 一卡二卡三卡视频| 成人在线黄色电影| 色婷婷久久99综合精品jk白丝| avav在线看| 成人看片网页| 欧美日韩你懂的| 伊人五月天婷婷| 日韩激情精品| 精品国产91亚洲一区二区三区婷婷 | 欧美激情国产精品免费| 一区视频在线| 欧美在线视频免费观看| 国产日韩在线免费观看| 美国一区二区三区在线播放| 成人午夜激情网| 亚洲AV无码一区二区三区性 | 91精品国产一区二区三区香蕉| 在线观看日本www| ccyy激情综合| 一区二区三区黄色| 午夜国产小视频| 国产伊人精品| 国产97色在线| 国产免费福利视频| 成人亚洲一区二区一| 精品一区二区三区国产| 成人精品一区二区三区免费| 亚洲欧美另类在线| 欧美 日韩 激情| 男人天堂久久| 亚洲成人av在线| 超碰人人干人人| 国产在线不卡| 国产精品爽爽爽| 亚洲老妇色熟女老太| 久久久精品tv| 成人短视频在线观看免费| 在线天堂新版最新版在线8| 欧美日本一区二区| 六十路息与子猛烈交尾| 国产精品99久久精品| 97婷婷涩涩精品一区| 中文字幕自拍偷拍| 99久久久久久99| 中文字幕在线观看一区二区三区| 麻豆免费在线| 91精品中文字幕一区二区三区 | 亚洲欧洲日本在线| 狠狠干 狠狠操| www一区二区三区| 亚洲人午夜精品免费| 青春草免费视频| 日本va欧美va精品发布| 国产精品一区二区免费| 日本免费在线视频| 色婷婷精品久久二区二区蜜臀av| 日本人妻一区二区三区| 日韩aaaa| 国产不卡av在线免费观看| 你懂的网站在线| 中文字幕一区二区三区视频| 国产真实乱子伦| 国产精品超碰| 欧美日本啪啪无遮挡网站| 国产一区二区在线视频观看| 国产午夜精品久久| 日韩中文字幕三区| 精品久久ai| 欧美高清视频一区二区| 99精品在线视频观看| 亚洲国产精品精华液2区45| 黄色片一级视频| 麻豆一区一区三区四区| 欧美福利视频网站| www.久久伊人| 亚洲免费伊人电影| 中国黄色片一级| 久久在线免费| 国产精品一区二区久久| 成a人v在线播放| 色哟哟一区二区三区| 中文在线一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了中文| 1区1区3区4区产品乱码芒果精品| 免费成人黄色| 91精品国产色综合久久| 男女性高潮免费网站| 国内精品国产成人| 日韩精品一区二区三区电影| 国产精品久久久久久久久久久久久久久 | 日韩美女视频一区二区在线观看| 精品国产视频一区二区三区| 久久99热狠狠色一区二区| 中文字幕在线亚洲三区| 蜜桃在线一区| 色综合色综合久久综合频道88| 999av视频| 亚洲综合色婷婷| 99热超碰在线| 在线视频亚洲| 欧美伦理一区二区| 激情亚洲影院在线观看| 中文字幕九色91在线| 中文字幕乱码中文字幕| 中文字幕人成不卡一区| www.51色.com| 精品电影一区| 欧美日韩精品免费看| 九色成人搞黄网站| 成年无码av片在线| 免费国产精品视频| 高潮白浆女日韩av免费看| 91成人破解版| 美国三级日本三级久久99| 国产精品一区在线免费观看| 成人爽a毛片免费啪啪红桃视频| 97在线看免费观看视频在线观看| 人操人视频在线观看| 欧美色区777第一页| 中文字幕五月天| 成人美女视频在线观看18| 青青视频在线播放| 久久网站免费观看| 国产成人一区二区三区免费看| 高潮在线视频| 日韩中文字幕在线视频| 欧美性猛交 xxxx| 欧美在线一二三| 美国黄色小视频| 久久久影院官网| 一级淫片在线观看| 亚洲尤物影院| 伊人色综合影院| 久久97精品| 91久久久久久久久久| 阿v视频在线| 视频在线一区二区| 蜜桃久久一区二区三区| 欧美性受极品xxxx喷水| 久久综合综合久久| 日本一区二区三区视频视频| www.黄色网| 美女视频一区在线观看| 午夜免费福利小电影| 希岛爱理一区二区三区| 久久精品国产美女| 日韩高清在线观看一区二区| 国产精品2018| 成人国产电影在线观看| zzijzzij亚洲日本成熟少妇| 深夜福利免费在线观看| 日韩欧美在线不卡| 中日精品一色哟哟| 狠狠躁天天躁日日躁欧美| 在线看的片片片免费| 久久精子c满五个校花| 日韩不卡的av| 六月丁香综合在线视频| 日韩中文字幕三区| 亚洲精选久久| 小泽玛利亚av在线| 日韩综合一区| 翔田千里亚洲一二三区| 色婷婷av一区二区三区丝袜美腿| 亚洲综合精品伊人久久| 黄色精品视频网站| 国产精品扒开腿做爽爽爽视频| 草草在线视频| 欧美激情视频一区二区三区不卡| 看黄网站在线观看| 中国china体内裑精亚洲片| 天堂视频中文在线| 亚洲变态欧美另类捆绑| 性欧美videos另类hd| 欧美日韩国产精选| 伊人网视频在线| 欧美亚洲动漫制服丝袜| 精品国产乱子伦| 欧美三级免费观看| 久久久国产高清| 午夜久久久久久| 日韩精品在线免费看| 一区二区三区视频在线观看| avove在线播放| 一区二区三区在线观看网站| 蜜臀久久精品久久久用户群体| 综合激情成人伊人| 伊人在线视频观看| 一区二区三区产品免费精品久久75| 疯狂试爱三2浴室激情视频| 亚洲欧美日韩人成在线播放| 国产第一页浮力| 亚洲欧美偷拍另类a∨色屁股| 成年人二级毛片| 亚洲免费观看高清| 日韩欧美综合视频| 亚洲电影在线免费观看| 久久精品国产成人av| 色av综合在线| 亚洲在线免费观看视频| 884aa四虎影成人精品一区| 国产情侣一区二区| 欧美不卡一区二区| 天天综合网在线| 亚洲午夜av电影| 9191在线| 欧美高清视频一区二区| 国产美女高潮在线观看| 日韩av片免费在线观看| 久久er热在这里只有精品66| 亚洲a在线观看| 菁菁伊人国产精品| 无码免费一区二区三区免费播放 | 国产精品久久久久久久久电影网| 黄色亚洲在线| 人妻无码视频一区二区三区 | 成人免费网站在线观看| 91精品国产自产精品男人的天堂| 国产在线精品一区二区三区》| 一道在线中文一区二区三区| 三区精品视频| 国产精品jizz在线观看美国| 美女av免费在线观看| 麻豆精品国产传媒mv男同 | 欧美激情一区二区三区不卡| 91嫩草丨国产丨精品| 欧美性生交xxxxxdddd| 国产精品羞羞答答在线| 日韩电影免费观看中文字幕| av影片在线看| 久久男人av资源网站| 美女色狠狠久久| 国产精品乱码视频| 日韩成人a**站| 97在线国产视频| 免费成人小视频| 亚洲欧美日本一区| 综合网在线视频| 9i精品福利一区二区三区| 欧美一区二区免费| 国产青青草在线| 午夜免费久久久久| 国产精品久久久久久久久久久久久久久| 久久精品国产精品青草色艺 | 亚洲精品3区| www国产无套内射com| 日韩高清一区在线| 一级黄色电影片| 中文字幕在线一区免费| 天天干天天色综合| 欧美精品一区二区久久久| 老司机午夜在线视频| 国产成人拍精品视频午夜网站| 大桥未久女教师av一区二区| 一区二区三区偷拍| 日韩福利电影在线观看| 欧美一区二区三区成人精品| 亚洲一区二区三区视频在线播放| 中文字字幕在线观看| 亚洲香蕉成视频在线观看| 午夜影视一区二区三区| www.久久久| 欧美影院一区| 精品综合久久久久| 国产精品无遮挡| 亚洲男人天堂网址| 亚洲精品丝袜日韩| 国产高清中文字幕在线| http;//www.99re视频| 亚洲欧洲日韩| 天天影视色综合| 国产精品国产三级国产aⅴ入口 | 亚洲另类激情图| аⅴ资源天堂资源库在线| 国产成人av一区二区三区| 欧美午夜电影在线观看 | 欧美熟妇精品一区二区蜜桃视频| 91免费在线播放| 国产手机在线视频| 精品久久久久香蕉网| 91在线中文| 69堂成人精品视频免费| 欧美福利网址| 苍井空张开腿实干12次| 亚洲精品免费在线播放| 精品国产18久久久久久| 欧美精品日韩www.p站| 日韩中文字幕一区二区高清99| 国产乱子伦精品视频| 成人污污视频在线观看| 久久精品女人毛片国产| 亚洲成人a级网| 亚洲午夜天堂| 日韩国产精品一区二区| 奇米色777欧美一区二区| 国产大屁股喷水视频在线观看| 欧美日韩二区三区| 午夜小视频在线观看| 国产精品免费一区二区三区四区 | 91精品国产高清| 亚洲丝袜美腿一区| 免费看国产黄色片| 国产精品久久久久毛片软件| 99久久精品国产色欲| 欧美激情小视频| 天堂资源在线亚洲| 精品久久久噜噜噜噜久久图片| 国产精品美女一区二区三区| 国产喷水吹潮视频www| 欧美激情一区二区三区成人| 欧美色图五月天| 亚洲欧美在线精品| 悠悠色在线精品| 亚洲色欧美另类| 国产欧美精品xxxx另类| 亚洲欧洲日韩| 中文字幕在线看高清电影| 欧美老肥妇做.爰bbww| 俄罗斯一级**毛片在线播放 | 二区在线观看| 51成人做爰www免费看网站| 一区二区国产在线观看| 内射毛片内射国产夫妻| 欧美成人bangbros| 亚洲成av在线| 97久久国产亚洲精品超碰热| 久久免费电影网| 99国产精品99| 国产成人91久久精品| 亚洲成av人片乱码色午夜| 黄色性生活一级片| 51精品秘密在线观看| 日韩在线伦理| 无码毛片aaa在线| 国产欧美日韩精品在线| 黄色av一区二区三区| 国产精品一区二区三区成人| 国内精品久久久久久久97牛牛| 免费黄色片网站| 精品国产区一区| 图片一区二区| 国产福利一区视频| 亚洲成av人在线观看| 国产在线一区二区视频|