精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

黄色一级片免费播放| 精品视频一区二区| 国产十六处破外女视频| gogo人体一区| 色8久久精品久久久久久蜜| 亚洲午夜精品久久| 免费观看国产视频| 美国十次了思思久久精品导航| 欧美成人三级视频网站| 国产色视频一区二区三区qq号| 亚洲高清国产拍精品26u| 亚洲一卡二卡三卡四卡无卡久久 | 成人网在线免费视频| 日本精品在线视频| 日韩黄色免费观看| 国产真实有声精品录音| 日韩美女视频在线| 黄色片视频在线| 懂色av一区| 中文字幕va一区二区三区| 国产精品国产三级欧美二区| 中文字幕av免费观看| 亚洲精品乱码| 久久久国产一区二区三区| 亚洲第一黄色网址| 日韩不卡在线视频| 欧美精品日韩精品| 成人在线观看黄| 草草影院在线| 亚洲摸摸操操av| 手机在线观看国产精品| 天堂v在线观看| 国产不卡在线视频| 91免费在线视频| 中文无码精品一区二区三区| 久久精品一区| 91精品国产色综合久久不卡98口 | 日韩av在线看免费观看| 第四色在线一区二区| 欧美一区二区三区免费大片| 亚洲免费一级视频| 日韩一区二区三区在线免费观看| 午夜在线电影亚洲一区| 欧美一区二区视频在线播放| 成人影欧美片| 亚洲猫色日本管| 美女在线免费视频| 欧美jizz18hd性欧美| 中文字幕电影一区| 视频一区二区在线| 成年午夜在线| 国产精品久久久久久久久免费相片| 免费久久一级欧美特大黄| 午夜在线视频免费| 久久亚洲一级片| 国产精品入口免费| 亚洲精品免费在线观看视频| 懂色av一区二区夜夜嗨| 成人av男人的天堂| 黄色av网站免费在线观看| 国产精品亚洲专一区二区三区| 92国产精品视频| 草逼视频免费看| 国产aⅴ综合色| 国产精品入口免费| 人成免费电影一二三区在线观看| 99精品桃花视频在线观看| 欧美 日韩 国产在线| 久青青在线观看视频国产| 国产区在线观看成人精品| 五月婷婷一区| av大大超碰在线| 亚洲一区二区三区在线播放| 成人免费aaa| 校园春色亚洲色图| 91精品视频网| 国产精品久久久久久亚洲色| 精品一区在线| 久久精品男人天堂| 国产一级特黄毛片| 日韩中文字幕区一区有砖一区 | 亚洲理论在线观看| 免费在线观看视频a| 精品91久久| 欧美久久免费观看| 性一交一黄一片| 中文字幕亚洲影视| 久久人人爽人人爽爽久久| 国产一级黄色av| 老牛影视一区二区三区| 国产精品精品国产| 精品欧美一区二区精品少妇| 91麻豆免费观看| 日本免费在线视频观看| 免费v片在线观看| 欧美日韩国产电影| av电影中文字幕| 激情综合网站| 欧美—级a级欧美特级ar全黄| 一级黄色在线视频| 国产成人av福利| 日韩欧美亚洲区| 国产探花视频在线观看| 欧美色综合影院| 黄色av电影网站| 欧美电影免费播放| 777精品视频| 国产探花精品一区二区| 国产亚洲午夜高清国产拍精品| 日本aa在线观看| 久久91视频| 亚洲女人被黑人巨大进入| 久久久久久激情| 久久99精品国产91久久来源| 美日韩免费视频| 国产精品69xx| 欧美一区二区三区四区高清 | 日本精品久久久久久| 国产精品激情偷乱一区二区∴| 阿v天堂2017| 日韩精品久久久久久久软件91| 一二美女精品欧洲| 精品免费囯产一区二区三区| 国产成人无遮挡在线视频| 亚洲韩国在线| 日韩精品第一| 亚洲欧美综合区自拍另类| 久久露脸国语精品国产91| 国产一区二区不卡在线| 亚洲视频电影| 久久xxx视频| 亚洲天堂av图片| 手机看片久久久| 99久久精品国产观看| 妺妺窝人体色www看人体| 国产成人视屏| 久久国产精品久久久| 97在线播放免费观看| 中文字幕+乱码+中文字幕一区| 999香蕉视频| 国产免费久久| 国产a级全部精品| 男同在线观看| 欧美性jizz18性欧美| 天天插天天射天天干| 亚洲成色精品| 国产一区二区三区黄| 99爱在线观看| 日韩电影中文字幕在线| 五月婷婷亚洲综合| 波多野结衣一区二区三区 | 麻豆91在线播放免费| 先锋影音亚洲资源| 狠狠久久伊人中文字幕| 按摩亚洲人久久| 国产精品午夜福利| 亚洲精品成a人| 日本久久久久久久久久| 亚洲激情综合| 欧美日韩精品不卡| 美女色狠狠久久| 日韩中文字幕亚洲| av在线资源观看| 亚洲444eee在线观看| 国产三级视频网站| 日韩国产欧美三级| 自拍偷拍亚洲色图欧美| 亚洲精品在线播放| 国语自产精品视频在线看抢先版图片| 少妇一级淫片免费看| 色综合一个色综合| 亚洲国产精品一区二区久久hs| 国产九色精品成人porny| 国产情侣第一页| 亚洲欧美tv| 国产日韩欧美黄色| 青青草原国产在线| 亚洲欧美www| 91国内精品久久久| 午夜精品福利一区二区三区av| 99久久久久久久久久| 久久精品久久精品| 欧美久久在线观看| 欧美日韩色图| 国产富婆一区二区三区| 日本成人三级电影| 理论片在线不卡免费观看| 偷拍25位美女撒尿视频在线观看| 在线视频综合导航| 青草影院在线观看| 久久综合色播五月| 久久成年人网站| 国产欧美一区二区色老头 | 欧美猛男超大videosgay| 精品小视频在线观看| 日本一区二区三区四区在线视频| 深夜福利网站在线观看| 久久精品女人天堂| av 日韩 人妻 黑人 综合 无码| 亚洲人成网77777色在线播放 | 国产欧美日韩在线一区二区| 91亚洲一区精品| 性欧美hd调教| 久久免费国产精品1| 三区四区在线视频| 日韩av综合网站| av一级黄色片| 欧美日韩一区高清| 五月婷婷亚洲综合| 亚洲黄色小说网站| 亚洲aaa视频| 337p粉嫩大胆色噜噜噜噜亚洲| 一级日本黄色片| 久久在线精品| 欧美日韩性生活片| 欧美午夜不卡| 在线播放 亚洲| 欧美午夜精品一区二区三区电影| 精品高清视频| av成人资源| 91视频-88av| 久久电影天堂| 日韩美女在线看| 三妻四妾的电影电视剧在线观看| 成人97在线观看视频| 91大神在线网站| 亚洲欧美资源在线| 亚洲人视频在线观看| 精品国产伦一区二区三区观看体验 | 免费高清完整在线观看| 国产一区二区三区三区在线观看| 天堂在线中文网| 亚洲精品短视频| 东京干手机福利视频| 欧美大片在线观看一区| 精品人妻一区二区三区含羞草| 欧美日本国产视频| 亚洲最新av网站| 欧美日韩国产综合一区二区| 在线观看国产区| 欧美性极品少妇| 黄色av一区二区| 欧美中文字幕一区二区三区| 无码日韩精品一区二区| 在线免费观看成人短视频| 欧美亚洲另类小说| 欧洲国内综合视频| 亚洲字幕av一区二区三区四区| 欧美色精品天天在线观看视频| 亚洲午夜精品久久久| 欧美丰满高潮xxxx喷水动漫| 国产裸体无遮挡| 欧美一三区三区四区免费在线看 | 成人福利视频在线看| 中文字幕在线永久| 26uuu亚洲综合色| www.黄色在线| 亚洲视频在线观看一区| 99热在线观看精品| 亚洲精品乱码久久久久久黑人| 久久久久久久极品内射| 午夜伦理一区二区| 欧美brazzers| 欧美精品第1页| 丰满熟妇人妻中文字幕| 日韩精品免费视频| av资源种子在线观看| 精品激情国产视频| 色呦呦网站在线观看| 4k岛国日韩精品**专区| 国模视频一区| 亚洲一区二区三区视频| 六月丁香久久丫| 日韩高清国产精品| 一区二区在线| 欧美日韩二三区| 麻豆精品久久精品色综合| 免费欧美一级片| 97久久超碰国产精品电影| 国产精品视频在| 亚洲一区二区视频在线观看| 欧美一级淫片免费视频黄| 欧美精品 日韩| 亚洲欧美日韩精品永久在线| 中文字幕久精品免费视频| 在线heyzo| 日本在线观看天堂男亚洲| 欧美成人毛片| 国产精品伊人日日| 久久成人综合| 69堂免费视频| 国产一区二区三区免费看| 青青草成人免费视频| 亚洲欧洲日韩女同| 国产91精品一区| 日韩一二在线观看| 国产亚洲依依| 久久久久久久久网站| 外国电影一区二区| 久久久久久国产精品免费免费| 日韩一区亚洲二区| 久久无码高潮喷水| 国产精品99久久久久久久vr| 91资源在线播放| 午夜精品一区二区三区免费视频 | 色乱码一区二区三在线看| 欧美黄色aaaa| 在线观看的毛片| 99久久国产综合精品麻豆| 中文字幕在线观看2018| 久久麻豆精品| 亚洲色图15p| av在线免费网站| 国产精品福利在线观看| youjizz亚洲| 特级黄色录像片| 日韩精品乱码免费| 性久久久久久久久久久| 亚洲色图丝袜美腿| 久久精品国产亚洲av麻豆蜜芽| 亚洲国产成人爱av在线播放| 岛国中文字幕在线| 国产美女精品视频| 国产日产精品一区二区三区四区的观看方式 | 成人动漫在线免费观看| 亚州欧美日韩中文视频| 疯狂欧洲av久久成人av电影| 日韩妆和欧美的一区二区| 国产毛片久久| 人妻av一区二区| 一区二区三区美女| 99riav国产| 久久激情五月丁香伊人| 成人午夜在线| 亚洲a∨一区二区三区| 欧美激情五月| 国产精品99久久久精品无码| 一区二区三区四区不卡视频 | 日韩精品免费一线在线观看| aa国产成人| 国产日韩精品推荐| 亚洲一级高清| 97中文字幕在线观看| 亚洲黄色录像片| 亚洲精品人妻无码| 国产69精品久久久久99| 国产成人免费av一区二区午夜 | 亚洲小说区图片区都市| 999在线观看免费大全电视剧| 中文字幕免费精品| 无码国产精品一区二区高潮| 一区二区三区中文在线观看| 亚洲春色一区二区三区| 久久久久国产精品免费| 国产一区福利| 久久久久人妻精品一区三寸| 久久久久国产精品免费免费搜索| 人人爽人人爽人人片av| 国产一区二区三区在线视频| 国产精品99精品一区二区三区∴| 亚洲v日韩v欧美v综合| 精品亚洲成a人| 草视频在线观看| 精品对白一区国产伦| 人在线成免费视频| 日本不卡免费新一二三区| 麻豆免费精品视频| 人妻久久一区二区| 亚洲黄色www| 99只有精品| 97av中文字幕| av网站一区二区三区| 中文字幕一区二区三区四区欧美| 色婷婷成人综合| 成人免费直播在线| 黄色片视频在线播放| 中文字幕欧美一| 婷婷在线免费视频| 国产精品va在线播放我和闺蜜| 久久精品国产www456c0m| 中文写幕一区二区三区免费观成熟| 精品久久久国产| 日本三级视频在线观看| 国产乱码精品一区二区三区中文 | 老司机精品视频在线| 久草网站在线观看| 亚洲免费av片| 国产电影一区二区| aaa毛片在线观看| 亚洲黄色尤物视频| 九色蝌蚪在线| 97视频中文字幕| 日韩电影在线观看网站| 久久网一区二区| 中文字幕亚洲色图| 国产精品毛片视频| 思思久久精品视频| 狠狠躁夜夜躁人人躁婷婷91 | 日韩精品首页| 韩国无码一区二区三区精品|