From 59921bcaaa42ac5cdc44ae93130e0b53b7245c9b Mon Sep 17 00:00:00 2001 From: Shivam Malhotra Date: Tue, 19 Sep 2023 16:38:46 -0500 Subject: [PATCH] Raise exception when reading non-UTC adjusted timestamps in parquet (#4421) Also moved all parquet files in core repo to Git LFS --- .gitattributes | 1 + .github/workflows/check-ci.yml | 2 + .github/workflows/nightly-check-ci.yml | 2 + .../parquet/base/ParquetFileReader.java | 17 ++++++++- .../parquet/table/ParquetSchemaReader.java | 2 +- .../table/location/ParquetColumnLocation.java | 2 + extensions/parquet/table/src/test/e0.py | 3 +- .../table/src/test/e0.requirements.txt | 2 +- extensions/parquet/table/src/test/e1.py | 3 +- extensions/parquet/table/src/test/e2.py | 3 +- .../parquet/table/TestParquetTools.java | 35 +++++++++--------- .../src/test/resources/e0/brotli.parquet | Bin 6399 -> 129 bytes .../table/src/test/resources/e0/gzip.parquet | Bin 6639 -> 129 bytes .../table/src/test/resources/e0/lz4.parquet | Bin 6497 -> 129 bytes .../test/resources/e0/pyarrow_stats.parquet | Bin 2823 -> 129 bytes .../src/test/resources/e0/snappy.parquet | Bin 6376 -> 129 bytes .../test/resources/e0/uncompressed.parquet | Bin 6349 -> 129 bytes .../table/src/test/resources/e0/zstd.parquet | Bin 6494 -> 129 bytes .../src/test/resources/e1/brotli.parquet | Bin 6400 -> 129 bytes .../table/src/test/resources/e1/gzip.parquet | Bin 6640 -> 129 bytes .../table/src/test/resources/e1/lz4.parquet | Bin 6362 -> 129 bytes .../src/test/resources/e1/snappy.parquet | Bin 6377 -> 129 bytes .../test/resources/e1/uncompressed.parquet | Bin 6350 -> 129 bytes .../table/src/test/resources/e1/zstd.parquet | Bin 6499 -> 129 bytes .../src/test/resources/e2/brotli.parquet | Bin 2623 -> 129 bytes .../table/src/test/resources/e2/gzip.parquet | Bin 2775 -> 129 bytes .../table/src/test/resources/e2/lz4.parquet | Bin 2664 -> 129 bytes .../src/test/resources/e2/snappy.parquet | Bin 2667 -> 129 bytes .../test/resources/e2/uncompressed.parquet | Bin 2663 -> 129 bytes .../table/src/test/resources/e2/zstd.parquet | Bin 2730 -> 129 bytes .../resources/sample_lz4_compressed.parquet | Bin 1228 -> 129 bytes py/server/tests/data/crypto_trades.parquet | Bin 23748 -> 130 bytes py/server/tests/test_parquet.py | 23 +++++++++++- 33 files changed, 68 insertions(+), 27 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000000..b57f642b441 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.parquet filter=lfs diff=lfs merge=lfs -text diff --git a/.github/workflows/check-ci.yml b/.github/workflows/check-ci.yml index 14678aa511f..a80f9153b61 100644 --- a/.github/workflows/check-ci.yml +++ b/.github/workflows/check-ci.yml @@ -16,6 +16,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + lfs: true - name: Setup JDK 11 id: setup-java-11 diff --git a/.github/workflows/nightly-check-ci.yml b/.github/workflows/nightly-check-ci.yml index 12184ffc72c..b8402c0a409 100644 --- a/.github/workflows/nightly-check-ci.yml +++ b/.github/workflows/nightly-check-ci.yml @@ -24,6 +24,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + lfs: true - name: Setup JDK 11 id: setup-java-11 diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/ParquetFileReader.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/ParquetFileReader.java index 3e14d8b2d33..db33cf9c3bc 100644 --- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/ParquetFileReader.java +++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/ParquetFileReader.java @@ -236,8 +236,17 @@ private static void buildChildren(Types.GroupBuilder builder, Iterator> visit(final LogicalTypeAnnotation.TimeLogicalTypeAnnot @Override public Optional> visit( final LogicalTypeAnnotation.TimestampLogicalTypeAnnotation timestampLogicalType) { - // TODO(deephaven-core#3588): Unable to read parquet TimestampLogicalTypeAnnotation that is not adjusted + // TODO(deephaven-core#976): Unable to read parquet TimestampLogicalTypeAnnotation that is not adjusted // to UTC if (timestampLogicalType.isAdjustedToUTC()) { switch (timestampLogicalType.getUnit()) { diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/location/ParquetColumnLocation.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/location/ParquetColumnLocation.java index 3ac34501aeb..f9adbc44b95 100644 --- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/location/ParquetColumnLocation.java +++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/location/ParquetColumnLocation.java @@ -700,6 +700,8 @@ private static class LogicalTypeVisitor @Override public Optional> visit( LogicalTypeAnnotation.TimestampLogicalTypeAnnotation timestampLogicalType) { + // TODO(deephaven-core#976): Unable to read parquet TimestampLogicalTypeAnnotation that is not adjusted + // to UTC if (timestampLogicalType.isAdjustedToUTC()) { return Optional .of(ToInstantPage.create(componentType, timestampLogicalType.getUnit())); diff --git a/extensions/parquet/table/src/test/e0.py b/extensions/parquet/table/src/test/e0.py index 09416337baa..f6cc32c323d 100644 --- a/extensions/parquet/table/src/test/e0.py +++ b/extensions/parquet/table/src/test/e0.py @@ -8,7 +8,8 @@ "c": np.arange(3, 6).astype("u1"), "d": np.arange(4.0, 7.0, dtype="float64"), "e": [True, False, True], - "f": pd.date_range("20130101", periods=3), + # TODO(deephaven-core#976): Unable to read parquet TimestampLogicalTypeAnnotation that is not adjusted to UTC + # "f": pd.date_range("20130101", periods=3), "g": pd.date_range("20130101", periods=3, tz="US/Eastern"), "h": pd.Categorical(list("abc")), "i": pd.Categorical(list("abc"), ordered=True), diff --git a/extensions/parquet/table/src/test/e0.requirements.txt b/extensions/parquet/table/src/test/e0.requirements.txt index ba37038bfb6..bce4a36fa96 100644 --- a/extensions/parquet/table/src/test/e0.requirements.txt +++ b/extensions/parquet/table/src/test/e0.requirements.txt @@ -1,6 +1,6 @@ numpy==1.24.2 pandas==1.5.3 -pyarrow==4.0.1 +pyarrow==5.0.0 python-dateutil==2.8.2 pytz==2022.7.1 six==1.16.0 diff --git a/extensions/parquet/table/src/test/e1.py b/extensions/parquet/table/src/test/e1.py index 408c327f3a8..450179b49e1 100644 --- a/extensions/parquet/table/src/test/e1.py +++ b/extensions/parquet/table/src/test/e1.py @@ -8,7 +8,8 @@ "c": np.arange(3, 6).astype("u1"), "d": np.arange(4.0, 7.0, dtype="float64"), "e": [True, False, True], - "f": pd.date_range("20130101", periods=3), + # TODO(deephaven-core#976): Unable to read parquet TimestampLogicalTypeAnnotation that is not adjusted to UTC + # "f": pd.date_range("20130101", periods=3), "g": pd.date_range("20130101", periods=3, tz="US/Eastern"), "h": pd.Categorical(list("abc")), "i": pd.Categorical(list("abc"), ordered=True), diff --git a/extensions/parquet/table/src/test/e2.py b/extensions/parquet/table/src/test/e2.py index 446fb28519a..9fa3560a1e0 100644 --- a/extensions/parquet/table/src/test/e2.py +++ b/extensions/parquet/table/src/test/e2.py @@ -8,7 +8,8 @@ "c": np.arange(3, 6).astype("u1"), "d": np.arange(4.0, 7.0, dtype="float64"), "e": [True, False, True], - "f": pd.date_range("20130101", periods=3), + # TODO(deephaven-core#976): Unable to read parquet TimestampLogicalTypeAnnotation that is not adjusted to UTC + # "f": pd.date_range("20130101", periods=3), "g": pd.date_range("20130101", periods=3, tz="US/Eastern"), "h": pd.Categorical(list("abc")), "i": pd.Categorical(list("abc"), ordered=True), diff --git a/extensions/parquet/table/src/test/java/io/deephaven/parquet/table/TestParquetTools.java b/extensions/parquet/table/src/test/java/io/deephaven/parquet/table/TestParquetTools.java index 031c108a544..1add72076ce 100644 --- a/extensions/parquet/table/src/test/java/io/deephaven/parquet/table/TestParquetTools.java +++ b/extensions/parquet/table/src/test/java/io/deephaven/parquet/table/TestParquetTools.java @@ -458,24 +458,23 @@ public void e1() { assertTableEquals(uncompressed, zstd); } - // TODO(deephaven-core#3588): Unable to read parquet TimestampLogicalTypeAnnotation that is not adjusted to UTC - // @Test - // public void e2() { - // final Table uncompressed = - // ParquetTools.readTable(TestParquetTools.class.getResource("/e2/uncompressed.parquet").getFile()); - // - // final Table gzip = ParquetTools.readTable(TestParquetTools.class.getResource("/e2/gzip.parquet").getFile()); - // assertTableEquals(uncompressed, gzip); - // - // final Table lz4 = ParquetTools.readTable(TestParquetTools.class.getResource("/e2/lz4.parquet").getFile()); - // assertTableEquals(uncompressed, lz4); - // - // final Table snappy = ParquetTools.readTable(TestParquetTools.class.getResource("/e2/snappy.parquet").getFile()); - // assertTableEquals(uncompressed, snappy); - // - // final Table zstd = ParquetTools.readTable(TestParquetTools.class.getResource("/e2/zstd.parquet").getFile()); - // assertTableEquals(uncompressed, zstd); - // } + @Test + public void e2() { + final Table uncompressed = + ParquetTools.readTable(TestParquetTools.class.getResource("/e2/uncompressed.parquet").getFile()); + + final Table gzip = ParquetTools.readTable(TestParquetTools.class.getResource("/e2/gzip.parquet").getFile()); + assertTableEquals(uncompressed, gzip); + + final Table lz4 = ParquetTools.readTable(TestParquetTools.class.getResource("/e2/lz4.parquet").getFile()); + assertTableEquals(uncompressed, lz4); + + final Table snappy = ParquetTools.readTable(TestParquetTools.class.getResource("/e2/snappy.parquet").getFile()); + assertTableEquals(uncompressed, snappy); + + final Table zstd = ParquetTools.readTable(TestParquetTools.class.getResource("/e2/zstd.parquet").getFile()); + assertTableEquals(uncompressed, zstd); + } private void testWriteRead(Table source, Function transform) { final File f2w = new File(testRoot, "testWriteRead.parquet"); diff --git a/extensions/parquet/table/src/test/resources/e0/brotli.parquet b/extensions/parquet/table/src/test/resources/e0/brotli.parquet index 01e7d994f64080e7d9019d59f64900ea4ab5dace..e26a64f8c6180800533303a9034c5e84870123fa 100644 GIT binary patch literal 129 zcmWN_$qmCG5CFhGRnS1p<>hcU3kv}$iLEU5Bh|;Rk>;vj9{Wf3IS<~HdXD*cHC}G} znU}J^6(6;z%ZPoD#c^O_R5l?vq+1B8g+Yjzo}z5`Q*Rii~u N9+Tkls}cej@dxFJC>#I) literal 6399 zcmcIpO>7&-6<$&_t4d0m$Xb>}h*Tirg^|cIe?-M}Qy@!9{Ie*Fl*B(H5cZGclDkWW zKcXnZfKj+bkfev^(!lT`2zn@roPr?8F})Wp5EMa?Q;@d7Iv$T-4Pm zQka~;_|2S`b__A{1mjmW*OxZtuXg5LyY~l}o*IXnUL7&Hh;caQ7xD`qI#wUsCZhlz z9hWc$hY`&L(odaU+CD@o5TtM0Tn}x`KQA$lE+L=hGcsBVAZktwSDQg&wT52 z{r?c62)yNFf zQ-Y!BXK5EEAw`nVZL_&;xap(?!;5o9Dqfmn{=Dd=DbE#>h7!TC=PEK^EW9?c$^&Zf zXOx0BhGf07c%SIufYjP}K-Zy-+>8%zU-{e@fL;!tfn!!XTS4 zd`L6jtelI%?)fN8xt$%MCaD~~OwmhM>`-v8P&;1O5!!(x9`YJn;fibLqs#M9*(rJf z1tO$8wvwS(xw5kJ?y`3c6ozZ7D0+SF=l>j{bVk( zo;^v8VlJ{=Fc*1pnI}JR%#)uJ*WVUhPDoDI$4e^| zrqWZjj_>B`ox8pU$e`zIb6QpMt*!brPL)8Q^%Mn0oi5kz!q89p%@%Y+q$^=JaPJKm z==P3?amg?{Zlxkiig+|G(_tNT2Q75x>uIvk6mxAfgEuJur5|>S825&xL4pK|~WSDoT@^8i#4(JU3*g$G3!tCfxANreY0b zC_T?X#To|@O*nvrlDaaaJYz@8Vhj)F5^0cXu z({i|feVglarM3oXZ_dG*6$TMazz`tnYO^g1+!S_)$zuu^lDwxL4Ofvvj%A?P7Nxd? z^`pWm9cdhjY=uHZ7Y(J`?g0`~nA#H8ZMI3hP-MQ%wFg)(S_7`#ZuSx0vDEI!O%0_R z>;CnC56JWx08Mj&_3(PgcaL%}vANvs!cF}n#Qk{XIzBh5NtR^~;Wv6>RrWT^me^>P zO|fiKmuIu=wxI#@8SF;c;e2!hba4z1(IWFP7WJ|$v|xwDcBquVu8@fL%8B?X2&1@O z8l+pinp32Bq|OIV0(>ESnyNReg-}Q4f=aI(OKqlN=|QOw*2?>-4)lAaLO?+sUdwm* zSihRmcKxMd+K;k~G3G<8d|PHucVet8gmQ|2cDCY?;y&oByT^Po-{qBv?mLkm`Q+7j z7yN9d65#-!=%YWCE95)ncw~y-XbrH}gh0eE6{7@GO3U}S!tQZ7aVVp2z}OX%N<~a6 zePTD3J}#*(r4-8Q^M$;>RLIrD#5UlKzM4|=y;3mJ;2>U%C#B>MbFzOUr3J>ZYZ=t% zfxi*1l)6o9mQ_XJ6S>MLmRP!$l98vUj<+WkPC6CfbR0)&77lqP4pr%iTO~i4SAqLt zG+Yej!UFIJ`zQk+{@wai&Sqf9%)(Hgi9yS^crCjz3xildjMZuTHUoo>cglV=W@1pw z9X=R8i`AMxDxZkd&bSIFVj|us6?3)GnMnFOsbohs?Z2YORBn|ECyin-T;mHmug00` z!}$UmyXHKV`Cz0oi;I#PIp$;JJa)_A8_u-9G&(mYk)0UkvdNE3bS-BorIrYv!@6MJ zbF>MzTZnbWS;Dv>ex+MJDESM)@M%%65#JBfU=}9fdtl1@B|RqC`#@jHn`!{m1Tm5K zb5N&t>p7m+c14}X@x6jGLv$oH(lcs9{%{b9!#+UV=^mc>Ngg?!^C>*)c{z>866904 zARY^6+d%g_-FlSYPx^KkLyVb&W0_^Zcg~?;P{n;SKuQBmTcc5 z$iOKM@TEW4jcVA}zc)&w?+p+^NXQ3!3t#zs<~Ub~pF$oDcyN1b4@g6E*(OnfIB-DT zqi&)E-B{4zcZ-d0L6_i3=y-_!BpwCVXVHG>V5q;P>z~C-e2`G0u;~PM0$cq_vCR>_ z6mbHR@J!-^EvO=&S#06K*H*^B8)a)KV+DNaS%E#hTQc;4Bv>!#-)Cf6X9Dm-o>b8; zY$f3xoDcUjkJ6gKNG N6}?PRd+=W${{yhEK3xC+ diff --git a/extensions/parquet/table/src/test/resources/e0/gzip.parquet b/extensions/parquet/table/src/test/resources/e0/gzip.parquet index b68912d7cdb9cbe3cd9360863e139f79af512fe4..39cd91a4ee3179b9c84a0cc6e4490c68dca750cf 100644 GIT binary patch literal 129 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 MNJ_?!wMQG(AJl9oQ~&?~ literal 6497 zcmcIp&2Jmm5nnPit;lj}%UYH!h*Tx2h0(||KSaeeQou_}q)3ahNJ;!M0%5;MF1fp8 z`5}rj4EWGfQ4~c{q&?)&Lrz6d1ceVh^pO4oZP7yyLH~rd2#Ugo9E#4o=9cBeaKpn~v_$UfQ!vVfzL=w?C&`&~fj{y+SkV$Oex$ zxJBJ{34Rv`YtR8{egv-@1bIQXuZ3ya8aM7kyse4_&@ryOgwV~>37Q`QT zg0#m#%oD_)xqSa}F|XXrNABQPkZ)_1pZ=c7swDt%^HW6Zf#(`L^Y(y$JxKR^47+T+ z{2y^g|Oa^frAPoc*0!kFHanP%Dps0L}ks z9-n`~STRPo9-+UjRGnh+_p3L9^rC@XH2nR_#r$=Fd9eWgwn}o4Z(|olzeTTNuu>#g z{Vtc^h2cPYUGR127P@-KUSoc?6r`!Z8VOg4fI0B-%qKVAo7)-yHu#x_>h_%TzV-Q= z)Th7r)5c%mTvt2)NMipYeWMJ$jRz+yVC!TLvCu+w@ZcA3nIg7sc<_ar`Rpe1#S(hZ zBFRC%jR)}_+8OunF%?6jjtXyQuzz{?y{GoZO;!NLWDikpp*k4%a@k~D!(`mgZ!<4% zp>Y;T4)Se{yMmPWOWKt3ngp?)@_xU<{PWKLNP1U*=Xc*U;gL;v{^nzT;=2@&JMeLw z@_YM2Q&Ks4nWC50+>plCsJ$Q@7wy3r54Qk&Va>Pq@tp;%9rPj+M2K|kr3qtwZDsGr z%fWSW(E8p6l5QI$BD`q`Co_36^LYcoz=yA0O_-}p>de>8zRXpoz}LxW%vEL-<|=PA z^ZJ*MdHs9h`{NCt7lPCG>gEbX1=juEE~klH-~WfjXCYY=rLz;EqYPE8A9}d@^jWA4 zG#G_?oYs&+>#HG+Qzam1Lq&mEf57zyFb$J&rwhXv8A>>eJbxc1y1Wx2T$+fTl~R`_ zMLe0M>99@)<1VTT4K-Qlh&qCy+8s|9I($nK28c|R2As$ZIADJkk~CnKwFd4zK1$zv z5PEI`Gm9d`;r1C2I_Ya+Ko31%2PhM}LcCQAA5K+{@e zBfb#}J*WIjY_a&H{80Z0@&A40KDGyqU6y5!;hDBngMGrXRW?~*vn<=u>4gHjGvR>s zJPwnrv7X!nUYtWCTx31PB42@p9^|mt8%!A-3Yqk{d3F8&}J5t#+90!+2ONM-=4YwNjr?jT%{PKU}Tk!br&}#>I(aoc06kmTOgzG8MyOBa z%B6lSov_iHYy$SC5J`lkN|Ip8YNa7p-aoBnj%Cyh7ze_xQWtlX5s{n9omSPZQjHb# z^>Qg(EfK8| zGsXJUmQ=2pmC;ZCcf3QfeAcgnPiJvtop8vGI8zg zBfQ_T^_c^Pyc33&BL=P1<+Z}569%!27#nuy=72%RYjYlLM+|DM&qvc2wp!yy~3E+oxh^nRO{BtXYEQf-sH==Unh5J1osPM?3?3M=A((e zlP{`j;*?L3`#7k9Zn)Fo>h#{6CH7Jn%O*WC;kDeQtXd`hH1dM^%uy!D?jlx)yM%Uw z{mP(rR1KG-@$-tFBfcD_u@ffYOJFL6CEX@C`^ZQtnQ{Q+1Tj+zbC9R@TScDN_C?)~ zvu6c&hVV#gVmQeSrQ>lT4d(!M=Z1La=l#g(KDY6s9+!50tU^51%HpY@Dy?dH|1c6jdhb8MHpi~&0~H9xsYGgQXAv1rl$Ksw3M*sgf`J@a~HbKcVQp>sPVB}7j!$u zBIbrCcCm=wsj8E}{2?xb=pum^M}#%L3qQ=cnC z4XWhgBqwXhIE=@9Opg;$Esce!a>~nCtFqy}7CX!z=HTq0_Dt$sC00`eZNJM$H%UIr zA8tnWT6wt+HIQZ7@N9>nY_dJ9rMn|2tI0ghb2vX}zY z!IRPP5dL{Q3hpnU{MeDfzpe9M*h_Q}Q<8A#1a}5|y=B?X6knDofkkNZ_}~Z{=+6T7 z(D1dLpWschO{B2`zVxWTkv^!5CFhCuiyg)7*_L}VHu%HCFPJDe7*LiulC_F-?FcD@UGNjtlN`#``^#J zmHAS9w4yE}=BSc8f)9I4u~=$UC>kWEJ=`@C)=ZF6A)NvtYD>{YmxB#nH)jlF*J2@K Ms^IZ$5)xSP1LXH7z5oCK literal 2823 zcmcguO-~y~7@pm=*NbBdgP7I2TB%kO#-1Ul{`zp&^V24K@$5^e^BGp2FEtI z;s;bc^apU@&|?l!jyY64pdNaxdaA0ZhpLCDhn}h)a;eDs&g?n{FOec88Tp;rnR(ui zXZG2F94n-#k0xn6OI1oH2{8x>OG`B(+R=$o3WqzUX{}s8K^{?DVLtYx*+@epb%X-Xw4|4wVxs6X+r^5W<;U9AYvj zk?CR@cAyoHM@cw4X+v|Kj*-OZDy*C$@sH1>L5GC@%jRx*K;u`*dZt)M3J@6$b53wi zBA4l`ON8bWh*d6^aY&_7IFw4Ivvd~Z83jOw0uVr)D)^UxNkdM-YPZ*E?9}Z7 zlJ!Eho~Y(2f6tnZCECkUgX`oA)CrNp8oXGI_`p=K0GI|g1{MUXg|#JDAATqb8`OQB zF2t$%IxYFm(b5MdviCp#&@Tn9e{ym%?(;|HHuevHAjCSnFp$<_0Hl>|bbG!gc8%Uv z3;3G)cZ&X#Z2diE{dSJjyz`!S8rwssu^|QtJC`=p32sXu=Q`qTdUrgJx^kT7P2(NWpUYX zv?>KO&>{2(2M1Ch4SK~5#uyIOY8BXn#N%|*QNe;bqX5)Zuh6{zIYHIeN=gYZ7vL;kDFB`7Ps7%%D60Z3St~k7vFb-E9B451+Pb_8{V25~lg0U11b_&t8 zs2Od()0@?L*EgQ^7H+8bdI4DP_bYq*!q6)eKM;E3DiJC@;6$*FmeJs8MFGo~&P9bs0)olT6e$yN{q+cy!$cSPvr z&BT5p0ZaBxo2TNDF)>3Q2g>uUeV(kgntP?>*X`;xz~&xYfihQIf4hKi5nA~3IS*34 zUuaeYlR8qnk-L#d^kF~W-$WEIT2SS#8SeTO^meO~`DnYg;^bs@9{tyH&~g9UJgUHp z1n4S)G?S%!NginfIC6a5UPpg~IDD%Eyx`00u`zb0x##A6i21H|A4@FNc5cJp$$f@Xiv%A!iOR9-ut<9a8 zH*enW_ujmDv#^iYQk3@6@6zD|+DCg=DeCq^4@FTtz65-UG)1q`flZu-pD(mS-Sdb6 z4-a$8?=8UF=UKS%9>x6H6QWmw2`}Xf!YsYu_xV5Z_&@V78D{BnQE(H?cTk0!zpeA3t?(h7=|yXuiG?qP;dvfzbTg`s08sFF?>t_-d5>Cq4507?9#1n0EZH-5@6Kb4sapz?3AUfU z6QY-GwvrvwuRYASH<{nxgqXTb%rQK}6N>&Zy^85ak@O3AJOK~xHEF@{&48JNi_C9t zg=i|cK@w0VEROsq%ood#rq%>O4gQRiZ+jf4pHqMS&EL1aggsmD{40g+$C+Ckv@>F5 z&46>(8sd^mIvuOmKXT+>-Hz33$iEfl;}wjR%fuYRGh&5D$?46%M^qfWI4QoH#r6;P z9zC1wjWq-C)*1rpl1_W`-#ZR(8V+y1xy`(~jo!FS%rQLEo3~MyzPRhCOHD%2tV{n{ zW&XJOe=5`4An;e(K|pa3_;!u?)7q5;7J{EAsDRH9o3h5!s}#Mmu>i$&gE|PoPS9Q) z36ROyiW~le&+jfl38&~~6iAS@*vgh-ePiw5v(?ZhDA;QoDEf&lBF3AxaWYb@k>3{# z1z){!jc2a2>M}pHSTfgHzuu%OG1plnnCm>V%$uJ!=FQKE|8KYaK1fdgCo5|d72FK? zy1Xv&M&K{YFT#p0$>-0-jylkEBmCj|vlrnu$e?1Qx?(-7g=Ry5NSk^&Z(Hpq-^dxitVfdwk%p{92kIN@Wn4%xV0VDKs6R22z zg#|YX5lx{edVgn|M0&!{vDo3J3qo{55YZIG0E|6!LyW~&K}c>0BASAzs~vu(AC8Hu zV8~8SZV3@h!3dp>>UPAIUIkEh`$0rg0FY2}UxAc|4ACbx#GcvNex@5A;rvx_4L2MS z&4KG*d{4j^VPtvH(aC8!J$|sq8-2N_L)trYu<52jL{l_G@Ve3IDIz~3x_0t7+=V0` zXwU6cJgi0Hbh^m_wfLJCt)=KGxtS8wqweRMRw29fcXM;Q>;Co+6G-5!$Y*le40hQA`30pVX?K9 zve*@~nL#a^xd34b*UO`PSI|nToJqEX*m+do5*N8vr@_Syg^#I&S~|CrOXo*bE}_?s za|ZMWRW7Qcj-ZzfAw6v5^utKCl8>OQV2y=1t2|ZMi-R<)i1CstqMhALvT_Xi+Toe7 zU+xQP(!|b|$C!ea=>yJAE}Mu7*&*U-JXbbqndA)IR1>&2#b`1jS5kyiPA?C5?(nRZ zJyj4JIQGSTwJzCs8&UYYj=SCf3I>{q9kB2gs zho%ms-D-r)YY_WNDp84-5+cMA_ECX&L=IasV>X9FVIGIpTn>7SSp36b28A2>`>8m?`G$EU8UdAe_O4&@iS}8ThXJS8M|O$ z&fAq(qA74@T&*)Tg!2V94xM?b2(hFwFBVlTc_yUEdFzR3lt0aZxdA#CPK~n#W1}4xGvn+4Kqa zK01`kjv4?pLCTgRJk+VfR!I=_L&=QeIU?0Hm`~c7VbR2mz z<}>1G=H;w7Rw18ioOC8?YOBf(=f%>I`!1g7W8Gm#6-QW43s@h)F4R}8+{XN?X&FO| zm6Pt8&?dMu&O&$oSvbTv>Owr<1?;)Gh_&JAtX#x10OzL?yR=iQVBIwD1+d$OIIHB2 z*)NSG4tSU0?42G-gDUw1smXdO0sWB>H}gc&$|EtRo(T%xRk_GP ziyah>^RRbt_gME`C0!^@nE0et6VOemAK3Wu`n#t7rN0D&xRQcR zC%m)Rnoo}HjQQmV2u#8=%@4Mqf$=P23lF|_3l`rL+e8^F;>*km?3vxFr4K=Z^`iNG zMyAb30AI+H2HJ(KByk52q5!YG%oY9+R8R#K!uMxX;HO=__ltqtzb|&X_sKWxy7iH| XPQG4)ui&4;=KZBocPZ)!{*U8-mj)Y| diff --git a/extensions/parquet/table/src/test/resources/e0/uncompressed.parquet b/extensions/parquet/table/src/test/resources/e0/uncompressed.parquet index a10b74a8ab6ed28fbb898a4f8f9339f51dfdaf64..cc6d359aa9e87f66c7c1bce2863d68c9e08e6eaf 100644 GIT binary patch literal 129 zcmWN?%MrpL5CG6SRnUMTEZ5jcMYhyV~VnM#>m*2q+o(IM;LIis~H5<#&BwZ|9}?2LvCgjB(@ M6SIGdbYVyF1G_gT3jhEB literal 6349 zcmcIp-*4O26{Z|VHIg*T9Mg~hAvJ`V2vEnNB+HG84hSV%G8N0QWLuOJ6b64uqC`@f zC|Q<+07bEYfPSz~2kFISiV9E^CE`oMmrPUi3ca#{lkf{hwyB2!ITR3K zZUKJ5z`~86QOxT=guW9_E>giT%+b_paP^k~_+!${(&duy1{hhS7bq}_4TTL$vtDQr z62sWuz!yBz970R(OlS#7;@GX2(vRi z3DF_f6XdrDznk!zW)BfuM0se@@xsIKO)x?)xC|lo5XWBy;E(z0CiBHjjHGwzOctJa z0th_!o|1-IaoW(+X-1(XTO;(;?cIBd@$^eU;$i!rr3ih?Wvh7N`Q3ZW@7{xW`VGu6 zJHr!-zDwW5yrW3og#v+40C$R)D!fiIPbC}8PjqPXI+XA#RqU6kgW6m1lj!!yfN6yAy-uGl(-4mrh-eJDGjZyL$ zm}7QElqSv(_3sgtKo5?K4|3T4;o&DQW_#ky0JyV;K>DPUo_ur9<4MEg$=5$&zQ2o} z_zcW3JJXYQEkeJ!?&TH z8=&B>ZJ_9iMbM(FcZUML%A9@iN*58T6t( z(QK&EjkTyL8Y&3Pfv&^I>WjTT3|Z3ebfKFdT@|~rSD(Vbws%U5tB%=8D|JoPmD5R? zP3yEj>LOfpU}|zlu^9}E?r1#Gky@(UM`niF7ZtHDg8Iv-YJ$3EHgN69arV)Z=qnGI zNfuENmrszeMeoD`BlKzms5pK_B|i!gO`&LJe|w8Wdcx1K*yE-TLiR%t(G}o!Q=cVOpQ!{8exbKO7Owf$LxVNWhm-WO>ms$!R$`db}%IeYIyo+Iw@b>8C+N zQ#54oy3y%rvN$8UZt{5Cg(M#sr|v3p$gvD`dWzapv3}G=-BKs1Xnrb0blp_?y#X*G zg{h~C{Z5b63tf|XVsC`yqB|0Mz0MHnovA%b>zF9r+GIClQ3z(#A?TTlZ6-Gp(N|RH z4p%BY7e2N>LPGysd5q7K#vaFUC-56TnFjZq?9pq9&CfG~~g)lt4H86{oKrdm?`JSGXr3%=E9 z2nkCQ*X7XoMqpMdFMSET-vsIzgRC2q( zH~kTBln2##sx5-Q=nt=#Pf8lQ#hbB7?q&h?C5Ydc7jNtmn>9n%rCg~#_9c^V@*2kJ z|IT-y2iFE8r}i_L%N`t!==#nQZ&XP<-MZl2bF>MzyU2CUSwg?Tf4yHjuChWrc~P-z z#1G>%n#W200i4RLYWoCx9~-J=PYr;YpybM|2zBb9Rgxt0K(XUExmR#zh>mKc22O1# zpNvvj*az@CKfp6T9Y@iQ`HVQ)c{wYNRmi8Bpq$Bu-l_`2d9n25zKc3-#3~w=w@}M%I$!<&?iBv^xD7@<@*BXOf0@70>RsxIy744|@l9k8|Hu5;a{m54uu(i`28i(N=7~RnY2i2Xb5+ zemg8&n_Lg?(!C*EtLXxc^Ef_iz*fiLnoas;n=>3@nW~iByDMBoy}gL{Ur za=CC;60#SNMVXJ z%gzey+1;w64?%+Uvi*HVrtL@oU&xaN+J&toaR(5h0I%Kb75)%ZPz4pj_vcjTgRa>7 m#X#*plDpkU diff --git a/extensions/parquet/table/src/test/resources/e0/zstd.parquet b/extensions/parquet/table/src/test/resources/e0/zstd.parquet index 390475966489ba451cba6428ce65fdf01439293c..20e8f23b9a2b9ca4e6b7e82508f9c7e38f1a4ff5 100644 GIT binary patch literal 129 zcmWN{K@!3s3;@78uiyg~X-NqE4Wx-MqtcPugRi%zz3eHU(fZrgS&HRYvaPS6a7c=hD3O#V zN|xmyKr!s8*wav8edyDG0edKlA?ScTw*SBe^kEqKv_GH&_Am^^unjxsl9VZt^x8CG zBHnw?J@=g7Irn@J$pKr6(q8&4I36R+M;fGgn);GJ#yq~k)jr0;qxrK@|iwGGXKXuE2 z3L8$CKlFxZuZfu_n7{P+|LI}AUSNK`5c(GK9qkIxKc2B`34Di$z3{sNzj=GW!(OBZ zyoOy)nBRLfL@$__1%ml~kN*=7^P!LV;tG1&D#H<%qrX8fJlF42%Ypj~)a@VD``&qc zfkmAuaNnF=zmNX5Q-R`y{p;_A=&L67hQ;51S!8~;2>!N9a*^*~7e&8LuVA=RBwPa? zPr!rWKt>bLt4T9xuP`4hg=i|cN&;3SU=I8|^X%F?b4P=~27ji(nwq)Pz~>z06RnhyN0hxzg~=HE-`K$|2N z`3?@mM0Bw29}_B$HXRk;%HsIxt#=+d+h*(l3gZmXZKJx__UwkmwwA@VU%ttFdL3=E zNpg|zXxodgcpuP~iq|H9^@{h0W#+4!|EK1?csS3#Z-FCO;QZOoyzjph&O-3x1QqaU zLR(Zg`UXWWtu84*c@8g?`&^RdiDiRtH<~WK5V{>(R?-w^h zYrtThZ6WDRlSG8KP2prE87sdp7z%#$+`WW(nFXEsu9cU0ndR?!su}Y#%L(%`^O<@6 z++&_UPyBzp=J!Ex`v3mgGDQW~0=_<{HaIQt`PC<3No|N{CqhpiDXJE}xAN#oxC=Cx zg$JD462ogNVU<%vAgCi*hLtwt218gz$h_BwX`D<&oJOC%3kzM|2@x(DVrQi^B~fmi z%+hpNC&Nh})rCi@B=j0Of|1gnOgDObM-+yLOc94%gBxAdDfu!L4Z8|Lnp4q~dz_;kmW|8Qkei;p5<;3&!}of!-4K&{nS!R>4nmq!00AWq zB?x(l5OwB4%$=>xN2>NN?q8;^WmiW?F6xHo-%{a|Frqx~sU%yD4>xu=Z72>@2zzS` zw(T$oX%2<}R=0WsN#Gp3YX*J)K@GvO5L`>=$sF zV$J>3Ch+1K9>PWT(=758Sr|bMi=)Yu#i@|ZjOy9UIS^BLUYz9nyi$_IOtQnr&Z2xJ zah~h+T9vpaaWQ#RPv^FB>HMTtNvQS1oCfnztrC@yhgZuQpB}ez>VBkF%}0<{FxGsW zl^#m$`Cgipgm_67P|kKHSv>@PW&f1lEf0A)sq4;`r#g8hGXy?My2i&c7q;5tN8z){_Jyya zawD7R)~coUG$(c=T5ea9EcY+#Hr4y}%2~G>OSJil?pGtH#*kkiW8WI55+6%yZoa4~ z$x}W}@^M%P-H_9f+B9#@l6z^4Ws4q(@Y-@Ir__i)&AMQ{bCe0P`-s&gm(XsoUmn(v zYLQATabDGH#5cn+whSBM|K_%WS|rm_|hMorc|8k-y5~*_Xd!_ zB=iUS0AJ;D;j~oAoI@N#_7JVW3M>Tg uPpH5T`rP2BBXM{~==blCZ`c*%BXxy*y#_yme+qN^OQmj7)B*g@%KrfEFG{We diff --git a/extensions/parquet/table/src/test/resources/e1/brotli.parquet b/extensions/parquet/table/src/test/resources/e1/brotli.parquet index bbda7e06fb96c18f684caa5f948f8e601a9e7eb2..a91acfd478805b81e1c1c8a495e353c47b4a73c9 100644 GIT binary patch literal 129 zcmWN_OAf*y5CG6Ur{Dq>htJHkw*dqpQE437g{QZxm%OulrH_wpbMCSk^X&8Xs7&-6<$g-t4d0$$Xb>{h(I8sg^|cIe?-M}Qy@!9{IevBl*A=z1j7E2Tyl5G z@JAG77%&RA2$J;BTv`}D1VIl)ky8-_Jq9@kEf5qzkyDUE4~=`vv4_4lyQG#}QcWCd zZSKsxdGo&Sy?OIyVehlq0PUn-qF>&jT{N{wQ7=AEQ4inxH2CG#D<8c5O2+$-TQo&4 z(cU$fUx1&>yGdPhh#m(|QPjK62UF0v98=RTQ`5{NhnJpT4lhuyWtgXD+%ES+hx>g8 zlVoPjmo2XWB1KP8@LGU|qG0T|F!(t|{n0VybV<{{-Os-L@t<2Tb@+S%tQ5RP9t++RAF&!?F8ro2DE^jJSU^vWQTbLfX_W;Qqbp>ySl zW7G?Xqw@;-;55A%Vfu;7OHcKgiiGJq4)-Gm^Uo{H<0}|X>+-Q|{Pg;O4Mf$s`SsNN zZ=U3O5yTX+LQYnR$X`-h);>DfMEsUO;}9n7z0n7{r6 zLTfiN!SonsDEfKYjY&w6B=k5O9tUnZX~FQ^w3&)mrkOv_d1-2Sm879ec9HO?qeAuMs-;j>2uq_-J-W(#wfKKZ)idJo z9c|&DSU7x0Gv6#-%whSXFy(Qz#EPu(^dd#iuTDY1U8Q!sup_h+M*`$Ew&JRL=cB7L zP}wPZ76lTdJhrl_SXy1$d2i9X1`7SPWfZ;87ZKx?zHu^A%#qu*>|K8R)ODY^%wo*^ z*!sy_W<7hF8pT{@xnM5ybY7D|pm$UiMy)pAY{Sq``t=5ML!>KX zH*o(=7#Q}BiE-I9J8Y$-$f|TaEHh{ww|fnQ^L2DZtV;%ij@IZ6Ch9^}7Td^7liR$+ zw|P*%=aY3%SM)NjJvxkEzv;VgAv4Uv$K&!L5{BqUali=OUjr(pUp~Q(LPR4dir(Jb zAdw#Ob0D_3X@d~$5JWTr(E(#O?GOX;MG%r5f`~>SN@|@S>xX6HA{esM!&^c`BQQd} zuG$^xOD_T_+5I4*5dcUixvfCTLx$)>8`7WI+_Sb7H!48XUUnzlIF%j<+6Y(<; z#&EsdOE&~9tIF|6RS2F21TK7*s@BU~sHN~hwNs3xHdC>5ufT=%;z6nf{Z4@ksHh|8 zxt0*?mQ(tkzmQM+QMPN2g%GRUQP{Jc7^{e(tSX|Nt#~AV0Q%bAiIB{-1vO$|CvpQ! zL5sHmXET)u2ZTfy@id;xwTkh`7~E(DxL3qL#4qQggi}h-b$D*?q?kBT5F0qQ#iUx2 zl4_UOjipZtT0<>_GR8cY^B1^mMM`V~-{@;8E!QaoBQ+lUMSoIi?kKDHH&S|Fn7h7< z`U1pnz$>L~6Pra%RfR;hH1H*suA~%<(=+GWk+{=V31T|TBQ=SKGLeU-cBHL>pUi6z z`+PK<4`st5#1ZyUfq3}$s$*j|fy3@34%LYq^jt&GGaHjQNE~u3kK4Bi91Ol=_Mm%5O`l{t>n14kr-V%ekh`lD%2=17( z(3pG{_ArjR5K1=ydtxqPZMZWo7x4_h`N;>*?G*D^H;sD%?A9R8D!F5l*`CA!?;M<+ zSh@=S0CuE@KEXbU8&Dqq|dO6^wzU z<^}=ljOQX9Vxzj<**n-cOX+^N6>IR@^24>sHt{Y^cHvr$?&3I&+=0Ez>A84q@&I`)n4jl$r214Q5w!M~03x!mqamW!W39`yu(y}b`XLvxurQ35}3 zK;DCHq5$1k(2VaE8{dL1;gc}<5dBd;Dz49<{m@}wf6LH6_m^N0SE8`#gm(g4<4Ljg z0lyRhfk}8q`N0;HF`gN0;lbC|uE{sbR#3)@_%gBrdq%fl>O+uVy=Z)&k!d3mz!&nQ zjCNrwN!$U1D8Oqwet|y(6;wfm@ckv_S!wXiw>onBy4Yx3Cm*pZ=11y^@%g&^82&A6 P(qAfem7@0H|33Z)Cb2-f diff --git a/extensions/parquet/table/src/test/resources/e1/gzip.parquet b/extensions/parquet/table/src/test/resources/e1/gzip.parquet index fcd8ba59e754b2dad97d2a128c6dfdad0c20e7cb..c38f1487f953d081afd429dbc65f484678673285 100644 GIT binary patch literal 129 zcmWN?%MrpL5CG6SRnUOpvn;sj23QbgR5C(xuzG!$ca_iV<1O1-$J~{A^mTjIx&3cv z+VXg*d6cX!BSvRATeRqR49-R!^u0QVV2shmcxDPZW1^xXflG`50$V~$REka2v$v2P MU=_1}i$wAuetG&P8vp%RSHy?UfSji2bM)0|P#%MyH!w$?_b7gk1WR3S%G=x9iYf~rzW=w6HqXE+^T-pR zM<=3Vly?I3>0zJO_Z^S#w;o1jMh?wPOamN>9zsWB@Boj)G)rH0gZCoEod4bETb}Q} z@|z2O7i|8KQy|65KjN_ml#e>^B8A0c(EnjLKo7Uk%LM(OJ-)j`%nwd6?+yh%fh$*r ze)@_F!#sr1BMXyWN__m6cSZrFOZbPMLW09Bs>jgy;Bz?+EBd{S(qXS&Iu%zg-^c*HRMUvd_@%TNMI^^kw?J4R)}~sKK93il<$odYS$2!w;r>Uhhl)`N`_!Pk;W(*8+>D zsE;oG@SOqSeKGm8`2H~DJN2{Iem?^v!r38pqtIKeZ;y55d%hjsH;0&ipJncy#qc_e z4shiXUaaUf7rOsS|7!bNFTeEduY7gwy)Vv}{`mIG-uJ1;Z@d;C!1l-IuimoR{+w7s1<$(H&gZIL<2Cd8a%%`;D4jm(qRiSNCqeO_k7cYo|01&zq>ElZXv zRsFv>b33S8s@Sb*q5yZr)5@yd1pK1*R88P{P-HK-i*Bg#jaUXBwcicm-vr z7b5EOqFc4OSrX|Uo*i))O@|A`>4J#*T-3qXWv7dd_$U{u(*+UrxyTzO$(2Xf!clI> zPWNsJ5%sx|OC`feq%A$lLEg!Oi258rLTNP}QXVqI>e-O?%G~TNtNH@2ALXv#bVo!3 z+|>>~p~KrjM0rrMNVRNkTw0K-HLYSn+IQz*(Fucy`d}!)x=^atg!un{?h;;?3yU1b zZNjf}B?{aPj>~fKb<_k}Y3f=N4KTu)c!BIM-f}&w?(_;UZdOJ;9;gItNd%!{M{7 zl)|BsO4f6!s3TiKRZcVtytT?^GfOPWR$6m8!s$13?qE5==}IJRC}?Ls8Ov;dzPY+5 zFA6o;h}phVLdU0UCTrklj!#8Ha;ky;Oi2`~xn#`6Z@dWDi%KZQYMD5}#9KmL5?A+f zsZAYy1IC)NXynyJqe1K@miDq{*~muL?R8OLvtqiarWOEi{CVCK>e+B?R|3Ashc|@H zw9d}*R;U-dwSxLG#IJ*kHy4P_oM{+xDxL3eNh}q49pm(W$6Hs${c0X!+KYo9ghL;Q z!!+vZe3m8aCd57yk7gq2r~+|>ebgZy?COqd%m!ds8H8bHAO=e)%hvkrAPlOA7z=Lu zHUNW-*JVF;2VyXDRXLnIB{WwkIb@J=SvI8)}-(cIsw7ww%CR?((A( zT}LhPW|qXW-50v|9BqQ_GGZN2OUN7e8@1fcEGvei2N}CZd^}9eL70?}fk|LBn-lDP zsG$j6Jpg)wni5zE`qb)9T9&O<)sAEDUO~+e9nFl@TfITpY{rtX55Rk=jy2yON6C)4 zOC0UIbco`qwRtKeC>*nnd-zJl{5oUavN zJ<)(0C*chjV2(#Q4C3)L&h3*J4|aQ<4D4ZQmxJ>g&ie+Q$Dqm{NDJa9tpona~q!$i0h-+3-M4?}_{W#b|G{df#~e;w^dZnpL3ZT&;O#0Q}g zhfOEAQ~0zmo-1|m@x%!%!qtxtwxEFVT*oI|c$;5o;f-@elyM5)?5x0%J!Vb6Aj(Whyd75ltI~K&;FOWtkZSGZoTI5yGk|PAe9K Mv<+6j>WCo>Kf;11W&i*H literal 6362 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 ZU9~=6Lm$Gwh0Xd)Wo}c{A^fk#{{X|GC6oXF diff --git a/extensions/parquet/table/src/test/resources/e1/snappy.parquet b/extensions/parquet/table/src/test/resources/e1/snappy.parquet index 36a559277197178c5f1aa0ccb8a82df0bd9fb698..e914e31503c66976245941f5d27b1292c1aa91f9 100644 GIT binary patch literal 129 zcmWN?OA^8$3;@tQr{Dq>$|o_s4FMv|sO<>t!qe;9ysLgj-`~2;d5q1NN1wN+jOBkj zdCB|BjH70At!nQ@kCt474a7n$!lj1DfozVRi3F1%rkVmeu}q%t8Ni`mDKYv$ffF%s M32O9j)e*f{KiUWh2>SMNtBFB6bo@(JORt1K3OO^M|&n`#ve? z6M(ny-VF49-^{J|DCRf55WTpXSfc!^z@=vb{=g@`z-K-t!^~f8THOG16g@*hw*&)4 z!8$^3I_873KI$FcV`N~vWeq4j0wOr?aDwxQ5?g?}KY}C^+wMoY~S7jH#Cjlo7O_ zz7wJs9JI0%({Fstcej~8+=iHXRZLMl!4r!9DZPy8N0Iak`g}njo;4Xk@$I0MgmcXA z?u2M+b)6)jLQot9PM9wj9*^x=1u^(DOunsQoPI(5<+p#|{0h!&t@W=Ijvr_4@Gwq@ zmCXU?>^;OK4|P0NuYcmozp4|f*N}gU%*TruE02mPiYLShuaeuFe-EfQdU29}H;dyR z?>~M%*&CY!=IuSisE0c4&3~6%-qc*)e0!I9br-$ysFZtLrQKpDl+rK)~5sL(Z}vl#`WeuLAzn z(CVu(`r9CFUlJ1ap&jmU;8r#=QAG3HtQa7!8a3Q|dXjnYDE!g|W)wwO!0jU-EYgp{fDwAR0Z?qe z!lKs-A&ps4jqdgqiS&q{L$b?Fj|s_Zf{?~c^g!7ouZbb~Iuo+j1R;%?sA?@?q8~2C zb!Ny(j~)pjjhPW!EzRqQL%q&G)$0c#jTwN1Qo1UnJYX3S&sbWXy46t0Z z2STUQ>La{!rDLis1F6yIW@IxGhG>Rugl^_$Vly6oNd*_#Lg5+zq4g0G{C4Fbwnw!+ zmSs=jH*Dz|`;2AFY%0%kEZef^`8>O8O91}>rzzIqr?x;A*U*R*;ip-Y%d;?o9u`MO zD2r1mo9R`unM)w1albOiwMD(4DVbzLj9o-UK5@x4S~WgyszOZbRnpuxm(C5!e8Q+4 zb0*AtWj?B*jA#^1G2O3m#$lvf%0-ZNV6VkEt3FfN%l$N~O7Vgwp`M*gvUCjc`r)~_ zSL}*f(z2Z`4sD8hrVDnqxojdTX8UMQ7x z?5T>j0b^I%)2i~G)+c(?x%0B#*2?j`#pjEWGGD06*cws6u@8fhtrCu z1vRq88PQSf#sSKU5WgWVPTwUuE4rqM*+O;bOFCEQRE*PG$J>+n3$qF_9mT;-!=X;a zp=&*PryL=C9b#WfB}(x^LV`HLIjRtk$YEn*%%)&Cn1-P-6@yW1i$;EH8U~q1jI~MU zHU)!)cfxrzr()16rWngy`RdIdUCbuySFws}ayHW}mkRaao!E<*+@7hr&R?^9s{3T$ZdF@%=CjreTu42c}{~v3!EF zkM@W5qdvqqyg5`1FVmr7wW5CY-0XZ^o%LR zib-!xXcD^BXtxL{`z^mAV-%bRcO}2w?>0Te6)zks5bGSaL z0YBY`juo&&2CVTZhe;|`z_s-fNs9u4>BQGfizk>9c8ulyx8h$|^L zbb>pJqt!UJHN?jeBfx|FOts{++^N>75rP+w7*pP9z`9&e{%c}KfE3N diff --git a/extensions/parquet/table/src/test/resources/e1/uncompressed.parquet b/extensions/parquet/table/src/test/resources/e1/uncompressed.parquet index 797009419009fac4968747712dc15413cd362205..94ee35905cd0fec5586df659ab2b2a0d75a79d20 100644 GIT binary patch literal 129 zcmWN?%MrpL5CG6SRnUN8`7A5x1{M%zR5C(xuzG!$ca_iV<1O1-$J~{A^mTjIx&3cv z+IYOwJPNBzi_x>3EgJMYGh(s10+HsZsl-@KwxMcG7}$W#_Z&Pqp9)6{h!DWJkdmiV M0mSUzB9SzRAI~u-CjbBd literal 6350 zcmcIp&2QVt6{j3WYb0svI;J53LSP6r5nvrhAC@;-Y=Ka+B~!5+OSVNx!NTB|BuXTu zijrkH2v8I~6*&}pXfHwkf;|;Q&qYz}VX$p+vAu;acxE|-mYkW;5|YGcje0ak3KK4tU*C$*iw;YXu>2;l_Dz8Ka)J3S5cvUS z=Xw&NLyjlNZxMdC;Wx`3BDje1(4y^yi{aZ~gkEqMLhK=qzYf43^TloEv)dR+_tLp6 zT=4`Dc$S}$hFZ1T(6d=ap(RTr^vvlkKf`!>r66&!{m)W_zT>c!UGe<(1LpT1Ks>z$ ze9X@Agre`$_c8A%l6Rp%AQZq|ChdgBZRVGEBQzD>AepBS4o7Q8%pdN2GP5EKYVgmS zb=04K_xG)Tz;3N~|CPb^7rDDUv~!|l&wyk08sd&eI$=l7#$SKr%DRRtN`Jb?e0vw8 zGI^uA2Z+G zM^8Kke9X@EayBiqKap%x5eAqYS+-_-|+zxatD`VwHKbdOdjf^Ar^d zno>*A1$u>|?`2WZnC~I?^_y~o2*vvQiYhCEDX#|o>k`E zPa5;?=Va|~ch`c<5;Ut672XU5dx9YgX6P?>UPVGC)ZV$Ri(p9h?{(F}@e40g6jq^JCxh+S@aAS5pY5zRmh!PrwT z#6)}@gzSYNq8W&W))nUZ;hMM(hV1n8mJrbljM(jJUPm11bpQ>oA4D_*012fGR7iQq z5MydXoSB{NmxlQ%&R+-D^uiI558UAL2Lir|BFoFJK~Br*@smBl94LJQ(%zkeEiVls znxP?q*UfHUm4rFbb&|*BE+qL-KXX=*Lyl#j+n1HTg7u>zXr?kvMfFl4qMN2N=nsJj zDNKDu7JxmPHuqVUJ%!)o$u`*+EL&qUC6;5^t|c#(*gabV=8M?Pu+DsD z8+36D578p?Sr+w5EVN*U#nw^EV^_-OhV^{z5`ysF5MOr7jcnKU2^Si zlTVtekkE$pEVsjD3*#D}GU~^i3H@P>k87wS8WmH_j+&ft7^_taF_abUv6y7l7b<&s zkY!aVS=J=9vztp-k3nBQJQw#X15ry`*!ju?Q`B<K zfO|`dr(;SrLpX6pWhn56=k@%lirBz$Anj`nd0!h5yV=5dP48*7WXYQ6E3q11ZpryQ z;G6k~(<{STBHaHp4mDDxL)17bSOgY)B|`ts1Vp}bp*k$D|rU(KYd$#P19IKn=v5Rceldv45pI28Rj zw0$`km7Zvnw*5HBJaTN#+czH$7T-Dh(edS=*G(~zyYkhWKf0Jtx2|Fp*W`SzQ>&I+ zlQXd&Gr4_Jb?v`q`Bd-K`HN09k!p#&6<7OAjo^HNjYD^ys$wE-`o*HAr_aSKIgf)n zV8fY?)h6fWB7Km>Tz288MAvhcIK4*V>C^@Ho}*2$-9xTEX9@iV|FuE=q!!~7smrQW zBfcM}u^%VtdvL166w4>r`}jzyxM~2@1UX-c2~ejF+htKS4rMEj(|ZMHhUh4IdT7^% z%IP?rgM9$M3qw5fvvCxxn9qr$m6!A4Sc813^YXc*Ywa38@{6S__dPt($A-&}CXKP4 z7O_5pU8t{mrGxob*K?+nsHD9$p+j)zoQ0nMSvbTv8e+2018m=1#Mx@N zuT+ZXWj=Qac{COQ_W2P64b7FhL<#)B0eMfl`5JVy2|K>KY;G62giqe$L-c3)Xt=(F z_LC=${;s8e&?UE>cy1yxWXe1ArT)_X$# n=R;-iSnBm2laJVS`y+MT`g{$)h5r`j_eW(PP}C9ppN#(kivSp0 diff --git a/extensions/parquet/table/src/test/resources/e1/zstd.parquet b/extensions/parquet/table/src/test/resources/e1/zstd.parquet index 52317b0f2044384374ae4823e2c7f5b1c6506c10..b654640e0f664f15552c1e92503e808a27c2d543 100644 GIT binary patch literal 129 zcmWN?%MrpL5CG77s-OV_%V&Xfv%n(EsAL3luzG!$ckz4n@e*yVa~@LO`?@{q-2b;v z+VgnId2*H)Y@-)38)=7!E?~HNR}2P93=wjOC9`n^8j&iQ0DuWRWUDYLgEp{&O3Fv_ Mu+9Eu;ev(j2exb`m;e9( literal 6499 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 diff --git a/extensions/parquet/table/src/test/resources/e2/brotli.parquet b/extensions/parquet/table/src/test/resources/e2/brotli.parquet index f0def9676f03aa36ceaeb09a6bd4ff5602f65afb..2fde3adac4db6b81d58330943300f041249b63aa 100644 GIT binary patch literal 129 zcmWN?%MrpL5CG77s-OV_EdO)^>>|vlWL(U_>h)dTMQkRjk&pykW|53p(rTL MY&^aszy!Db0J;q)kN^Mx literal 2623 zcmb_ePi)&%7=LjRFH5T`i+IL?Xc&t`-IRv5Db*;^RM3z(1Sx`!!?r4Wv0oB{V`q*t z^^YnQCINy;aNy9xgm%~oaTrn$9AOgN*lBR6CIma6N}SlK5)<&fXNTIsitH5Pv+6V5o*5hc75pyoD}lr&$lL?f@BS=K~w=9 zym!g`p<)wYvUYXClu^Fi#?(>fWRJqx`P1*a;KbpHiY646>Q)8`yHgQ8=&Hr%bgj#>>(W3vYjT(+odMWNRZhjdb3k$m&Wb-$n7R|o zW5MHUoco6K5^#57RXLFaf}CI_Mo4==N_!;T7d!`~Js`nIvqxSYt}@FbCRY1?)T+LvP$Bu_xBx8Bg*^&XWIhUK1um`R${^kbsk ze3NP}lCC9-PeQ<0U9)RaCuB8f0ave+Y*PWtk_ z^rouW=Adge3`?hLw688H=Qq`sK~243kuHUAYhaosMeS0T=)@(5k#OE?3hN0VRIdXn z@I0x;Fwr&Es6GQtqiyP_TdRQZ97IX0gjIN`vX}ms!UN0DY@MoGC1qrTYID2_Plr{& z|KdW#?!0(}gf?D+r^6BhHdql7UOYlVA1}evVTqP$ljwa6GZ8X$ybMo=Wtz5aMr?$K zBLrIG1$a6v0AopAqe~YT&RhM}2&o|;>hRkma+@kEwP9O)j?cdS?8~I@QpaLk)gO74 zlg5}RDTl;yhTM%POPzmM0;#|)1ixSvFk?G9b*K(sEn@a*&>yc5_VZ$kBVPtjnLil7Q`6NAy(U))6fmqcZuUdeio|2k@sLZ$Cox+R`^}z-(~^Px$<-6 x3Nr$pT*Cz`LDAJMB+mpK&-B*aj%_J^0cB`enQjgYQ&(nBpm*U!5CFhCuiyg)XNEPuVHt!fm6VVie7*LiFaFFv-m*l?M{%>}# zZ;7*~5V~@yyx-!@aT`Uz%9d`KIl|S!4%Xawxc2A^#n3L*8 zg;oh3K=|-bLJ`Oi$2J8FUvz{MU=~)!kc@C24#FmzqXY|6u*g&;`@%qG8XPk*3zY2( z&$I))Z-w>cD+^Y#l+L6tWm6e^IE_&nuvnBO`J8O0k(`>IL@1pB22h}5*3V!uDAReF zBUhlzpH@;yjzmaF39XeJmhK4|oCvfA*Pf9}pxqOu6|n~-ipW}YiFOki+!u(<7O)1Q z-2@N=j55<+_0M#Px02vI5K}ImkNWEe_(;AhWuf&X+(8azmt7xx zzyQIiWpDHzFs=WPxtU_EBboAMuPnhRDN>C%CaEj8`qnhVwHsBZU^ymTrgd#fJ-eor zENYtthg2zicN(^xQ?)AfiAj8N5DDjlLt$qE6^P>KiebQl0*NqwtICnwH2^`!_@ zyCCZF%U!rNjkQ{J9X`j4AH4Jisr%G(m{x0zyv9W_CUWY5FwT&_8fB^SkR?EMyh88` zmIpJgXHt)v@U2AbI_>nwJB0l`Vw~Dwu1pygZU;M!=JA`Cz3Jy0ngz;SR^cwH3eO cI%=zd+P177(;Jp;s-wrzdH5T*0RPhd0~_nTwEzGB diff --git a/extensions/parquet/table/src/test/resources/e2/lz4.parquet b/extensions/parquet/table/src/test/resources/e2/lz4.parquet index c7416517a789f03fc9247bb553886df2d5ffba0e..ac80cd17b6386e7b451d60b877365f4adc40abdc 100644 GIT binary patch literal 129 zcmWN?%MrpL6ac_GRnUNeM<77D;e8NhR5B8CuzKCgUh`+0lRx%_V* zTxdMaJcP^zYIN4K6&JRh0IjSktVOJkxfDsvxjOXLM#h@KZs;T+QA*$=14J*8g&bC5 MuV(*>b{?|&0o`;c7XSbN literal 2664 zcmb_eL2u(k6doszH)>a_Q0*8;ijXmC1SsvcO{tbugaQJILxonL<-k&fu{}u)j-9m~ zv~5+X;($2pfgix3hdrS^^w6KM>X924#9_s0kNpL}do%Xd4sOIsJ5t=|_uluuZ{EC2 zbN9o~Hz}ca=Gz|d%&kkbkwL{k)avKndFHS)6qwpfs}OFzmb|Bxj^`VB%Vq*1Mr z(<~kS0%E&R{$g1|st{D+Q!6I#(hqXwAIMyykT)CsYve6*vrbNoeg=W!Z%`|je*p?m z{EMPO@MrmqT3V8vKmSAfeFYRAg!k&?nY*k$##gzn#+mHT_g{xZ^K|kX2i!k@+h;kP zii&ozn}l3|ZfGJtYRNjPZ(Vx^!jSW zP}nN$R;9-Zg%_L93djJ(lz~S{i`O?>%AR9nl0b}7O2^_TU3>4wnz(f7t-vW0WFcs zsAKPN=|$+d(xMfKbp-ZHL2<713>62!P_e`u=%mu3OA_R!gx>(+Nd*{@17Q8kYV_y8 z$5l`+!CZj*`o{o1uFmi3DI})b8m25$NPJoqEOOM4Mb6+H%bEHDJj#L3R0NxH-q4bR zI0t@Q!@jSQ1~h&w(8r4YlhW)NH-gz@;IM>`!pP&Xp>&C{48H09z)kk2+)%wBxeY#_ z+1yWkT4;aEorLJmYHcXJ11Hdd5yHcR2aFFito=m0X>sIwCu$! zB3xtv{X5$wyOaJB3TH8e2p1`4I9MeV(qBU1E~XISBE`@TS@}M)NC^#JOe4ZY8aoXA zl8p#=3BhnNfe04~U@Up!P593C{UF{ep~@1<4u3R9cW7a$gD?!Vk%=2Ay;~nxN{ENE_zcK#>K0I&d diff --git a/extensions/parquet/table/src/test/resources/e2/snappy.parquet b/extensions/parquet/table/src/test/resources/e2/snappy.parquet index f06e8ff2cf50481c51712e4366d31a2657ef7e2f..2b0b2a5421762f6686d23231a2eb1ef812eeffca 100644 GIT binary patch literal 129 zcmWN?K@!3s3;@7;U%>|~B_uHPH-rXZMx|r02Vbvy*-PHq$IG-iPu;D(_j!9%UH`Wa zuVp-~o>J`PmeCKREdzx;LMjN!5wk>>1$}|T6)8bnB-+q3#pEk7=3IdUTxA9f5jo)& L7VTd#fB?%6xjQED literal 2667 zcmb_eL2u(k6dpT{H*}ZXQW)c)fGmqf3rb7dgsQA^2neJ-RA>cS4lE@a+vCLG*uino zwpFD)RUGywaO`Qt0U=KN132`+jSJ$$0de9d0PoG%TRXTBEA2>*p5J@l`@VVeGRd8H zKiZ~*-lF{u)xpqdgOFEms)P_-QQ(s)^`3)<3y)ZkwNKwGq_tTx<0+W#|}%4`0X~qV5>$3M&B1(3`F1 zx9vuYUTad)1X`*Zy78Iud6O88{w^WS7H|Ly)NK1Ls>w7*q(z1YX@1{?mdIr`u#32i zGW1+&QB`7Hf&Ikz6tL$?-_&pbObtscfX>twU6CL!BXj_CrUD~!0Bn$3tAhpbX$_Q1 zFc;u~@jif0Ym2)&hs11Ke#SCIX*IzjM-5rz3@)%d)}DYz1@L1H!IqpiwB#TzfFISd z@9Sh08b2232a55H((Iepqxod$vXqbFB;Yes=@RoQ_@;+LFFl-cQwySW4}2kWc$oS0 z*!hCHDKY-2x1sbdoInRg2oDcFV0@rq?H}|D&fpnx{-tB-N>1a^6+?$XGW98oJT^0b zUpcnjIGj(SVGw!zKA+jQtb50{AMnr{Mr^|2J(`DM$Fe6pWgbh}g{K^sO~IZ(hAlf_ z15Q#6^S~sy&%F(38Xxh*J~@C4si2D5W?11;W*PpU#PcX{V~^V>9cy8OwzHf?gv%_T zf45h$JL#{WaFj&)B3vebvE*qm;k&(i(d?jtDo?07{Lup4v5lpU;z-Q#-H+e;fXz~#M2NMsk+%hC ziHMGM0bC|1J*tv4{*NS}D%?Ww1?z&CIPrMGJ$Un3IO9cqqC#2UCF7LeZ7vI|qy$eZ zB~9ifC8EI7D>=Y>A>k~I6WHIe9R^Oql0&>&d^nFOOTL=(6vchblUWc)7}?p{>2B_9 zZi%B37uv9Nw|ogc%u84_l5<+R;btjIQiyLsRXFk~nA^gP(d>%5D!a`Jq}!WsZ+1}# uXi9?=q!dXHPKdctP`oicOviC#Wd*EUvUSs$2cc(ey+KalC+-gX&HNXPp=X!? diff --git a/extensions/parquet/table/src/test/resources/e2/uncompressed.parquet b/extensions/parquet/table/src/test/resources/e2/uncompressed.parquet index 50855c72df891ab70821cfa89c58ecdc5f6eb281..1b18f5ec570dc6f40849ecfc4e78375f41735f03 100644 GIT binary patch literal 129 zcmWN?K@!3s3;@7;U%>|~O#%h_8weoGsB{eW;OliSdzH8J@ltKhQx2`~ecm2b*8lC3 zRvu3+XJLK8GJ00hBHH~(fg&Q=%E4EPo2A`GAO^psYyrs?E~OgE4jh~090q_$&Lbxx MyGZ{Qg$Ba%1F9<~lmGw# literal 2663 zcmb_eF>l*O6h2BcD>y;n8a;*rgn%Gmp#@~uwp=4MG$=!X4jzI8$&whtkvvIkDN-d* zMQp=>r%stOb?guX8G@icA?TPPKr#fKItBR=Y2Uk}Y*MC#1jzy79p8K3`@VbkbkdFM zH@7IEdvvcw4OkeoMo5JaVrUvX89rQmc<_+}g7)ctX*Bu~i=(QhvnRlI=*|TghUxHG zItwIZ4ugtV>8knbY__sl!miS*7Z}bm&rSRH+c(CmRY-6Y-^SU$r2mPt8uMT_`{#!% z5N1Cez2G?i_ul<02h%C2*~g+1GE+)O*`!TWx{@z=txB|M`3U_~e5L;6CnNQSe8lJ~ zp_kVxmd4g#mpVPwD7?6YRzLu(yfu^1<;?73{VQnZ5R0gO_+Yisk=0O!LHOXSsX^u) zVqUolU}YNhM*WXwtwAr>DX9Z31)F)#yjLe?t+Pu=y#XA+0y&$0gX${Gm0^(?L73mM zpd4ygHLM>Fvj}~uHE2a)J&Cb#_;;Au!ukKgaUADp^#AA&ct08J6ez8F-KbKi3hQ^%<^I z2hM<>En(f)$O;sGDAA{yd8*Yr)|b&_)bp6&gE$FzYH4j^T>{(qu;+`zF}L&}64$^M zGM9&$&4}HfxhIJEZm9{Wci{wD&_Z~4@PPJ#f;FER=bXXkF6s!qE zII02;;1pGF>KFz0xxWrY;{%>JCkGIr6qHdr3^UASR_+fZo*GT)j3YZsU{596-?)tb3;7rN;XCB5x$s8-r!u^VSylWjfdZ|Es!0FNT>MV}Lm3a{U3kUd81u*X4}SR^ z&Jgk%Y0N<;X(3BeIDp7~Fc-L`Bozbv@W&JF*ENhh3UBkLdqsV~pYr-oyh(q1^Hq#D z9}a$I{Q1w{_W2ZEN<*sR#=1gt*9y&seB@`<^y( z`fNbS8j#iXf}zlLY>7%v6@o7|kOFGMm9wq`SxL+;Z*PH{8OCx{*FRgUwiBJ)(DTn; zP7NY&pXU`T4_CTYsaC$Om8xX5LZE`QWL4MnkM*Deda2z4s8o>ySukhquu4=JW{a>u zKftiVwt)?jmr>%a<(Hm?K31xvAhC|XeyHC?>|>>EsC-xqm8X~iofoQPMS|Rfu#2Gc z0y1(AgzcuQ^6m`yei4;RFcaWi{T71n7iX)wz`&%eZo+b^VB|$n(8zh@G;&gBXfD*J z=w1e`a&$6{d?n{}7QMtfzYb+=eP6&&75#xyX&WyE<3Y!vG3$kq$3}+I1mg!vke zF?DH7FD+TWYzprQMp&`~7UCpTCv^D7 zPYw-ROe5S`8aoXAoI->-hoHNdK)AC6IF>B-2CTJnCm8MLP^AHRo8OzEJGOYLqc9M2 zeEWlI@6u7sqJU$qWaKRYS|FlsUIG^hijVRn_2(oZ)zm43U$7>M2_u(9%*D4Z^+#-4 zpU9Ba_l$8$&o+npc~ZRRl@dqej1rOH`IYSRb0K0h4kN7Z*z!F)qS1sOEnVD?A&ov8 zvzUuJWYNeA1Mb;wY&SQzHydKB#DUhyoGqWCjmJea=*cHY~A8&irmhLgA-24<4LOeLFF?Xl;(X5)4E M0)OLf;=j~?0mSBw+yDRo diff --git a/extensions/parquet/table/src/test/resources/sample_lz4_compressed.parquet b/extensions/parquet/table/src/test/resources/sample_lz4_compressed.parquet index cfbdc7ef2db3aa70119e5941701a0fb1647e2de3..ce1a7ba020b21813efe8b3894e4b9c018595a433 100644 GIT binary patch literal 129 zcmWNEOA^8$3_$msf(uw6wFtcpA&D@f(h=H)rR~|eRLV)=({n`I&LrN%XB$$ z$?a|W!P#6+wMx2|1e@Pi5Q>N_k`qCsS?RIL-IGlrOdtW+M4lOg<;})9K@wO3jMk}M Jf2N|T4;eU z;D8Y4p85ej@da?}q2-7WC&U*Z&K#Jr;}B>#Ak?R5XZOwQ+qbiFI;!iVfh9cKq+rYf zd=u|p{I~;z_oIk_vsfsjMHMERu5D!*+sbMs%uQiQ$J_;8Nr)q%d*jiM< zoV4VDkROEC@T`APb;|4&H6UjkfP;(0>JLqBo&Qpi`rJJ7w?y8GMCsV*v5Zc>xDk*7gGP!Em{1?&|AItbuYJs>j$l#|WO zGPZSe$S4Nf%;PLEducN@eI2~-ri;0eSAE-0&3+d0lkmRIc)K&y(Bm3^QJ!)Y&1qJ_ zHn*aCgNJ=Isl(?qel@^+GVuX(G~ts$T8`^1p5*)f@5`KUx8z$xT6BMk1pvpj^Qzlz z-@cS~&)(P0GcLx8u)+i3x>7qTjMWvTVpU60DkQ4K$(mAEIflO?tvD4{m~ZotNYyr2 zniipYo{+bAqW+arpzSY9`76 literal 23748 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

N^B>92ySD~&tYzVP6hQOd@^ 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