From becefa6d8c87c8df53e07cbcfb16452085f5c8e4 Mon Sep 17 00:00:00 2001 From: EJ Song Date: Thu, 13 Jan 2022 19:37:02 -0800 Subject: [PATCH] Documentation for ZOrderCoveringIndex --- docs/_data/navigation.yml | 2 + docs/_docs/09-ug-index-types.md | 315 ++++++++++++++++++ .../zordercovering-analysis-sorted-colA.png | Bin 0 -> 17168 bytes .../zordercovering-analysis-sorted-colB.png | Bin 0 -> 18241 bytes .../zordercovering-analysis-zorder-colA.png | Bin 0 -> 21119 bytes .../zordercovering-analysis-zorder-colB.png | Bin 0 -> 20884 bytes 6 files changed, 317 insertions(+) create mode 100644 docs/_docs/09-ug-index-types.md create mode 100644 docs/assets/images/zordercovering-analysis-sorted-colA.png create mode 100644 docs/assets/images/zordercovering-analysis-sorted-colB.png create mode 100644 docs/assets/images/zordercovering-analysis-zorder-colA.png create mode 100644 docs/assets/images/zordercovering-analysis-zorder-colB.png diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml index 2bff21dac..dfff2f147 100644 --- a/docs/_data/navigation.yml +++ b/docs/_data/navigation.yml @@ -21,6 +21,8 @@ docs: url: /docs/ug-optimize-index/ - title: "Supported data formats" url: /docs/ug-supported-data-formats/ + - title: "Supported index types" + url: /docs/ug-index-types/ - title: "Release Notes" url: https://github.com/microsoft/hyperspace/releases # Needs to be written later diff --git a/docs/_docs/09-ug-index-types.md b/docs/_docs/09-ug-index-types.md new file mode 100644 index 000000000..3c043bb1d --- /dev/null +++ b/docs/_docs/09-ug-index-types.md @@ -0,0 +1,315 @@ +--- +title: "Index types" +permalink: /docs/ug-index-types/ +excerpt: "Mutable dataset guide" +last_modified_at: 2021-12-29 +toc: false +classes: wide +--- + +# Covering Index Type + +In Hyperspace, "covering" index means its index data contains actual source data, +so we could alternatively read from the index data when it is applicable. +It could be whole or partial data, but the data is rearranged as a different data layout +to accelerate some types of Spark queries. + +As of v0.6, Hyperspace supports the following two covering indexes: + +1. [(Bucketed) Covering Index](#covering-index) +2. [Z-order Covering Index](#z-order-covering-index) (since v0.6) + +## Covering Index + +Covering Index is the first type that Hyperspace supports. +It can accelerate join queries and filter queries. + +### Index data layout + +The index data consists of indexed columns and included columns, and it is stored as bucketed and +sorted within each bucket by indexed columns. "Bucketed" stands for "hash partitioned" simply; +all rows with the same hash value go into the same bucket. +We use 200 buckets by default which is the default value of `spark.sql.shuffle.partitions` config +to increase the possibility of index application. +The bucket number for index data is configurable via `spark.hyperspace.index.numBuckets`. + +For example, assume the source data is stored in 1000 files in random order. +At index creation time, Hyperspace performs shuffling and sorting by the indexed columns before +storing index data. +As a result, the index data consists of 200 files (bucket number) by default and within each bucket, +rows are sorted by the indexed columns. + +### Applicable queries + +#### Sort Merge Join + +Sort merge join is a well known expensive operation in Spark because it requires full shuffling +of both left and right dataset. We can optimize the time for shuffling and sorting datasets, as we +already did the required data rearrangement at index creation time; by reading the index data +instead of source data, Spark will skip shuffling & sorting for the join. +Therefore, if some dataset is repeatedly used for Sort merge joins causing shuffles for every query +time, creating a Covering Index would be helpful. +We also support [mutable dataset](https://microsoft.github.io/hyperspace/docs/ug-mutable-dataset/) +for covering index types. + +#### Filter conditions for the first indexed column + +Queries including filter conditions for the first indexed column can also be accelerated, since +the index data is also sorted within each bucket. Thanks to statistics and data skipping features +of Parquet format, the queries can be accelerated by skipping unnecessary row groups while reading +the data. It could be less effective compared to global sorting, and only applicable for the first +indexed column. + +### Index creation API + +#### CoveringIndexConfig + +To create a Covering Index, `CoveringIndexConfig` should be used at index creation with: +- index name: name of index; should be unique within an index system directory. +- indexed columns: columns to use for shuffling and sorting. +- included columns: columns to include in the index data. + +#### Scala +```scala +import com.microsoft.hyperspace._ +import com.microsoft.hyperspace.index.covering._ + +val df = spark.read.parquet("") +val idxConfig = CoveringIndexConfig( + "", + Seq("", ""), + Seq("")) +val hs = new Hyperspace(sparkSession) +hs.createIndex(df, idxConfig) +``` + +#### Python +```python +from hyperspace import Hyperspace +from hyperspace import CoveringIndexConfig +hs = Hyperspace(sparkSession) +idxConfig = CoveringIndexConfig('', ['', ''], ['']) +df = spark.read.parquet("") +hs.createIndex(df, idxConfig) +``` + +#### Index Specific configs +- `spark.hyperspace.index.numBuckets` + +## Z-order Covering Index +Z-order Covering Index type is available since v0.6. +It is kind of sorted data, but multiple columns can contribute the order +which results in similar values could be collocated. + +### Index data layout + +ZOrderCoveringIndex data is generated by the following: + +```scala +sourceData + .withColumn("_zaddr", "") + .repartitionByRange(numPartitions, col("_zaddr")) + .sortWithinPartitions("_zaddr") + .drop("_zaddr") +``` + +`numPartitions` is determined based on `spark.hyperspace.index.zorder.targetSourceBytesPerPartition`. +So there will be numPartitions number of files that sorted by Z-address of indexed columns. +If there is only one indexed column, we just sort the data by the column without calculating Z-address. + +### Applicable queries + +#### Filter conditions for indexed columns + +Queries including filter conditions for any of indexed columns can also be accelerated, as +the index data is sorted by Z-address of indexed column values. +Improvement of query performance is not always guaranteed and depending on the quality of +Z-ordered dataset. For example, if the source data is already sorted by a column, then +Z-ordering the dataset may deteriorate the query performance with a filter condition of +the sorting column. For more information, see below +[Min/Max data layout analysis utility](#minmax-data-layout-analysis-utility-for-z-ordering). + + +### Index creation API + +To create a Z-order Covering Index, `ZOrderCoveringIndexConfig` should be used at index creation with: +- index name: name of index; should be unique within an index system directory. +- indexed columns: columns to use for Z-ordering. +- included columns: columns to include in the index data. + +#### Scala +```scala +import com.microsoft.hyperspace._ +import com.microsoft.hyperspace.index.zordercovering._ + +val df = spark.read.parquet("") +val idxConfig = ZOrderCoveringIndexConfig( + "", + Seq("", ""), + Seq("")) +val hs = new Hyperspace(sparkSession) +hs.createIndex(df, idxConfig) +``` + +#### Python +```python +from hyperspace import Hyperspace +from hyperspace import ZOrderCoveringIndexConfig +hs = Hyperspace(sparkSession) +idxConfig = ZOrderCoveringIndexConfig('', ['', ''], ['']) +df = spark.read.parquet("") +hs.createIndex(df, idxConfig) +``` + +#### Index Specific configs + +- `spark.hyperspace.index.zorder.targetSourceBytesPerPartition` +- `spark.hyperspace.index.zorder.quantile.enabled` +- `spark.hyperspace.index.zorder.quantile.relativeError` + +### Min/Max data layout analysis utility for Z-ordering + +Z-ordering result might differ based on various factors like data type, value distribution +and also other Z-ordering columns; it is hard to expect that the Z-ordered data is +effective or not. That is the reason why we introduce the analysis functionality for Z-ordering. +It only works for numeric types for now. + +Note that it collect the min/max values of each file using spark jobs and generate the result based on them. + +#### Result format + +The function provides `html` and `text` format to show the result. + +##### HTML format +![Result analysis on colA](/hyperspace/assets/images/zordercovering-analysis-zorder-colA.png) + +##### Text format +``` +Min/Max analysis on colA + + < Number of files (%) > + +--------------------------------------------------+ +100% | | + | | + | | + | | + 75% | | + | | + | | + | | + | | + 50% | | + | | + | | + | | + | | + 25% | | + | *** | + | *************************************** ***** | + |**************************************************| + |**************************************************| + 0% |**************************************************| + +--------------------------------------------------+ + Min <----- colA value -----> Max + +min(colA): 0 +max(colA): 9999999 +Total num of files: 100 +Total byte size of files: 419650780 +Max. num of files for a point lookup: 21 (21.00%) +Estimated average num of files for a point lookup: 17.76 (17.76%) +Max. bytes to read for a point lookup: 88309318 (21.04%) +``` + +#### How to interpret + +- X-axis: it represents the range group of the column values. +- Y-axis: the percentage of number of files to look up a value based on the minimum and maximum value of each file. So lower percentage means better distribution as we could skip more files. To be more specific, it represents the maximum percentage within each range. +- min(colA): the minimum value of the column in the given dataset. +- max(colA): the maximum value of the column in the given dataset. +- Total num of files: total number of files in the given dataset. +- Total byte size of files: summation of file size of the given dataset. +- Max. number of files for a point lookup: the maximum number / percentage of number of files to lookup. It's the highest point of y-axis. +- Estimated average num of files for a point lookup: average of number of files to lookup, excluding the range that does not exist. +- Max. bytes to read for a point lookup: the maximum bytes of files to read for a point lookup. + +##### Analysis result on sorted dataset +To understand the result clearly, let us check the result from sorted dataset. + +###### Sample data generation +```scala +// Scala +val dataPath = "testDataDir" +val randomDataPath = dataPath + "/randomData" +val sortedDataPath = dataPath + "/sortedData" +spark.range(50000000).map { _ => + (scala.util.Random.nextInt(10000000).toLong, scala.util.Random.nextInt(1000000000), scala.util.Random.nextInt(2)) +}.toDF("colA", "colB", "colC").repartition(100).write.format("parquet").save(randomDataPath) +// 50M rows with random integers stored in 100 parquet files. + +val randomDF = spark.read.parquet(randomDataPath) +randomDF.repartitionByRange(100, col("colA")).sortWithinPartitions(col("colA")).write.format("parquet").save(sortedDataPath) +val sortedDF = spark.read.parquet(sortedDataPath) + +import com.microsoft.hyperspace.util.MinMaxAnalysisUtil +displayHTML(MinMaxAnalysisUtil.analyze(sortedDF, Seq("colA", "colB"), format = "html")) // format "text" and "html" are available. +// println(MinMaxAnalysisUtil.analyze(sortedDF, Seq("colA", "colB"), format = "text")) +``` + +###### Result analysis +![Sorted result analysis on colA](/hyperspace/assets/images/zordercovering-analysis-sorted-colA.png) + +The maximum number of files to be checked is 1 as the dataset is repartition by range of `colA`. +In other words, we need to check only one file to check if a value exists or not, based on min/max +value of each file. The sorted data layout would be the best performance for `colA`. + +However, for `colB`, we should read all the files as its randomly distributed: +![Sorted result analysis on colB](/hyperspace/assets/images/zordercovering-analysis-sorted-colB.png) + +Therefore, with this dataset, we cannot accelerate a query with conditions of `colB`. + +##### Analyze Z-order covering index data +###### Index creation & analysis +```scala +// Index creation +import com.microsoft.hyperspace.index.zordercovering._ +import com.microsoft.hyperspace._ +import com.microsoft.hyperspace.util.FileUtils +import org.apache.hadoop.fs.Path + +val totalSizeInBytes = FileUtils.getDirectorySize(new Path(randomDataPath)) +val sizePerPartition = totalSizeInBytes / 100 +spark.conf.set("spark.hyperspace.index.zorder.targetSourceBytesPerPartition", sizePerPartition) // Default: 1G +// Changed per file size for z-order index for demonstration + +val df = spark.read.parquet(randomDataPath) +val hs = new Hyperspace(spark) +hs.createIndex(df, ZOrderCoveringIndexConfig("zorderTestIndex", Seq("colA", "colB"), Seq("colC"))) + +import com.microsoft.hyperspace.util.MinMaxAnalysisUtil +displayHTML(MinMaxAnalysisUtil.analyzeIndex(spark, "zorderTestIndex", "html")) +``` + +###### Result analysis + +![Z-ordered result analysis on colA](/hyperspace/assets/images/zordercovering-analysis-zorder-colA.png) + +Compared to sorted dataset, we need to read more files to find a value of `colA` column. +For example, if we have a query `df.filter("colA == 0")` which is the minimum value. +Based on min/max value of each file, we should check about 17 files. +It will show worse performance than above sorted dataset that only one file contains the minimum +value. + +![Z-ordered result analysis on colB](/hyperspace/assets/images/zordercovering-analysis-zorder-colB.png) + +However, we expect better performance for `colB` as colB values are also considered in the result +ordering. Now we can skip about 80% of files when finding a value of `colB` in the dataset. + +### Note + +Currently, data skipping for ZOrderCoveringIndex index data relies on statistics and skipping feature +in Parquet format itself. Therefore, we need to read the metadata of all files regardless of how many +files can be skipped. Accessing each file in a remote storage is not usually cheap, and reading more +files also affects spark job scheduling to scan the data. +We can optimize it by utilizing data skipping index or maintaining statistics for each index file +separately in index log entry, but it is not planned yet. \ No newline at end of file diff --git a/docs/assets/images/zordercovering-analysis-sorted-colA.png b/docs/assets/images/zordercovering-analysis-sorted-colA.png new file mode 100644 index 0000000000000000000000000000000000000000..d9abbe3cc904fb947ea232a194d523f6309fe488 GIT binary patch literal 17168 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 I8%}@xUu1xy00000 literal 0 HcmV?d00001 diff --git a/docs/assets/images/zordercovering-analysis-zorder-colA.png b/docs/assets/images/zordercovering-analysis-zorder-colA.png new file mode 100644 index 0000000000000000000000000000000000000000..9c0ce31d02aa380c8e3a5536bcda0ffe32f17fe7 GIT binary patch literal 21119 zcmeFZcU05Qw473tv*Iek%9 zHAh?Zo2gBXiUX~t`{BB^)n19LiC;JB0JD4Q<5oNxIYX7@UNtWWg`E>?usviOX%$`| zZ4ReR*`+gni{N`*lwlex0xvg6zdNlndGbq$D7f83ku0?-Y`ieMEAR{Y6PWAtZT4`X%C?k0ov{YZhewF015{5Gb7SFb&oD1-OUw@H+U^Z4oy*Ex`@ z=b=ld8uR&~Y(8sgJ*1{MvrbcQmf_F0;7)pWPF)chcD#Nj3E%6q_4kdP#m11pBxc$t zwXSG1ZBlILlfk)H-M9NsSksMYdJCYt#gH z4d@AH?<6NnG6TG1KBb2T-GRL5tdw_y7E(UnA}BE;*KU~Ml_Vs%Gq_PvJ@>ug3jt0B z;!PcD9&eOAqWubqOZ1Y1$u{F#kwjeUQWDE^g?6D>QpYTCu;B|j=6$>fTyl-Hj+LVG76FImBJE+YMjHK$%$^0FwTVOUeYqW#`j+dp zeUHALIra0tNGvDlKDfi^$~ng)Sv?n{E>`3?I8wl43$2`(uVqB2&T;?IQO9jl_?ZQo zP}27hRua>aW(_X*k}4o?j3W7}O0L?7+14tC91q`I`_aqMY^QZ5tGtD&7q-4o8fIR8 zOA3`K#y-anyaFKxKc?$hBwEp&njU zuNt@&K7oj51d_fO8b~!tMdE?l2<^Ta^RAmeKYouHzI#D=3q0V7^LgyrByNmv|$M*hE zteXCKo&;XMKrS?aYyXBlLoEYCh}!#Ar_Hv&br2l+kiFbyt61AwYgV_&{Se?vs$LB9 zHu2DO_t~nGA3;$ij>qBe655dusu!0p9Eg-{&3WV9HM2mp_%=NdUR96-E~84>%vf-d2_2Ctpq5WMTrzw0Kpn5&NMd zLiZqcQ`VS|Z1UDf*)Ldr`N-F!pHGk_18BBG1}Di^n_26zTvQfxd>>nl2M_}hkQ zP>uB(wn>nxlLSP(o;AYyzVAOoL-{!Y-v_yms6Oqop6)Hs@LoTK6Z4TFhyNA=SS0gA z;NIu46qyPMhVlpA%}K_Hd+&-Dchw)~S6x%hEhc6vu#e4~0RV~a%Jl~R&2+!Sm)dMuh=yr=2~Oqt5Y)7shyenb6rg!8-)B zX}x&X^Qyq?`&-;f-9-jO$nAOKCh!FZMVhi?{`>WRljZ+3ae%zl#N*E8MFk#H>0RmQ z71QaA9COzp)@Kf&mvK;!$ooT?OSYlp}#3P!;QpqDwdhOvp&v z%;!)WXn3vos+Pb4MaaqNc38W252vsu^Wgi2#gppkofsOxNpeHG>Th?qr{Cu!5t>pK zAxm_p6YzDzf=>KRdh_IhJ-E8*)E`wexuqf9<8HM`9z0hLZs3+FG8gVTsUsIN6+!zV zWdSdv#y{Jwr$BRb(-_fM;#A`xc71i{vNfdT@BC^VxUS-+621o54?`CTM%v)~^3F#K zEW*TxWKAXPCV=iS<&HlqdVXEw54;CIWB-qQUD-WL{gowg(aub@c*5TO$p#S)>UKnb zG0f}qeJ<^rVWXlU3Hd{!EKU4*;FAS5%S-PyI-f-=;AA*{la7!7GvrW*Y5_~D>l0eF zv!MEl&cE8x606iFI{E1xj8i0&4YOMkoJu(-W<-SPg64oqmdiS$Fr*I

0!}2 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 VHt#k1c2@uZ002ovPDHLkV1j@gVtxPs literal 0 HcmV?d00001