From 72d61b7b63a10fad015ad7878e86a77946c278a2 Mon Sep 17 00:00:00 2001 From: "Sung Yun (CODE SIGNING KEY)" Date: Sat, 5 Sep 2026 01:19:22 -0400 Subject: [PATCH 1/4] reference tables --- reference-tables/README.md | 142 ++++++++++++++++++ reference-tables/index.json | 28 ++++ .../partitioned-parquet-data/data/a.parquet | Bin 0 -> 1087 bytes .../partitioned-parquet-data/data/b.parquet | Bin 0 -> 979 bytes ...6446c4-d70f-421a-af9a-50fe8654ebbd-m0.avro | Bin 0 -> 6299 bytes ...361de6-42e9-4841-ad9c-87a60d52d11d-m0.avro | Bin 0 -> 6305 bytes ...-b0361de6-42e9-4841-ad9c-87a60d52d11d.avro | Bin 0 -> 3967 bytes ...-516446c4-d70f-421a-af9a-50fe8654ebbd.avro | Bin 0 -> 4055 bytes .../metadata/v3.metadata.json | 1 + .../nested-types-parquet-data/data/a.parquet | Bin 0 -> 2081 bytes ...3af039-c01f-4a93-af89-4789ee7d5bc5-m0.avro | Bin 0 -> 7439 bytes ...-c13af039-c01f-4a93-af89-4789ee7d5bc5.avro | Bin 0 -> 4474 bytes .../metadata/v2.metadata.json | 1 + .../simple-append-parquet-data/data/a.parquet | Bin 0 -> 986 bytes .../simple-append-parquet-data/data/b.parquet | Bin 0 -> 1004 bytes ...6215d8-27c8-4975-b1f3-24b68b8bcf4d-m0.avro | Bin 0 -> 7106 bytes ...3f6e2b-06d8-4eb6-beb3-44cfcdee2233-m0.avro | Bin 0 -> 7113 bytes ...-973f6e2b-06d8-4eb6-beb3-44cfcdee2233.avro | Bin 0 -> 4472 bytes ...-286215d8-27c8-4975-b1f3-24b68b8bcf4d.avro | Bin 0 -> 4548 bytes .../metadata/v3.metadata.json | 1 + 20 files changed, 173 insertions(+) create mode 100644 reference-tables/README.md create mode 100644 reference-tables/index.json create mode 100644 reference-tables/v1/partitioned-parquet-data/data/a.parquet create mode 100644 reference-tables/v1/partitioned-parquet-data/data/b.parquet create mode 100644 reference-tables/v1/partitioned-parquet-data/metadata/516446c4-d70f-421a-af9a-50fe8654ebbd-m0.avro create mode 100644 reference-tables/v1/partitioned-parquet-data/metadata/b0361de6-42e9-4841-ad9c-87a60d52d11d-m0.avro create mode 100644 reference-tables/v1/partitioned-parquet-data/metadata/snap-1602692989443393359-1-b0361de6-42e9-4841-ad9c-87a60d52d11d.avro create mode 100644 reference-tables/v1/partitioned-parquet-data/metadata/snap-5699608042525680694-1-516446c4-d70f-421a-af9a-50fe8654ebbd.avro create mode 100644 reference-tables/v1/partitioned-parquet-data/metadata/v3.metadata.json create mode 100644 reference-tables/v2/nested-types-parquet-data/data/a.parquet create mode 100644 reference-tables/v2/nested-types-parquet-data/metadata/c13af039-c01f-4a93-af89-4789ee7d5bc5-m0.avro create mode 100644 reference-tables/v2/nested-types-parquet-data/metadata/snap-2523913528636038442-1-c13af039-c01f-4a93-af89-4789ee7d5bc5.avro create mode 100644 reference-tables/v2/nested-types-parquet-data/metadata/v2.metadata.json create mode 100644 reference-tables/v2/simple-append-parquet-data/data/a.parquet create mode 100644 reference-tables/v2/simple-append-parquet-data/data/b.parquet create mode 100644 reference-tables/v2/simple-append-parquet-data/metadata/286215d8-27c8-4975-b1f3-24b68b8bcf4d-m0.avro create mode 100644 reference-tables/v2/simple-append-parquet-data/metadata/973f6e2b-06d8-4eb6-beb3-44cfcdee2233-m0.avro create mode 100644 reference-tables/v2/simple-append-parquet-data/metadata/snap-7973649908883454602-1-973f6e2b-06d8-4eb6-beb3-44cfcdee2233.avro create mode 100644 reference-tables/v2/simple-append-parquet-data/metadata/snap-8192414647100221600-1-286215d8-27c8-4975-b1f3-24b68b8bcf4d.avro create mode 100644 reference-tables/v2/simple-append-parquet-data/metadata/v3.metadata.json diff --git a/reference-tables/README.md b/reference-tables/README.md new file mode 100644 index 0000000..9e68fc4 --- /dev/null +++ b/reference-tables/README.md @@ -0,0 +1,142 @@ + + +# Reference tables + +This directory hosts whole Iceberg tables reference fixtures. +Surfaces reference a table by path and hold their own expected +values, so one table can support several surfaces without being copied. + +Tables are grouped by format version. + +## Size + +A table should stay under 100 KB. The three here are 16 KB to 28 KB. + +Size tracks commit count, and almost nothing else. A commit costs roughly 12 to +14 KB, over half of it the manifest and manifest list it produces. Rows are close +to free: a Parquet file holding five rows is under 1 KB and is nearly all footer. +A deletion vector is 385 bytes. A v3 table runs slightly heavier per commit than +v1 or v2, because a v3 manifest entry carries the deletion vector fields whether +or not a vector exists. + +So the limit is about seven commits. A table that needs more should say why in +its pull request. + +## Paths + +Prior to v4 the spec requires every path field to be fully qualified, so each +table carries an absolute prefix in `location`, in every `manifest-list`, and in +every `file_path`. That prefix is the sentinel root: + +``` +file:///tmp/iceberg-verification/reference-tables// +``` + +A consumer resolves it one of two ways. Symlinking `/tmp/iceberg-verification` at +the checkout leaves every committed byte untouched. Substituting the prefix while +loading works where symlinks do not, notably on Windows. Both are valid, because +the assertion in every surface is on decoded values rather than bytes. + +Substitution has to match on the path, +`/tmp/iceberg-verification/reference-tables`, and not on a scheme prefix. The two +spellings are not consistent across fields: `location` carries `file:///tmp/...` +with an empty authority, while the paths Hadoop wrote +into the manifest lists and manifests carry `file:/tmp/...`. Both are valid URIs +and both name the same file. Symlinking avoids the question. + +Starting with v4 the spec permits relative paths and makes `location` optional, +so a v4 table needs neither. + +Data files are real Parquet and the tables are scannable, so surfaces over this +corpus are not limited to metadata decoding. + +## What is here + +`index.json` lists every table: its name, format version, the implementation and +release that wrote it, the path to its metadata file, and a one-line description. +Consumers read it; the `description` field is documentation and is ignored. + +```json +{ + "tables": [ + { + "name": "v2/simple-append-parquet-data", + "format-version": 2, + "written-by": "Iceberg Java 1.11.0", + "data-file-format": "parquet", + "metadata": "v2/simple-append-parquet-data/metadata/v3.metadata.json", + "description": "Flat schema of long, string and timestamptz. Two appends, four rows, one null." + } + ] +} +``` + +A table is written once and not regenerated, so `written-by` is per table: the +corpus holds whatever version was current when each table was added. + +## Naming + +A table directory names every choice an implementation has to support in order +to run it. Today that is the format version, which is the parent directory, and +the data file format, which is the suffix: + +``` +reference-tables//--data +``` + +So `v2/simple-append-parquet-data` is readable without opening anything: a v2 +table whose data files are Parquet. The suffix names the data files specifically, +because the manifests in the same directory are Avro and the metadata is JSON. An +implementation that reads no Parquet skips it by path, without parsing the index. +The same choices appear as fields in `index.json` for consumers that would rather +filter there. + +A later fixture that varies something else, delete file format for instance, +carries that in the name too. + +## Entry point + +Resolve a table's `metadata` path from `index.json` and open it as a static +table. Every implementation takes an explicit metadata file path: + +| | | +| -- | -- | +| Iceberg Java | `new BaseTable(new StaticTableOperations(path, io), name)` | +| PyIceberg | `StaticTable.from_metadata(path)` | +| iceberg-rust | `StaticTable::from_metadata_file(path, ident, io)` | +| iceberg-go | `table.NewFromLocation(..., path, ...)` | +| iceberg-cpp | `TableMetadataUtil::Read(io, path)`, then `StaticTable::Make(ident, metadata, path, io)` | + +No catalog is involved and no directory listing is needed. + +The corpus carries no `metadata/version-hint.text`. That is a Hadoop convention +rather than a spec artifact, and only Iceberg Java and PyIceberg read it. An +explicit metadata path is the one mechanism all five share. + +Only the current `metadata.json` is committed. Its name carries a version +counter, not the table's format version: a writer names each metadata commit +`v.metadata.json` starting at `v1` on create, so `v1/partitioned-parquet-data` +is a format v1 table whose metadata file is `v3.metadata.json` after two appends. +The directory name is the format version. The file name is not. Read the path +from the index rather than constructing it. + +Earlier metadata files are pruned to reduce clutter. `metadata-log` still lists +them, which is correct: it is a record of past commits, not a set of live +references, and nothing resolves those paths on load. diff --git a/reference-tables/index.json b/reference-tables/index.json new file mode 100644 index 0000000..9254e7e --- /dev/null +++ b/reference-tables/index.json @@ -0,0 +1,28 @@ +{ + "tables": [ + { + "name": "v2/simple-append-parquet-data", + "format-version": 2, + "written-by": "Iceberg Java 1.11.0", + "data-file-format": "parquet", + "metadata": "v2/simple-append-parquet-data/metadata/v3.metadata.json", + "description": "Flat schema of long, string and timestamptz. Two appends, four rows, one null." + }, + { + "name": "v2/nested-types-parquet-data", + "format-version": 2, + "written-by": "Iceberg Java 1.11.0", + "data-file-format": "parquet", + "metadata": "v2/nested-types-parquet-data/metadata/v2.metadata.json", + "description": "Struct, list and map, so every nested id space appears. One snapshot, two rows, one of them entirely null." + }, + { + "name": "v1/partitioned-parquet-data", + "format-version": 1, + "written-by": "Iceberg Java 1.11.0", + "data-file-format": "parquet", + "metadata": "v1/partitioned-parquet-data/metadata/v3.metadata.json", + "description": "Identity partition on category and a day transform on event_ts. Two snapshots, one data file per partition, three rows." + } + ] +} diff --git a/reference-tables/v1/partitioned-parquet-data/data/a.parquet b/reference-tables/v1/partitioned-parquet-data/data/a.parquet new file mode 100644 index 0000000000000000000000000000000000000000..05539deb66c3da1decf915d7967171d673e26f5c GIT binary patch literal 1087 zcmb7EO=}ZT6n&XY;)qpR$$MmAz~MoL3e(WZN1KKqil{-P6v2%mc0OLysrl;6q)@G;E1`|dsG+tkF%JS4ChN0%gDp4ILC$CQCcAqwtxW1 z3h71gP0mFUJnBRT5f`{tjs>PwWjGFYq)<|Dof`teQ?Qk6Ghmg5x1B%kjEm<3>0|tTp=8Cps-F}M6^y+dnPComnShE5#~4cr>@ z1GCl)?$P$`HcDP?n%-uM1#>k|-C~~aHtMR8HWt%{I%~Dus-rFz%z~56WapWcTU=Oj ntfj2O@@tv33^NMZg{(cFvrSeo&dMeDFozfF!w+W#{yP2w?rq=` literal 0 HcmV?d00001 diff --git a/reference-tables/v1/partitioned-parquet-data/data/b.parquet b/reference-tables/v1/partitioned-parquet-data/data/b.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f4e361ee703f20845b2cad92549966314f0ecb98 GIT binary patch literal 979 zcmZ`&%WD%s7@thiuu3VdWQMFP7zPq5Y(h3^ng_AyNs%6kpa@3nW_LDO$g8`XLM;IW zPxbL16jTI3$i;&o=v6!v^%y*f;7O1k1h0P6-8`V}uw)hmWV^$`n5SvueUgfA`(fWIJV837?F7} zB}4akqwDM>Q6ZuzqFz);e4BT?d!Cz&6{5J^>7=4S$8WPm=KJ`S|QG?60nKG-vWP%N-{YeG> z3@MBN(Z6AGo*rV7JE9E~Pfix-wo(Tn5I&yj)DpsvM`wCKhi4H&>B}$(ryoKTrzH9Y z$HY~{7i@#qxzotFMw7So_$ai?yqz9r73O+Q-|(2q{8ZXDStYA7%jPZ9WtBU-Ohh!5 zb@aBV2Tx@V-|E{AhXkOxI_7G1I}J8aeMoKs8DHw@KoDWiK=Tvm_~K88dUl(;p5E?x z_u1g?0L8EObZ4v2y>#12Y;(u8yPbrV(TW)@v0U%lEi+Lp=_NCt%V&9grMOx)>*c)3 i3s%m`ajleJ%^TSjL+2&!qFjYf(0|Z-jL-)B&i?`0xz=9* literal 0 HcmV?d00001 diff --git a/reference-tables/v1/partitioned-parquet-data/metadata/516446c4-d70f-421a-af9a-50fe8654ebbd-m0.avro b/reference-tables/v1/partitioned-parquet-data/metadata/516446c4-d70f-421a-af9a-50fe8654ebbd-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..9f355a683332fae3ff2b38fbaeb2c62453350444 GIT binary patch literal 6299 zcmb_gU1%Id9B)%Cm9}|kMN){eEK&q7c0bZ4IT3uQ#ge3=i8M5n?cCm6ZkxT`>+W1i zS|b#EDTtOd#HLj1iyw%Hh|t$6=%XNri1a~x^Fi>%w<7*$W_MAc4<3l!CT^jx_gvMJ)cD~9@u+jcMtS_E zQH+36Z@E+?Ky*!pk%^iYU>(uo%_vQLJD{Rsj0LT)hv~D%arQ*-UdmUm1Xn;)kNMc(JBQ{S;iwk#d@Iv zRp|PiI?Nr7PErj8b?po~(;Yk2Nh;;Ar0yVqmPr9D9!TA5%~I#zmbGSCeF4ajV#=Wg z`9vwNG*g}X0Sa~;EPEWlvM2heHhWVObgMRdqEE2Wxe9fqG1SCp=v3()()&!aPS83V>jOILM0ukYOm%ClFYH*n8jH6pNR~SIJMH$)f<&j8-On_$ z)IpJJ#sZM+{>B-Lw-=DqYKJM}v@k)GB5tZAojXSv2fJ@x3EXJ8%~&4DX{nqB*K@6F zUTk$5#ckgsPS|L~m~rqD29&GbbnIgvw}4+WwrtuqqeINO8LF0`8jwY)yL=qkDlLk` z2t11FP%lMfo8IICgc&#sv=h#1r%!f`dX(o;5)(RQpJcm)8`iNq2;TX?>4rJE9a+Lr z3?y~H)CFN3iQCwPSO<(@&&9yY7LqmO&!d8(^tNol`jze#=?+q|aM5UKQ)gGSIJ1pN z(FXG4EtfTQ0g?OU~IMw5xBJIg- zRwNt>s@PgD07-SV7@Uj^?wa``RIm zjEXugTsV3$Rl0ykE60Tum~92CM>jK4%ec^zTSBCGCMP1tl;&4-n6Z4!nPcn+{ZPWz zHg<(1ufPVsQK~7P{H-)WF^83q!`$P_AY+&iF)+Q7+)4wz#Q=&ZWi5!og1X(A7`k(L z5tJz#rHHm~GcpVMrYth(@JEeo6Ui1~*iaV9OfTTm+l<17LMn;EhSWWJ6kD=i5tk*q zFGqB@8IyIQG$sqMOJk~e0b<|l*n<&iWXsM`d8u??wtbF*O3gjBj8)z;w$d{FyRR}v z;l3@e0jLL+9G1AR3kP~&iPDU`{PKjb#EzJbz8BN4eK{s59>9o6zBi>Oq{2)_3mBtt zZ&Z$mJUNuwGFeP!GshrH5`p%?->|sk8LRtf06v2!?WioxdH}2eCJGb`L{Q9}IjrEN?bE_M7KXcY@ z!_V6v-1%aD_14J8p0M_2BKJpW=rH4;~zx@~6zo5#KxT^4`PyZ|pLM=7xS78oEEVyRmoQ fg=1%Ci2;+6iiX8xA|#M|?L10fn&3jwmbN~?6={ZZ=bqaRojY@xIk%*c zCNu^ji6kzRg$r32OWYVYZd@8-Qa~X-BmM$bQF8t3qGv}O{&fMN!n%p$$%=us6 z|2W@2Z`RIk-}7|r&f_NfYR5&LEVZycuE!*5yF{<({7u!X>*Gd6Z+O_R$NKo`i#mN` zR`dWh>3R6CqDS~#+lw%~0BKxFb@^d1r!QByh$Tc^MDSb~EtLy`6P_Y!3sJm?1LBal zT$FfC923-Rkqi3r?D7CwjKUXrEdLoI$_Tq*L_JTUXrjPtfSd#BnPW=4$q`UW+SG6Y zlowEx*f|ao4KzI)pjJE|5{IF~1y1Wh+xJ0)p)y<1>$rj1KGDbNb5)b6XsRQEoQCIP zVYoDg$V&a;c}jet!cGg3d7**kn8FJ#gf66TDuj%9VW7SH&V+W}BlFtvlNy7JT9px+ zhM{=I^ftn%i6{=TdQ{EF!M4WFXw;o?ji#fbg^^4DXe|_-YvU}ArlH0UCx}O#6E@1@ zH;rNhlzPjhA_1afGK@^rya4Nn7H?LW@QW9QAI^C$@=x)uf;3_%$4*H%Anw`aEZ&xa zH!oSo4cn~n62Mt8rHPzrH)}Z3!iL5V$C?*tWFAt$3rJ0+t*Br&b-);s>SbCK9k-!^85le?ha1$zD zJkR&|f@zL8i>5i67Imgg7O+gIp6_jtRNPubep~h<@8?Y3%u$xfYzZ_`i&p^axoOm* zdEyajUR@(0{3yB%SZKz&7cYRPygX_80 zF)y|{jpCN?5hrXkV$3*r2?NSiZ#wp|kDI`+8Cy1Oo6#ZW+)1jIpc;@xsk?j}*(xoH z!w5Wz>QFC5WSidP0)&%r7HB7&)h1r;81)d(qa-GD%I;&kgd5hey9d1Ufzut}$b&YBGc8U~xPEE+NbMm3Xdq*&c%wi6MnAs13+LF^^n**MZQH!&euSGWld1S(f3*4Li4HNEK?z(~jn|rSsY$ zjSPu8E?hXeF;%*NNGnH$6_{-Wt4Aj@Qp>2&l3PNgcqS(z$CTz*beOSx%$XzXANrw$ zt!?ZINnU{sexr=1c=ET>1jQUyLJo76D}#(-OvJ$SN^&a=bQc3CqLj5D1`FzTYhvik zJ^8&=a*RcmxX=KCBQF*C!U$%XYf=bO@wTxBXGPcq(y}Pe6 zM&Z6KuK}nBl^mA1uL}pdV2RR*8W;4eiOA>+h!S8^$8*6!Z>X>fA- zM0N7}6EnY5C#G&sRDT_`e;$0Ja%Am^wbj)>`+mRt`4I>IrKk#4L|JJ>#k{B>=*;fUpS`<{dwt7oW`3XF z{O0%ledkc)#L(95a2flL2Zn`Qcy>oeBkdN_W;KiqADh~Q=0TVJcA;lCQ9$ZV+d=em z(?*UNXtT#UJu6y}Sad}aC?MGOmgsNOH)xz^d;=2O_rP-#BD#n=X`9+? zrBGO%=#A|lZ%K{r_)6>}K7kHk34*|W4FTH&jW$66Pd5pyD}h@O6Px8z4_e5mQ?f|h z_K3*3M*j&G=0O-B6A&M)V4HO3TU5eA(?n)H@L(&je3A;A%D9%SV6lk>35Yh*KM~*s z?@GSZLt*C)>V_Xi`Nma0rg@>`(5>tc$9e7dv#bE}2yO$u-b76pIz*dg8Qq)x z=v6x)^d6(@&qq6uY{?I-C_ocAh|n75Kiz!1BR_6R!HGU#&62L6kOagSwpmRHa%ty_ z@7+?tmBI|awUj~(-y_iWf_ic}i9#B_?;z;WEwMz7;E?ui6F{#WH?su;00G+sM4n(7 zI$?JUR+SS;SQI*aCXF*iZ)8EC*N2(iH2RE^g5$3sTyN0Ml(G_?87oup4|5@cXcvff zfu@fEq{oiBfE6gSTXl6@gss+XfTLZ5gZ0(ps}mY+K9?#hklZ_ z?YfHyG$Dbs`rVp{yh0T5fM?)#EAlG35Ac1U;rNXWuTHPhju?$>)$mPZY@=Q4K!Ub& zKcG$Ws6JIFPF0K5nQFOQDpgCRN_CvJhzrT&GQt6Mq+xyBHc$iMrNo_o9up&nnrdh; zdy0KK>bgS8loJo__3y-;F?uDmF``aOLm^%ZZ2-4s{TWmAUW)MP3{J`gGksekiUJ`f zpyJpWkpFjZ2`C9bEH-{uv3F+xQm4q{<&szK;-!5~@|w^IUDD&y&|FuK@ScP z!d71lk})M1T*QMTxS0DBrUgMT@PG3oCDD*h73@#^*&}hm9bHx`LRqRkA zY(q*k#$v4uiv!Tb*YkZgrpS`O1G^R$knZ1MW`1iZ}j2rjA^!1`% zynJ(cZf*GT@Z{V3x1B1C&VP92tv@DC9vm6@>h#iI?%q$H-F@!r(2e%yCr)>!$FDr_ z1$n4qo<0Bm`Ah3pFIc~v1Pc<@?vtn$vq!`F6vxu>DOe(U5=*VxU@D?DUgvh_?pF79FT1n3 zo;8gYVyHwa#fsJsttd!76sgzW1UG)@O(%RE9@3?&ol=g1CN8N1~=nTra1>vh}+RRk?r+oGZu* zBA*K~QY3@x-?P7AMFrv#S>XmUur8}b@>|kG66an`gjm*8@ZbYGKvl*iaQ6tX=``vV zS>pQB@%ThB=2F$hcpNdRl0s>`@O--ItLlq4kO3>8+4l7<6e0~wFFE3DYK1TnBT zl0Omf3SO6dvVmfq*T{*QY3J)yeGjLaibA$phZyy0f0vaNKq}U2z*{e&0yGuO^;;X< zYjx|C@}bZ^*}&u;?dy+58*;Zq2c~^M2`LDZ8b&|eptB=7F5|<|KCqf4SVJlasOzw1 z)fA&L>3sUVUMhMzp7m}mpb$}0F_cv!=U$Ghki4cT2&!a@Baz*@NqV;cpjva9xdaUW zfwc+HJi$0r%=#7-d?#WsJ9O|&oX4cS5e9{76J~hR@L699idIE>E>Aj>$%=NSqfE*l z_Jj!RUBKQ23YrceIkw#eR)IphmG_Sevr@SXu)V8wFh4Om(aVwMD-&h8(#cNHgN>Nw zG9-etj)I_AV&z=*Jn^l*LOSC_*Q%k)v!@DWIzqSBN6yDP`LLjZwOMDcRQOV#m$KF4?ks2J>e{3mL3 za~3^Kqf6T&Pb{#Ne7T3Bj;?z#ktJpHjl}(){4$J}vuOu)O8l0E~XA_5N zG~j}f;!}D1@Qvj1mowbG~pAWXqsvb+OaT5`~^{VowvE`h6CZ5O$ z2_Y+_Qpu!{Os0h^ZkrsR|9F1auhknm@0+cyEM56U+v!hE-G4TI-PL>7nRnjN`Owk_ zW9uF}Sj;XJrO#3)FMJo9H$`-!Ya!OQVdwE@o`0`*W~OV?P20}LKHX7W{8{~D?v-mh z=f9nOWM%KU;e}^k$}hj4@A&P=_FvY^a{Kkiu1YT)eQJuI`sbdt^9x@OubFPI4Yg0d zu=C`La~)qkx^Fmn=;?ckmmx_a8mcaZ7Aee(mMgyZep{nVtFIo8+X+yvfaO zlEEm&B0fy)i+|q44IdQrLE15-`cnVEa9D~C96n4C5q$Dt6N{iQzjJQxy-7Q(A)I{Y zeCPN5zJKQiZtY=$)~!dAvILJz(U3;&cWD=3*dfIj_k2OWeHxS`== z_}y>b`hLI#NV@=~g@uLc>hDLtXx#VP&j_V9zKRS5z%Q>|`glL!^MBlW)1G_$+Ynlh zFMZerPT}Y9pPN7Y71FQ-4oFz)bCENaq&NPKrKcV?);C_gf99cI!|H1jXnFOiSllH~ z;c5K-NfY(_cp)J$Y;j)Sk%HLKpqft?SQ}R^~njwI}wdqh;G{ zwM|P^L<$1es7X;!p9Ct=H4$#wO;us5r$%aCKwScH-FO*X<3E9(!Qp~NWLyGInREs_ zUFl}X7q;@K}5D^{(UDz_)^MjsjH|AsPqS!VUTUfx7A!$YM$Pg9Ls1e2uh^s*i8l!3|ULNpn;d@`4`WbR)=EXi!nYp0n|Z`!UEWeaQ*zfh={7DT1f;| zR}(U%3H-()5y=TsO3KBcph1-hO8I3DP9Yu8vQT#fzLO0ZA0`_Sd=xR$gQ_7zzEXZF zSOPf9apEM;0E^cbfkcGVT~7O1wiwIKJ}fNh5DR0u83G!wzXFNT>^<$L`ANovT#>rL z#MA`DQsC9%_3`QgR1#^B3!&t;P|OP{-mi++zda@i>1kj@c4Yhjxh>%to~y2Tx3EDe zSqXV8&yr^HM!3kkoi7jp>wGTvl1M<(eFliUJ%BaxSrivJhv0^=o5O7i&N2%byDApl zN8_%*!=I45>tQ;=c--fN$l3tpYA1@PA+9hHlQLP0z=TmXWvEuBCF(4Ww92Px-Bd1$ zOM3f!lj@UttL=2kZ9T2Ks^MBipBzo=)f%-bEq(IjlFm*tX}w|A*?rihb%&nq)Eo*5 zK-08m%d#7b`f}QZjQJ4n5%vMArq%M1d%fAkZv@6n=Ip;XP_a8O27DLt0m^RtH|o@~ z=X=%%vboTQyu06QR=~CHl;BAm_qT4AYmgiNXgCOf8}ylTJ~N*#|AV@2HsKbuC}%Bj zv6qog8?Kv3>wLqi*kJCusy(ipT1Lw8rs-FWCIP{V7jGgWUgN8(?yBmZpUljzu!QVP)%*GC zd#~PC`+DWAonxbsvqtLp+ovvR@kWDaGg=gfO()iLjeldfRc)rAYc-d6)kvE;b4jD0 zn7ZcUI$aOH=~_tMZn`0XFJL#(Q(Io(uWBuwZ?VJ{FK}?|27YE^4SSK;*&a>K{~>7% z(_p&y8ouHy#SJx?~6*D3a2)#Ez$nuL8ft!wNTdWt>`mw(k3%1Uc5 zUJrug*;vB z<3_X=#AU`YzTu4KH$4ybGj6TuT9wpr(~Gqk`g!7!Su#~iz)#{kr0h5A6%q>f{adpY zYcrj{$bEKRMEB;K1=7=U+xBsG)d`AnIub z6^>B1Ix>$mg2<&6iK@WZm_$0VjzE6cbK{Nlv(zgG*H)uvfHZKtCcQ%&;RNRal#-H1 zZ@y7P7u1h9qKj$XqgniOo@xzs5jRvwWBfD9>S95~3k zLU*Q_YA5xvzwKbzQvjAdJp|kAwj$`oHhX$Vu;^7!>lJu~7;2(D@(S)rHd}2TUT}eg zxY1yP8SF#pK2-67O3!n# z)ov6uV2mpVwOT~t{@I((0jh*CZChT3%hYU)L0>_QrMA1bBU>G9(%BLw`vD^27koCL z2^r9AI+MCEyG$EGGQ(F=;>ly z?ZzRgk&x<P6~DslDzs2+~VK0bjP>m-aoM~qmS7;_Ce=7MM# zDeQ9{0xfwp5t5%C5K~`&j}Gt*kt)MfMM|xjQSkJTXlKekRYVy*DYs@MJm-D7SqlGl zz1Nokso$BH8PbY;J5l)}15lH12bC3p@^)j(prmT-Y;5~gWQr^(J#m~2nnXW#iDLjg zDLu$nD&|2b$^LxI^{FhSKY2`o{ZL(8&rN6G{8_^UAADe#Ns-{+N*A=& zpd}8Z2xSiN=9c8Z>`Lt-9rTw27@~?K`*g?podt!pJvsE2Y9c99R&pm*HehBJRBgA+ zpuo18S(}CuY1lxE~r2(_B#lveG$86=@HPO}sbBw=Z_7pcFFH3nW&+3=~bF$$5 zyxYkDcInAfTpzR7-+{AIWrqx3mVHiP3>tp-lChPN89sbf5Qy+?c?kh_>g?Yod`$$v zTTD+8Al=BjCqM6Z@gurphrd<8pfCP30WBtBX*zjJgPC5~K@iCBBnNY|zckjl?{$n0 zh?oQ;8sKAs>n#pMoa3^U<#j-pKr<6kRu4$4>LuK9^zUXoH}?Er5&(vJ_}M3>7B;g# zab{&tG9Nxg$IcyhXTSRQ%en8a?>+YX>8p>9pC0*V#HoDqH+lH^U zE?&8J@P_fzozl|cyfOdKSTJsuZk3kw8@KQLd~kko!I=MXVd=h6EZr;`4-VS*?kpGw zii>xRFZ2_}1LK7Lvc72CT`cOwUv@qF;l-2Y)g9MAyLR&7*vH3rmkyVTXJ-%3zVpK6 zktdJMj+VTVe)g54WAAT%wE4m2&L4Iyd!>=fqhr@z9Q&j7-ft7Xe!uzJx%<}_t`?s@ Xy6f8RPyX6}?p)>f9nXx8wk7i)M6{?M literal 0 HcmV?d00001 diff --git a/reference-tables/v2/nested-types-parquet-data/metadata/snap-2523913528636038442-1-c13af039-c01f-4a93-af89-4789ee7d5bc5.avro b/reference-tables/v2/nested-types-parquet-data/metadata/snap-2523913528636038442-1-c13af039-c01f-4a93-af89-4789ee7d5bc5.avro new file mode 100644 index 0000000000000000000000000000000000000000..8b52e4302a9f7affd2b5ed9a3f6a858b633b2b4c GIT binary patch literal 4474 zcmbVP+iM(E9JYa$h}im|MKJ1d(7c$)%wE#X)?!1GHo?RcxAmc=E@x-XW+$D?cIHgB z+cYm0Z=j+eQSd?)>XQ#X_#lWD6+~#EP{kYgP!&ZHg#HEo&Rotpv%9kwA9wc5_x;ZI zyM41-Ti>yJFW&InM|{0OZ2ZUln+k0=iBeWPqPw14*=W}W!7S~o2MkLxC} z3|}dq-0V8h#Iyk?Vj!P-rn3gW4Oa)8Wmm`4bRBg3$tBb>X#*Xuppc!TPMd~OE~@I* zR5!LooHZHUawY6zF2xpN0V3Z#N08~DTALC-2{#7TB;Y3YsLA4~`c0x&ftd$xI+RCU zfj`mGJPLebAnKx)XVT7ia}uoXI+TR($12ERhoV1yI8O;cp~nUB$fCSicXzqTI>Jsn8ea|8 zl+Zkug?OB316x7o(3zDgP>_Yt={qS2=cz%Y*y+J(kU9=5s+3tw=|NGFLa?Cyy=o0Q zN(|CORVA9mod0MtdQtcm3g1F?*FzYt9rh*@D4SSb5J9u~KZwJ(Mkm&`PHjyo&}}x1 zhIpxzw)n*=fo)@$80;zp>kT1i-}|WYbU#hnRhv-E_5rV(EF~8l-D@|)tqSj<`mq`Ty8Q~%;jgbd@)y=$i~MkJwpwu!>9% zHdYy+2=A&9oCYh|h(+sW;T|J{Cp8~4J%^ykaSGnclH152kqtv{_rVFYeVjn}jv-)2 z@gah&$jOqN3kQ-xni8xsf+G>EGn}=z7a4|mNN>VP)jTKd5J^f__Q(v$3hzmviB5_Vl5zwY`lO1l%gylMHIZzt z&&cpxAIX6T29e%Go{d3xciVhr#(!@P~qrH(D1k4rv}E%2>ytYe+=2a@gKlUw@u zi>Bx-uUuh5BF7`xQ?oj8BZJIHF9#$PE%l%cy^ml`-I<%9L9{(QkYI&n6@L_`?M^1C z>3|(zi#YrO9>(_wGO?f17H4F#Y_F4YGXj_83v5mlbRSP6Vii@;VP6DjM>^8V^z|_i z<%3Yy%yCKXWSsfYTZ;EwSf1Q@;#1?7Jqs5fc77gvd+gqCKD+%(^^RRfuhic8>eeS- ze{;u=zx{gt@b=B;{rUHgyz~XSI=3>nvh?yny87>jhyMAfczt#9Tw!tZ#H+Oz-hJqm z3rpjRcR#xL$zSSQMBjDwneE>T_=6X}y)pjY_OmN{ZajA0nKizD?b^+QJNG|6v3_LX q`2LIQSH6DZyS39#Uq5@-rH?|Xof&oe)nm!7(O^zYj`1N;w8!teS3 literal 0 HcmV?d00001 diff --git a/reference-tables/v2/nested-types-parquet-data/metadata/v2.metadata.json b/reference-tables/v2/nested-types-parquet-data/metadata/v2.metadata.json new file mode 100644 index 0000000..76b69f5 --- /dev/null +++ b/reference-tables/v2/nested-types-parquet-data/metadata/v2.metadata.json @@ -0,0 +1 @@ +{"format-version":2,"table-uuid":"cbb36820-bacd-44e6-b7d2-dabe2b0072ea","location":"file:///tmp/iceberg-verification/reference-tables/v2/nested-types-parquet-data","last-sequence-number":1,"last-updated-ms":1788557522373,"last-column-id":9,"current-schema-id":0,"schemas":[{"type":"struct","schema-id":0,"fields":[{"id":1,"name":"id","required":true,"type":"long"},{"id":2,"name":"location","required":false,"type":{"type":"struct","fields":[{"id":5,"name":"lat","required":true,"type":"double"},{"id":6,"name":"lon","required":true,"type":"double"}]}},{"id":3,"name":"tags","required":false,"type":{"type":"list","element-id":7,"element":"string","element-required":false}},{"id":4,"name":"props","required":false,"type":{"type":"map","key-id":8,"key":"string","value-id":9,"value":"int","value-required":false}}]}],"default-spec-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"last-partition-id":999,"default-sort-order-id":0,"sort-orders":[{"order-id":0,"fields":[]}],"properties":{"write.parquet.compression-codec":"zstd"},"current-snapshot-id":2523913528636038442,"refs":{"main":{"snapshot-id":2523913528636038442,"type":"branch"}},"snapshots":[{"sequence-number":1,"snapshot-id":2523913528636038442,"timestamp-ms":1788557522372,"summary":{"operation":"append","manifests-created":"1","manifests-kept":"0","manifests-replaced":"0","added-data-files":"1","added-records":"2","added-files-size":"2081","changed-partition-count":"1","total-records":"2","total-files-size":"2081","total-data-files":"1","total-delete-files":"0","total-position-deletes":"0","total-equality-deletes":"0","iceberg-version":"Apache Iceberg 1.11.0 (commit 6976e020b894f6a6777704df2b8c4458cb291ae9)"},"manifest-list":"file:/tmp/iceberg-verification/reference-tables/v2/nested-types-parquet-data/metadata/snap-2523913528636038442-1-c13af039-c01f-4a93-af89-4789ee7d5bc5.avro","schema-id":0}],"statistics":[],"partition-statistics":[],"snapshot-log":[{"timestamp-ms":1788557522372,"snapshot-id":2523913528636038442}],"metadata-log":[{"timestamp-ms":1788557522247,"metadata-file":"file:/tmp/iceberg-verification/reference-tables/v2/nested-types-parquet-data/metadata/v1.metadata.json"}]} \ No newline at end of file diff --git a/reference-tables/v2/simple-append-parquet-data/data/a.parquet b/reference-tables/v2/simple-append-parquet-data/data/a.parquet new file mode 100644 index 0000000000000000000000000000000000000000..255a1910fbafaf477d1eaecc102bdf2a2da59500 GIT binary patch literal 986 zcmaJ=&ubGw6rOA*VGp%h=nT8E;IfbqVOz4BrcFvLdZ|TJVnFa$HM6^uc1x0OcQ*ws zEjGKg9d*8O%ep&sGB3rr!g5D{dE$KecXd&^9gGM3NQSBC;3x~$GGT+K!}^zw)O0L%1F2 z3WMBuIjiiBDS9lGVp)-Ec?8|dIT54)3&9lAo7BpSwLwRNHYqCf`y6;d9UKPeLN$cw z3rxo8zCh+sL_H#x#i-3#R?Pm8Zsk{M)2NV4MM{P=!~yLh`UaEp^mUq;F$+Fs>30${ z-J{#7{C*0Qp3D%eZ#L0SXkjL%32OcXG_9U_-aVgOGK+@QJp$xQV1| z9`o0FJe=tG>N@uWceSe;lg7-Xp%$#3+ji8M3adCJvsC2P)Xa3%v8pA9ms@7bOb5-(a!(? literal 0 HcmV?d00001 diff --git a/reference-tables/v2/simple-append-parquet-data/data/b.parquet b/reference-tables/v2/simple-append-parquet-data/data/b.parquet new file mode 100644 index 0000000000000000000000000000000000000000..699b5de3bc507531797e6409c395e4ba4b29b8f6 GIT binary patch literal 1004 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 Ld+y?`X+Qo0L&`@H literal 0 HcmV?d00001 diff --git a/reference-tables/v2/simple-append-parquet-data/metadata/973f6e2b-06d8-4eb6-beb3-44cfcdee2233-m0.avro b/reference-tables/v2/simple-append-parquet-data/metadata/973f6e2b-06d8-4eb6-beb3-44cfcdee2233-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..94eda3e80b16247ad0c3ddfb773ccf90e7fa2020 GIT binary patch literal 7113 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 Date: Wed, 21 Oct 2026 16:45:13 -0400 Subject: [PATCH 2/4] adopt feedback, with minimal validation --- reference-tables/README.md | 86 +++++++++++++----- reference-tables/index.json | 8 ++ .../expected/scan.json | 19 ++++ .../expected/scan.json | 11 +++ .../partitioned-parquet-data/data/a.parquet | Bin 0 -> 1087 bytes .../partitioned-parquet-data/data/b.parquet | Bin 0 -> 979 bytes .../expected/scan.json | 19 ++++ ...a27bf6-f023-4840-838f-5513264f8deb-m0.avro | Bin 0 -> 7549 bytes ...2906e8-8a4d-496c-8461-6420f7764946-m0.avro | Bin 0 -> 7543 bytes ...-a0a27bf6-f023-4840-838f-5513264f8deb.avro | Bin 0 -> 4490 bytes ...-b82906e8-8a4d-496c-8461-6420f7764946.avro | Bin 0 -> 4581 bytes .../metadata/v3.metadata.json | 1 + .../expected/scan.json | 20 ++++ 13 files changed, 143 insertions(+), 21 deletions(-) create mode 100644 reference-tables/v1/partitioned-parquet-data/expected/scan.json create mode 100644 reference-tables/v2/nested-types-parquet-data/expected/scan.json create mode 100644 reference-tables/v2/partitioned-parquet-data/data/a.parquet create mode 100644 reference-tables/v2/partitioned-parquet-data/data/b.parquet create mode 100644 reference-tables/v2/partitioned-parquet-data/expected/scan.json create mode 100644 reference-tables/v2/partitioned-parquet-data/metadata/a0a27bf6-f023-4840-838f-5513264f8deb-m0.avro create mode 100644 reference-tables/v2/partitioned-parquet-data/metadata/b82906e8-8a4d-496c-8461-6420f7764946-m0.avro create mode 100644 reference-tables/v2/partitioned-parquet-data/metadata/snap-464121021900750417-1-a0a27bf6-f023-4840-838f-5513264f8deb.avro create mode 100644 reference-tables/v2/partitioned-parquet-data/metadata/snap-8206603330787222691-1-b82906e8-8a4d-496c-8461-6420f7764946.avro create mode 100644 reference-tables/v2/partitioned-parquet-data/metadata/v3.metadata.json create mode 100644 reference-tables/v2/simple-append-parquet-data/expected/scan.json diff --git a/reference-tables/README.md b/reference-tables/README.md index 9e68fc4..6905346 100644 --- a/reference-tables/README.md +++ b/reference-tables/README.md @@ -19,22 +19,25 @@ # Reference tables -This directory hosts whole Iceberg tables reference fixtures. -Surfaces reference a table by path and hold their own expected -values, so one table can support several surfaces without being copied. +This directory holds complete Iceberg tables: metadata, manifest lists, +manifests, and Parquet data files. Tables are grouped by format version. -Tables are grouped by format version. +## Assertion + +``` +scan(table, snapshot) == rows +``` + +For every snapshot a table's metadata lists, a full scan at that snapshot returns +exactly the rows in the table's `expected/scan.json`. Bytes are not compared. ## Size -A table should stay under 100 KB. The three here are 16 KB to 28 KB. +A table should stay under 100 KB. The four here are 16 KB to 29 KB. Size tracks commit count, and almost nothing else. A commit costs roughly 12 to 14 KB, over half of it the manifest and manifest list it produces. Rows are close to free: a Parquet file holding five rows is under 1 KB and is nearly all footer. -A deletion vector is 385 bytes. A v3 table runs slightly heavier per commit than -v1 or v2, because a v3 manifest entry carries the deletion vector fields whether -or not a vector exists. So the limit is about seven commits. A table that needs more should say why in its pull request. @@ -49,23 +52,21 @@ every `file_path`. That prefix is the sentinel root: file:///tmp/iceberg-verification/reference-tables// ``` -A consumer resolves it one of two ways. Symlinking `/tmp/iceberg-verification` at -the checkout leaves every committed byte untouched. Substituting the prefix while -loading works where symlinks do not, notably on Windows. Both are valid, because -the assertion in every surface is on decoded values rather than bytes. +A consumer resolves the prefix by symlinking `/tmp/iceberg-verification` to the +root of its checkout, which leaves every committed byte untouched: + +``` +ln -s "$(pwd)" /tmp/iceberg-verification +``` -Substitution has to match on the path, -`/tmp/iceberg-verification/reference-tables`, and not on a scheme prefix. The two -spellings are not consistent across fields: `location` carries `file:///tmp/...` -with an empty authority, while the paths Hadoop wrote -into the manifest lists and manifests carry `file:/tmp/...`. Both are valid URIs -and both name the same file. Symlinking avoids the question. +This route is verified on Linux. It is not yet verified on Windows. Starting with v4 the spec permits relative paths and makes `location` optional, -so a v4 table needs neither. +so a v4 table needs no symlink. -Data files are real Parquet and the tables are scannable, so surfaces over this -corpus are not limited to metadata decoding. +Loading a table opens only its metadata file, so a load succeeds without the +symlink. The scan in the assertion opens every manifest list, manifest and data +file, so a passing scan also shows the symlink resolves. ## What is here @@ -140,3 +141,46 @@ from the index rather than constructing it. Earlier metadata files are pruned to reduce clutter. `metadata-log` still lists them, which is correct: it is a record of past commits, not a set of live references, and nothing resolves those paths on load. + +## Expected values + +Each table directory holds `expected/scan.json`, with one entry per snapshot: + +```json +{ + "snapshots": [ + { + "snapshot-id": "7973649908883454602", + "rows": [ + {"1": "1", "2": "alpha", "3": "2026-01-01T00:00:00.000000+00:00"}, + {"1": "2", "2": "bravo", "3": "2026-01-02T00:00:00.000000+00:00"} + ] + } + ] +} +``` + +- `snapshot-id` is the snapshot scanned. +- `rows` is every row the scan returns at that snapshot. Each row is a struct of + the table schema, written in the spec's + [JSON single-value serialization](https://github.com/apache/iceberg/blob/main/format/spec.md#json-single-value-serialization): + keyed by field ID, with every nested value in the same form. + +`snapshot-id` and every `long` value are written as strings, following the +64-bit integer rule in `CONTRIBUTING.md`. This is the one departure from the +single-value serialization, which writes a `long` as a JSON number. + +## Procedure + +Each entry in `snapshots` is checked on its own. The table is scanned at that +snapshot through the implementation's scan API, with no filter and every column +of the schema projected. Reading the data files directly bypasses scan planning, +so it does not satisfy the assertion. + +Each value is decoded as the type the table schema gives its field ID, and +compared as that decoded value. The returned rows and `rows` are then compared +as multisets, because the spec fixes no row order for a scan. List elements keep +their order. Map entries are compared as a set of key and value pairs, because +a map fixes no entry order. + +Every difference is reported, naming the table, the snapshot, and the row. diff --git a/reference-tables/index.json b/reference-tables/index.json index 9254e7e..162316d 100644 --- a/reference-tables/index.json +++ b/reference-tables/index.json @@ -23,6 +23,14 @@ "data-file-format": "parquet", "metadata": "v1/partitioned-parquet-data/metadata/v3.metadata.json", "description": "Identity partition on category and a day transform on event_ts. Two snapshots, one data file per partition, three rows." + }, + { + "name": "v2/partitioned-parquet-data", + "format-version": 2, + "written-by": "Iceberg Java 1.11.0", + "data-file-format": "parquet", + "metadata": "v2/partitioned-parquet-data/metadata/v3.metadata.json", + "description": "Identity partition on category and a day transform on event_ts. Two snapshots, one data file per partition, three rows." } ] } diff --git a/reference-tables/v1/partitioned-parquet-data/expected/scan.json b/reference-tables/v1/partitioned-parquet-data/expected/scan.json new file mode 100644 index 0000000..01d6bfa --- /dev/null +++ b/reference-tables/v1/partitioned-parquet-data/expected/scan.json @@ -0,0 +1,19 @@ +{ + "snapshots": [ + { + "snapshot-id": "1602692989443393359", + "rows": [ + {"1": "1", "2": "books", "3": "2026-01-01T00:00:00.000000+00:00"}, + {"1": "2", "2": "books", "3": "2026-01-01T00:00:00.000000+00:00"} + ] + }, + { + "snapshot-id": "5699608042525680694", + "rows": [ + {"1": "1", "2": "books", "3": "2026-01-01T00:00:00.000000+00:00"}, + {"1": "2", "2": "books", "3": "2026-01-01T00:00:00.000000+00:00"}, + {"1": "3", "2": "music", "3": "2026-01-02T00:00:00.000000+00:00"} + ] + } + ] +} diff --git a/reference-tables/v2/nested-types-parquet-data/expected/scan.json b/reference-tables/v2/nested-types-parquet-data/expected/scan.json new file mode 100644 index 0000000..c1b4c98 --- /dev/null +++ b/reference-tables/v2/nested-types-parquet-data/expected/scan.json @@ -0,0 +1,11 @@ +{ + "snapshots": [ + { + "snapshot-id": "2523913528636038442", + "rows": [ + {"1": "1", "2": {"5": 40.7128, "6": -74.006}, "3": ["east", "coastal"], "4": {"keys": ["pop"], "values": [8336817]}}, + {"1": "2", "2": null, "3": null, "4": null} + ] + } + ] +} diff --git a/reference-tables/v2/partitioned-parquet-data/data/a.parquet b/reference-tables/v2/partitioned-parquet-data/data/a.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b6b28ca321b3a1a43f7447b37100cf0a74a34ed9 GIT binary patch literal 1087 zcmb7EO>5LZ7@o~$*N9bG=?ps%Fbr&{kS@)BwA*D7Mbsivir_^Nn~&)>b-$Wq3$+xa zM_v2@9>jy-U(gDAFG5v3^k6-Rc+!*LP4u1YX17v$a0tn~AJ6l=?>k8rE?hS;!Wu5( z?uS2bk}8(LRIq~3nTK$TmgC+>`ou}}a{m_^1rOw$#ufZyf9vasDweSPPcmOzoZH#m z&81PZ`&>IN@&&@c-@d$meM|_*hXfYW=+eb^ds2^l6qoV$SC4+nhsoOu?Vs(MgV5)B z+7seHiRaF!uG8DeX zo8g@>$c~rNYIjUEM6HO(RHaoN!6<1KDO50FnaE_G*t$|3b~S93pou}RLoXBvmJh?|TQmdT5RzLnIUN$POQ!=30Op8e2!SPsOtQ<#vqGPFaUN<`Kb z@-YcTP&ISPbGXg@S}t&wdBe)=B{o>N-sY^rg3#|cAv0JnH0imlGG(wOkJsIRRc>uC z;V})?v>GBGEQ9%cwd4650)Xa5%vEnSYi!f#LGlAgeAGt+p$P8)v@n3ilR6q2dJP_g zR-+x>W1F`(QRZsf@>e@NoNV~o8utUQ)zr+KIg>NB3A^LfU2UdpmEA(VFvacS%=D~l m&lX%>TFNiwxmhku7o4f0WAU|JOVKAZ*kb^HbHUEmV{ literal 0 HcmV?d00001 diff --git a/reference-tables/v2/partitioned-parquet-data/data/b.parquet b/reference-tables/v2/partitioned-parquet-data/data/b.parquet new file mode 100644 index 0000000000000000000000000000000000000000..08463b71669061ccc0f28c9d278221a0aa953c16 GIT binary patch literal 979 zcmZ`&%WD%s82>U!!z!h;k{PnHU>HcKunF0uX&%I)Cq;TFf+85Po88%DA+PRk3bh0j zJk`g4P*4#BAr}vVpjYuw)MM}@f+sy@xk!{{Yfakd> z8M?H(6qRQH2$B`KngRt!mH?oJPhqnyjtIN1g}EZ6&X%S;qYddbY^@>y12DXx~ydO2^h hf|av!Oe^JA^G0^X&{;{lC|CI>=s)lt0c`N!`9IpB)?WYs literal 0 HcmV?d00001 diff --git a/reference-tables/v2/partitioned-parquet-data/expected/scan.json b/reference-tables/v2/partitioned-parquet-data/expected/scan.json new file mode 100644 index 0000000..693ceae --- /dev/null +++ b/reference-tables/v2/partitioned-parquet-data/expected/scan.json @@ -0,0 +1,19 @@ +{ + "snapshots": [ + { + "snapshot-id": "464121021900750417", + "rows": [ + {"1": "1", "2": "books", "3": "2026-01-01T00:00:00.000000+00:00"}, + {"1": "2", "2": "books", "3": "2026-01-01T00:00:00.000000+00:00"} + ] + }, + { + "snapshot-id": "8206603330787222691", + "rows": [ + {"1": "1", "2": "books", "3": "2026-01-01T00:00:00.000000+00:00"}, + {"1": "2", "2": "books", "3": "2026-01-01T00:00:00.000000+00:00"}, + {"1": "3", "2": "music", "3": "2026-01-02T00:00:00.000000+00:00"} + ] + } + ] +} diff --git a/reference-tables/v2/partitioned-parquet-data/metadata/a0a27bf6-f023-4840-838f-5513264f8deb-m0.avro b/reference-tables/v2/partitioned-parquet-data/metadata/a0a27bf6-f023-4840-838f-5513264f8deb-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..1924ae36b4860f8a02db2d094a8f052f60f0b101 GIT binary patch literal 7549 zcmcIpPiz!b7>A-DkpKo#kzjn8h!HYtcV|lfDdC_rwv>v37fCa`oq5}i%+9Pcvn7Qz zp)n+4)ObK*Jct)-ym|5B(GX(+gTbiLlktGYlZhrKp8Vc>Gw;2b-PtbNnlvQr&inrS zzTfw~?>GBG_0^3#w?+0GspHQ!UC`o%2GPc}C=Q!;tmzv6rsO)>SXtLag@vx zKepni_-O3bNfhIHBR;P!&Mfxh`7n5j=W=&UWEm1W2x;U=7Io~qH8^L1c@~(GZ}JEj zjhobQ0+j1hl-P3|B${aYtdASfTo79f9e&`n<~KbLjxbbabj=|(-1K5?jDD_Ks;HI# zS>oHo@|*Q435EOat(l6on(GlOTC>SP#iWB{Y*D)+v_gA3Th~xBZzt$L*>KNt&S>(8$sm8Zr~$_cqAr~j*P>QANJgMA^j}%%F0wR z)#w=@4IIx&?+N#yJ}iK#0O(2`y!_GxI_Ji7X#6B%e4-i4@>j}b1r=tu7KC-I7VAi#!3J*KZ+0ohqk;MorOq?=V*B(9}_R|`am@bP#NW3pc>7G)j|jbDxJp93GG+l6=JA~@yI*4BiT%KczD4%5?WQj z92U;Pi=_LRW(-lD4fg<@F;v{BZ6>oZ+!J;zU&Qk52$FF~iKf|TtS?A(nwh;!GeaE| zxn^twlG)ohWBGOilFD|NB37Nmm~IIzOwxF8bnRgG%~9VD7aDBUgL5c7hpJvs?N}F6 zokmduHcu<4)gr=FO2HbGV{dvx!VX)9RXABxO|}!U;7(GrF|NYKC~X&yBU4>%(sdZb zNca7eT=3a|hGalT(;eFm>ab+F5!}b@(n1r@Q7;{0Q)wIpA)pmHz~y#QiEfLcKqui@ z*o)y=@X^u5pgN61QX?UiP>w};kku;bszhZkRh+`vINW#(h$RVWImk<8z>}>y-~gR_ znD3%=7lh3d#|Xnkn}`xv7?T(}hYbaX9arA{^y1ph1gsr6#NG~|dax_+1d7o<&7|FAV_PtsbTOXv_g~A8TpNiR3_!g*qS|mD|vhM|=j0BcP zYuJkl-VjKc-zrhNGB7A&X8Nl~EAmB!$`=`c`ii3!R8~FZMTsecl0vt=vGo_eqAX=u zP6kaPc?;sm3Dr&#SbC7JgqQ~*e!KHA-lZ6p{$!a1`=Ptqdt1FsAY=u3+P9YVoT9u`LFyV@-~0xx472~xx0FoPv+X4L3ViToWh_O4e=A*3v_yfr zRHHJ7QIP|)D|M4}&|MB-h^nDBIT%3M^~s^LOcY5~WRJ8{g!h=40WDLM88r7=Gi%Xr zA`KI0k=$)g5?_OhIP zP?Ano?HpC|$na&`=hTg~+*QjM#VunhEz^7Wsu&UBoAL$#KB&5*Abd>((1iezZsfg} z*BS+W#B}uBh`vqE?(}eNBp<+tN#1v+Pe_BAinb9WGCaw_obHgu+842HbU;KI9UtPW z1lL)Zh&Tu3D9dY*f zV~p~1K#2W_u5tA4aX^;BPbxs4C}@T@VYetyQHmA#0YsHu>J}6$miVs&iV=V;V+3CG zZ%;Pm2j~L6;lVfUhfd!Je_q=A{-Yn={oqR9uYGp)mB0V`XZfAq9y{_Uxb^VV&0789L_Yd{&e0}NC(%VZ*Td(gv<6PX(|Hk;x#?4#qAKr29-Dgf* S-TH~XY1ghTUvJyolEZ(UGRV^a literal 0 HcmV?d00001 diff --git a/reference-tables/v2/partitioned-parquet-data/metadata/b82906e8-8a4d-496c-8461-6420f7764946-m0.avro b/reference-tables/v2/partitioned-parquet-data/metadata/b82906e8-8a4d-496c-8461-6420f7764946-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..865d0c31b1d48a7c3ba4aa098dcccc59d209d24e GIT binary patch literal 7543 zcmcIpO^6&t6izl#6qYC$bdd#%hNy`>ZvSldXCNqOmh5J;1``h&LZ_yuX17gG_oTaL z!zOGHf`^<0(GWp$GvY0RdhjF?l>BHUArbK+1VlY~Q#^>Ts=BMHd!}b6vnwot%yhk< z?|tvp`+8ofy}9|(;n-awO?-LFX)Rf45v{7lNz`@|P1pE06|b&U4P9$^#IMI%^~hG*pzZr`grRa&*XpE!+kT=|>F25?Q?&%h zlE5WS&~Da9B;5CJ%~q^6JfAr6x=oHNChIuC4z(*nD+M{SGQc>IQn1`GNC0+mUgOBt zLl@}v68|zrVFM*g1W`{_WbC1Cb!6^og|U}-VSwtyCkcslWbJ|cu3Hq`b3p`E3?a5Rlmo@Ls zI;NeSHzwlZwe`bA&&B>>K60Rz1bVesM;MUz(bcRb2eZ5pr2$IXEuZMTC>YgnOzH>< zM(H9DLUD_@g@Rd1!T3OM+_0@Ok+o{(b%AvtB_e+~Mjm%Ui(N3?*>v71;&_2mTLF>^ zc=#;H92^c4>@$X=7#^qQv&U7Qsr+?AzugQR`na^3%?1HFjv`hQFCk56J@I*Q3LZDj zNoUzKr?PBveR`b8x~4swt>!SqCP$e!C7= zDx!A{!a*G^;Dz4UsX@|H4lC*g0%(~O!0uD2H`gq62(HOB%Nhtkh7>an9OP4>oN1;y z`~w_pI9T=+fMrh)z&5+133{>3o*ob^x}DH|1zsVBni!9~gL{(AR)>clo+Ob|1I%IJ zEWJqjpJ~SKOm`WhbiJTNrLH?(7_~)2S?WqcHis`+-Rl6Ry{a}vU8~Bhqaz{vDIl5 zw_x*h!bT$|Or?~pK?U|^Hze$^O<0A~Mb&0I5ex1RHJjiXY>d)&`8cxG)h1hqL5%d@ zPw54p4`@OLv^U$a-LMHumKVc)%q}f7`!e;?BQ}-BaTozwQ60G4O)AlCQ55J9JPUg< zJPSU0x)@idaYPys(mPY(EOR0&4h1>%BMx5lPUjRAkIl(d9;E3 zxa19il=+;fplbVZRjP8O zmnm6_yuOw8b8w3CQU$4NaDDR|)SP7hp>HXfs%P6t`W5)#%Stsvf`2PrP_#sW`c$Jb zhiQ=mvnzFzbkJW8V2G-rE;(30*^SAew@egCnX*T^DZ=~A%z~CF%M6-(y_t3BH<5-7 zv`Fu^E>i72v#^0kC0W=|y7gzVrmzxuS-VAE1r2qdIaw2>Iaz>RmQ&3OFnd|fKB!11 zYj%z*d1Uyq?F;HgTJEc5tn!wzm6jPid{vBy@NIbm03TG{Q4+o;0_a14NH_A{D{74r zKVmxiUQFL6=XZLzHqsAZ#H8;#vnQm%Tt&Nx5gDH3U_p0CW8I6`H98=ojE)cSHG=Cc zOhlaHa+DP{NJ*gS9l~ps*CNuYdI@)x9c9J~E7$)eKVap6zfrL0FXJ#~=I>-+bH?hd)N>csE(-e3Rz{LWLhWf(r5zkXx(^IKzA zD?i+vUpO#VnftM_zjAH<`uu`^^~TNHV{-@gSLVLkzi_8AJAZAqa(B$WHMURRb#?32 zOP78d`swYDKH2f*&T~7?{c}v4ePq`+Py8~nedLcPzrOPRkvBg4;6@U>@YrqZ%+nK> zM$Qj^G5#Prd+vdKZ;cG=!~XE_u}homEn6?Y_}Qlq8~WcDNAGQW_uJ>Le|6=`X6x+c Hj_Cgb*pSTF literal 0 HcmV?d00001 diff --git a/reference-tables/v2/partitioned-parquet-data/metadata/snap-464121021900750417-1-a0a27bf6-f023-4840-838f-5513264f8deb.avro b/reference-tables/v2/partitioned-parquet-data/metadata/snap-464121021900750417-1-a0a27bf6-f023-4840-838f-5513264f8deb.avro new file mode 100644 index 0000000000000000000000000000000000000000..d7b92f3a9e7eab85419210d566a8ec60e08ae284 GIT binary patch literal 4490 zcmbVPTWB0r7*1jz1T`px5+vwxY^g#bGr4DLz-k%{O>A{zNodP@cIIq$%v{!)Gg&7g zB7JBZUj#wvLqVh%5y6M*LlLP^?Tb*M2vQJ?)~X011WF$S!E5QGvKjP9#7+_DpAm{5D*j;LN)^#HQJF54vf zw8b~?R!NZnc9_wUOvpE_p&FN{qEHIH11o;n#i@j(FP5C3S;1w9<2y8AQAg@nXr=fC z-3_ubb%^Q$NFu!uuw#-&>Zk;XUN?PADm`kDrl^OLlTCnS@#9i3TI0?{HPbBKdZ9hH zS{G|d=U4)ItdRnmT=ZOlmY`gLOk6oxOn{cKOn^*OIbXc<>3E2{^n~IBmZgxflXNZg zJQ$L{NweEz*74`H!_ga4Cs|FWW+I&f&~$v#q!gIp7G2ju&>;`vp}6P;WLlK~bi#Oi zm1$Fw=CLfm;{iRA?mR4V_2IC`sdVr}!(=Ac5l z%_gHESt^s8{9^gQwjr4q^ePDIWg%zN`>67CUqxZTMi|n4!0RSU$-|EBg_UTllJ@|6 z4-_r8*pyP6A~)%a41n$$NbeY~ByWYo(n?}1&OF9@hxma&r<*ml9Fcr#%1a#mL}EjmJ#OAt;791#e}^Y-Etgexb4X-~`$PClI!y z4cJa>h#(u|WGv^xfMk%S1j~0|NCfLRXKidn+F@?fns8Eegp)QhCGAk=+b}7DZ?uLl zZBH`z+<{qdOZ37D=Sjn+&uhPD=ZPpc2k9(dqB{mXBc zZXdn1|LL#$wznU8;=QZgC&S*ifBpb}awK@Xe|%>n+*vN?cVGDDi+8tQx%T&)_Z+;q zaOkI-v$-Gsy8LAS^v7=DqJd!%KH>UO#{J)|Ini J_Zzhl{|DTH{kH%B literal 0 HcmV?d00001 diff --git a/reference-tables/v2/partitioned-parquet-data/metadata/snap-8206603330787222691-1-b82906e8-8a4d-496c-8461-6420f7764946.avro b/reference-tables/v2/partitioned-parquet-data/metadata/snap-8206603330787222691-1-b82906e8-8a4d-496c-8461-6420f7764946.avro new file mode 100644 index 0000000000000000000000000000000000000000..2bde251c342eb84beba84317a82bebb6411338b5 GIT binary patch literal 4581 zcmbVPTWB0r7`8E~m}<15eTXqRJ4ORFsWY2oce48eJC}wB@gvM5EPLXsVJhY+G@oX!3(rB(iic97pPQgk$7fi=bSUUJA3hQ zXU}}!f4=|r&DO;9s+M(dM%OkNVhW|<4;_0rGoL|Rl+%%@=@Qq?sW5H*PD52rBEyU) zWd-5KNf{}U!9^$cl$^*wGlfqSfDBWY)hYa2(nO3irisv$H5EKLF$!|BnF5c-fXz-& zdt`}=_VfH)cPX}l)F~ES(HQJ)nh6zP1qcjz76DlWiM)vnH{1fSzyN2UZpv0XaU+Ao zIA$h+%c@DDj^RJS=q8XgkOWK(spo-vjM0eiV<6FP*)VaX+YM3?b);~z0x&DSQwmab z+)Z}PREoD$XkE*d#Ol%6k-$1uP62@}dZIv8P@;e@E}JY@fU2;r0KTYfzDVa=@Oj%uV(EyF3HB+M!% z7qw#Y4vGj9f`Z#$k0)?P(Lw5}$~m)`@Q=Hr7uatB`z?^vbO7~!CW^6@k>p|uZ4 z-S{avqKbMxV{cXb9&q0S2}Mg(q!b45P42V}fT&4GY{6lZ$e1< zUP4;VmDEBRtHGsEzP=(puRrnOV+*C!uTXHBH?pVe#wUB5wM3MHCdpmdbu+jtyexr0 zJIP6i#}WAG<0-xpH$#FKXtIeub;A>V7zaWbXnI|F>LzgIDTmL~F+k>wLl$_P=q<)#x*4F5j_qa_01BiR0Vbx&|k| z3hZip`J=$QjdwjQpV&AaI2w4dAw1Oj@3kZH^5Q>lpE4GIzI9DY&*{xS3adMoMqk~2 ze1H4BZ{0H-oO!8im*8_}J3pQtORj%v;lKl5AARY~p~bV$E>5p{ zy!p3<;m;@5zkcoTPvVseYY(8Ue?1uP$en-x(%So^CFQZ%iCj8!rS-NmFRTf61um|f zyj$G_KWI2V(lW8RCHh_a;uj+u4*vPx@b!h2);|tDw0HjD<@V+8x7@V*>ePuRjBn2E PJobCn_4#8fCAa?%uu30Q literal 0 HcmV?d00001 diff --git a/reference-tables/v2/partitioned-parquet-data/metadata/v3.metadata.json b/reference-tables/v2/partitioned-parquet-data/metadata/v3.metadata.json new file mode 100644 index 0000000..440b54f --- /dev/null +++ b/reference-tables/v2/partitioned-parquet-data/metadata/v3.metadata.json @@ -0,0 +1 @@ +{"format-version":2,"table-uuid":"89a49230-98bc-4b4f-b62c-9aa60d32713b","location":"file:///tmp/iceberg-verification/reference-tables/v2/partitioned-parquet-data","last-sequence-number":2,"last-updated-ms":1790699028599,"last-column-id":3,"current-schema-id":0,"schemas":[{"type":"struct","schema-id":0,"fields":[{"id":1,"name":"id","required":true,"type":"long"},{"id":2,"name":"category","required":true,"type":"string"},{"id":3,"name":"event_ts","required":true,"type":"timestamptz"}]}],"default-spec-id":0,"partition-specs":[{"spec-id":0,"fields":[{"name":"category","transform":"identity","source-id":2,"field-id":1000},{"name":"event_day","transform":"day","source-id":3,"field-id":1001}]}],"last-partition-id":1001,"default-sort-order-id":0,"sort-orders":[{"order-id":0,"fields":[]}],"properties":{"write.parquet.compression-codec":"zstd"},"current-snapshot-id":8206603330787222691,"refs":{"main":{"snapshot-id":8206603330787222691,"type":"branch"}},"snapshots":[{"sequence-number":1,"snapshot-id":464121021900750417,"timestamp-ms":1790699028377,"summary":{"operation":"append","manifests-created":"1","manifests-kept":"0","manifests-replaced":"0","added-data-files":"1","added-records":"2","added-files-size":"1087","changed-partition-count":"1","total-records":"2","total-files-size":"1087","total-data-files":"1","total-delete-files":"0","total-position-deletes":"0","total-equality-deletes":"0","iceberg-version":"Apache Iceberg 1.11.0 (commit 6976e020b894f6a6777704df2b8c4458cb291ae9)"},"manifest-list":"file:/tmp/iceberg-verification/reference-tables/v2/partitioned-parquet-data/metadata/snap-464121021900750417-1-a0a27bf6-f023-4840-838f-5513264f8deb.avro","schema-id":0},{"sequence-number":2,"snapshot-id":8206603330787222691,"parent-snapshot-id":464121021900750417,"timestamp-ms":1790699028599,"summary":{"operation":"append","manifests-created":"1","manifests-kept":"1","manifests-replaced":"0","added-data-files":"1","added-records":"1","added-files-size":"979","changed-partition-count":"1","total-records":"3","total-files-size":"2066","total-data-files":"2","total-delete-files":"0","total-position-deletes":"0","total-equality-deletes":"0","iceberg-version":"Apache Iceberg 1.11.0 (commit 6976e020b894f6a6777704df2b8c4458cb291ae9)"},"manifest-list":"file:/tmp/iceberg-verification/reference-tables/v2/partitioned-parquet-data/metadata/snap-8206603330787222691-1-b82906e8-8a4d-496c-8461-6420f7764946.avro","schema-id":0}],"statistics":[],"partition-statistics":[],"snapshot-log":[{"timestamp-ms":1790699028377,"snapshot-id":464121021900750417},{"timestamp-ms":1790699028599,"snapshot-id":8206603330787222691}],"metadata-log":[{"timestamp-ms":1790699027227,"metadata-file":"file:/tmp/iceberg-verification/reference-tables/v2/partitioned-parquet-data/metadata/v1.metadata.json"},{"timestamp-ms":1790699028392,"metadata-file":"file:/tmp/iceberg-verification/reference-tables/v2/partitioned-parquet-data/metadata/v2.metadata.json"}]} \ No newline at end of file diff --git a/reference-tables/v2/simple-append-parquet-data/expected/scan.json b/reference-tables/v2/simple-append-parquet-data/expected/scan.json new file mode 100644 index 0000000..e286c16 --- /dev/null +++ b/reference-tables/v2/simple-append-parquet-data/expected/scan.json @@ -0,0 +1,20 @@ +{ + "snapshots": [ + { + "snapshot-id": "7973649908883454602", + "rows": [ + {"1": "1", "2": "alpha", "3": "2026-01-01T00:00:00.000000+00:00"}, + {"1": "2", "2": "bravo", "3": "2026-01-02T00:00:00.000000+00:00"} + ] + }, + { + "snapshot-id": "8192414647100221600", + "rows": [ + {"1": "1", "2": "alpha", "3": "2026-01-01T00:00:00.000000+00:00"}, + {"1": "2", "2": "bravo", "3": "2026-01-02T00:00:00.000000+00:00"}, + {"1": "3", "2": "charlie", "3": "2026-01-03T00:00:00.000000+00:00"}, + {"1": "4", "2": null, "3": "2026-01-04T00:00:00.000000+00:00"} + ] + } + ] +} From 76c0e9c8e182d38c178953f374ed12e1dbb8bcd0 Mon Sep 17 00:00:00 2001 From: "Sung Yun (CODE SIGNING KEY)" Date: Wed, 21 Oct 2026 20:55:49 +0000 Subject: [PATCH 3/4] Exclude Avro fixtures from RAT --- dev/.rat-excludes | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dev/.rat-excludes b/dev/.rat-excludes index 5830bfb..723fd3d 100644 --- a/dev/.rat-excludes +++ b/dev/.rat-excludes @@ -26,3 +26,7 @@ node_modules/** # Apache header; they are covered by the repository LICENSE and NOTICE at the root. **/*.json **/*.jsonl + +# Avro container files embed their schema as JSON text in the file header, so RAT +# reads them as text. They are binary fixture data and cannot carry a header either. +**/*.avro From c2f639c7e97d09bed5fa3b899e0b55a5744ad6c4 Mon Sep 17 00:00:00 2001 From: "Sung Yun (CODE SIGNING KEY)" Date: Wed, 21 Oct 2026 17:44:06 -0400 Subject: [PATCH 4/4] added empty list and map case --- reference-tables/index.json | 2 +- .../nested-types-parquet-data/data/a.parquet | Bin 2081 -> 2167 bytes .../expected/scan.json | 6 ++++-- ...68469-d7a9-4d61-9da5-c65b78dd5407-m0.avro} | Bin 7439 -> 7463 bytes ...35668469-d7a9-4d61-9da5-c65b78dd5407.avro} | Bin 4474 -> 4477 bytes .../metadata/v2.metadata.json | 2 +- 6 files changed, 6 insertions(+), 4 deletions(-) rename reference-tables/v2/nested-types-parquet-data/metadata/{c13af039-c01f-4a93-af89-4789ee7d5bc5-m0.avro => 35668469-d7a9-4d61-9da5-c65b78dd5407-m0.avro} (96%) rename reference-tables/v2/nested-types-parquet-data/metadata/{snap-2523913528636038442-1-c13af039-c01f-4a93-af89-4789ee7d5bc5.avro => snap-9153710085634724558-1-35668469-d7a9-4d61-9da5-c65b78dd5407.avro} (94%) diff --git a/reference-tables/index.json b/reference-tables/index.json index 162316d..c41fb8c 100644 --- a/reference-tables/index.json +++ b/reference-tables/index.json @@ -14,7 +14,7 @@ "written-by": "Iceberg Java 1.11.0", "data-file-format": "parquet", "metadata": "v2/nested-types-parquet-data/metadata/v2.metadata.json", - "description": "Struct, list and map, so every nested id space appears. One snapshot, two rows, one of them entirely null." + "description": "Struct, list and map, so every nested id space appears. One snapshot, four rows: populated containers, null containers, empty containers, and a null list element and null map value." }, { "name": "v1/partitioned-parquet-data", diff --git a/reference-tables/v2/nested-types-parquet-data/data/a.parquet b/reference-tables/v2/nested-types-parquet-data/data/a.parquet index 463f2e1b2bb2824b1a1caf9874c29cb8228dedb8..4ee9317759cd4a3cb16c39b10f196250b142ce0a 100644 GIT binary patch delta 1112 zcmZ`(Z%9*76uYOF`dW9iDj)Y|^O{}OyEc!#WxeQig8@m1xxhWw= zW!MS|B$BKT^{M($P}BsAJ|u-iMg)-sSy5o6Muc?lo6ALXKb&{Yz32Sy@BYr=bR){7d_Lc%I<;f`RgrgL$@SYu^Qz{* zSJ<)Axm{nM4bDQt8#~JlaV>^v;D$GCANp(_kOBWeDdeYt-9Df3s2HL5*I)lRXNHzpw$NE!O`-M#3iKW&t@Wam!3uc?mf~1)GoBrH&?b6D(tpSvw`!Qp(lX7<0->&~?jhQ02NxZ;LY1in z2gE8{YKb;PqK&q_^@n!u_lNe?E8H{bCnWk%(uc5q0z1uqn}!qTyxMR+j zlNKKjbxaNfqTP0I(uX8D#WH^bq1CiO@3(l&;Xr9iIe9TL=_rf&0x?!%>SQiN$}R-A Z!AhVtFIo8+X+yvfaO zlEEm&B0fy)i+|q44IdQrLE15-`cnVEa9D~C96n4C5q$Dt6N{iQzjJQxy-7Q(A)I{Y zeCPN5zJKQiZtY=$)~!dAvILJz(U3;&cWD=3*dfIj_k2OWeHxS`== z_}y>b`hLI#NV@=~g@uLc>hDLtXx#VP&j_V9zKRS5z%Q>|`glL!^MBlW)1G_$+Ynlh zFMZerPT}Y9pPN7Y71FQ-4oFz)bCENaq&NPKrKcV?);C_gf99cI!|H1jXnFOiSllH~ z;c5K-NfY(_cp)J$Y;j)Sk%HLKpqft?SQ}R^~njwI}wdqh;G{ zwM|P^L<$1es7X;!p9Ct=H4$#wO;us5r$%aCKwScH-FO*X<3E9(!Qp~NWLyGInREs_ zUFl}X7q;@K}5D^{(UDz_)^MjsjH|AsPqS!VUTUfx7A!$YM$Pg9Ls1e2uh^s*i8l!3|ULNpn;d@`4`WbR)=EXi!nYp0n|Z`!UEWeaQ*zfh={7DT1f;| zR}(U%3H-()5y=TsO3KBcph1-hO8I3DP9Yu8vQT#fzLO0ZA0`_Sd=xR$gQ_7zzEXZF zSOPf9apEM;0E^cbfkcGVT~7O1wiwIKJ}fNh5DR0u83G!wzXFNT>^<$L`ANovT#>rL z#MA`DQsC9%_3`QgR1#^B3!&t;P|OP{-mi++zda@i>1kj@c4Yhjxh>%to~y2Tx3EDe zSqXV8&yr^HM!3kkoi7jp>wGTvl1M<(eFliUJ%BaxSrivJhv0^=o5O7i&N2%byDApl zN8_%*!=I45>tQ;=c--fN$l3tpYA1@PA+9hHlQLP0z=TmXWvEuBCF(4Ww92Px-Bd1$ zOM3f!lj@UttL=2kZ9T2Ks^MBipBzo=)f%-bEq(IjlFm*tX}w|A*?rihb%&nq)Eo*5 zK-08m%d#7b`f}QZjQJ4n5%vMArq%M1d%fAkZv@6n=Ip;XP_a8O27DLt0m^RtH|o@~ z=X=%%vboTQyu06QR=~CHl;BAm_qT4AYmgiNXgCOf8}ylTJ~N*#|AV@2HsKbuC}%Bj zv6qog8?Kv3>wLqi*kJCusy(ipT1Lw8rsHHSuXn z=1-4`nKWxrbWr4ks5Q|OB0?f&MJ<{=DPqzJel?-53zBLW`y3k=t}9cNc`q`vVn)%9 zSrV1ABz`V4;F3ue(Mn24N`CYp>0u(Hp~Mb}3JHlB5eg#GlNnCrDjZN1cwXCd*X-8O zM)!oP$G!J?@;b5~;EH&_)%Wjq$lsR@>H!B|yQc-QFXDg0E_Lt-ql$zC1G+B(S^Rld delta 230 zcmZ2()o-=INT&Xx>&9=Z+zuZXa}p2R_un~;=?hbG(ymXb*B6`rf46m~p@Bh8vd`%= zo?9>JpVYl@-p9|^OV{hVuD9+fpVK~mIw#MZzpU@&>#gf`*4yu@uBXo_Pu*+!#+S}} z>*{&>UesNws diff --git a/reference-tables/v2/nested-types-parquet-data/metadata/snap-2523913528636038442-1-c13af039-c01f-4a93-af89-4789ee7d5bc5.avro b/reference-tables/v2/nested-types-parquet-data/metadata/snap-9153710085634724558-1-35668469-d7a9-4d61-9da5-c65b78dd5407.avro similarity index 94% rename from reference-tables/v2/nested-types-parquet-data/metadata/snap-2523913528636038442-1-c13af039-c01f-4a93-af89-4789ee7d5bc5.avro rename to reference-tables/v2/nested-types-parquet-data/metadata/snap-9153710085634724558-1-35668469-d7a9-4d61-9da5-c65b78dd5407.avro index 8b52e4302a9f7affd2b5ed9a3f6a858b633b2b4c..1b9e6c01927e6c3ea3e41b73dcd53aa74b4a54e4 100644 GIT binary patch delta 214 zcmeyR^jB$v8i%l@p{cRCp@D&gshP2fxsi#fsl{eXjtLy~!bywP9lr19wxD)HKZnqA z6{bZ@vL`n39x@PM4S3v@%E#U@w&$Ee~WSzR;9tGK^@D>YO!ARDz-L#k_l- z<{OV5^Dv+BB2YOu)2Yk%i%#M7*)43Gd)Ya!>$(}Q_2~~3@aSW9ld^crFTkafW5w}* z)TofoXd-mj<>ad|tCaFZ#ojGX6lX*Qfvftc%Tme%?ph^nY(q HJh~$RluB8S delta 211 zcmeyX^h;@j8i%lvsgbdzp|Povg_*ILfw6^&iP2_DjtLy~rqazmYOGPaQ||J+F3`@q z#WaUW_QYP^Lk0qD0jHDZ9_I9$GK2BP<3}}a(>}EqyDW0=IjC^P(bv(}v)7@-|NR>0 zHycbZ`Kwi#cvMGCNa~oU+SlyK;UQt;vE!w|?9^noGfmT;m?SRiy!?=3;j~s?{)hH8 zd6p^HCZ7M~z-sL+W0d9Y8fv{D>-4edSJJcNE>(yw-Lh|g{`u?A3vXsF4ci~^iW}X9 E03)PXdjJ3c diff --git a/reference-tables/v2/nested-types-parquet-data/metadata/v2.metadata.json b/reference-tables/v2/nested-types-parquet-data/metadata/v2.metadata.json index 76b69f5..77611c7 100644 --- a/reference-tables/v2/nested-types-parquet-data/metadata/v2.metadata.json +++ b/reference-tables/v2/nested-types-parquet-data/metadata/v2.metadata.json @@ -1 +1 @@ -{"format-version":2,"table-uuid":"cbb36820-bacd-44e6-b7d2-dabe2b0072ea","location":"file:///tmp/iceberg-verification/reference-tables/v2/nested-types-parquet-data","last-sequence-number":1,"last-updated-ms":1788557522373,"last-column-id":9,"current-schema-id":0,"schemas":[{"type":"struct","schema-id":0,"fields":[{"id":1,"name":"id","required":true,"type":"long"},{"id":2,"name":"location","required":false,"type":{"type":"struct","fields":[{"id":5,"name":"lat","required":true,"type":"double"},{"id":6,"name":"lon","required":true,"type":"double"}]}},{"id":3,"name":"tags","required":false,"type":{"type":"list","element-id":7,"element":"string","element-required":false}},{"id":4,"name":"props","required":false,"type":{"type":"map","key-id":8,"key":"string","value-id":9,"value":"int","value-required":false}}]}],"default-spec-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"last-partition-id":999,"default-sort-order-id":0,"sort-orders":[{"order-id":0,"fields":[]}],"properties":{"write.parquet.compression-codec":"zstd"},"current-snapshot-id":2523913528636038442,"refs":{"main":{"snapshot-id":2523913528636038442,"type":"branch"}},"snapshots":[{"sequence-number":1,"snapshot-id":2523913528636038442,"timestamp-ms":1788557522372,"summary":{"operation":"append","manifests-created":"1","manifests-kept":"0","manifests-replaced":"0","added-data-files":"1","added-records":"2","added-files-size":"2081","changed-partition-count":"1","total-records":"2","total-files-size":"2081","total-data-files":"1","total-delete-files":"0","total-position-deletes":"0","total-equality-deletes":"0","iceberg-version":"Apache Iceberg 1.11.0 (commit 6976e020b894f6a6777704df2b8c4458cb291ae9)"},"manifest-list":"file:/tmp/iceberg-verification/reference-tables/v2/nested-types-parquet-data/metadata/snap-2523913528636038442-1-c13af039-c01f-4a93-af89-4789ee7d5bc5.avro","schema-id":0}],"statistics":[],"partition-statistics":[],"snapshot-log":[{"timestamp-ms":1788557522372,"snapshot-id":2523913528636038442}],"metadata-log":[{"timestamp-ms":1788557522247,"metadata-file":"file:/tmp/iceberg-verification/reference-tables/v2/nested-types-parquet-data/metadata/v1.metadata.json"}]} \ No newline at end of file +{"format-version":2,"table-uuid":"be762ba3-cef6-4d04-81b4-033c7db9b38e","location":"file:///tmp/iceberg-verification/reference-tables/v2/nested-types-parquet-data","last-sequence-number":1,"last-updated-ms":1792616362118,"last-column-id":9,"current-schema-id":0,"schemas":[{"type":"struct","schema-id":0,"fields":[{"id":1,"name":"id","required":true,"type":"long"},{"id":2,"name":"location","required":false,"type":{"type":"struct","fields":[{"id":5,"name":"lat","required":true,"type":"double"},{"id":6,"name":"lon","required":true,"type":"double"}]}},{"id":3,"name":"tags","required":false,"type":{"type":"list","element-id":7,"element":"string","element-required":false}},{"id":4,"name":"props","required":false,"type":{"type":"map","key-id":8,"key":"string","value-id":9,"value":"int","value-required":false}}]}],"default-spec-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"last-partition-id":999,"default-sort-order-id":0,"sort-orders":[{"order-id":0,"fields":[]}],"properties":{"write.parquet.compression-codec":"zstd"},"current-snapshot-id":9153710085634724558,"refs":{"main":{"snapshot-id":9153710085634724558,"type":"branch"}},"snapshots":[{"sequence-number":1,"snapshot-id":9153710085634724558,"timestamp-ms":1792616362084,"summary":{"operation":"append","manifests-created":"1","manifests-kept":"0","manifests-replaced":"0","added-data-files":"1","added-records":"4","added-files-size":"2167","changed-partition-count":"1","total-records":"4","total-files-size":"2167","total-data-files":"1","total-delete-files":"0","total-position-deletes":"0","total-equality-deletes":"0","iceberg-version":"Apache Iceberg 1.11.0 (commit 6976e020b894f6a6777704df2b8c4458cb291ae9)"},"manifest-list":"file:/tmp/iceberg-verification/reference-tables/v2/nested-types-parquet-data/metadata/snap-9153710085634724558-1-35668469-d7a9-4d61-9da5-c65b78dd5407.avro","schema-id":0}],"statistics":[],"partition-statistics":[],"snapshot-log":[{"timestamp-ms":1792616362084,"snapshot-id":9153710085634724558}],"metadata-log":[{"timestamp-ms":1792616360584,"metadata-file":"file:/tmp/iceberg-verification/reference-tables/v2/nested-types-parquet-data/metadata/v1.metadata.json"}]} \ No newline at end of file