<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Parquet on Ziva</title>
		<link>https://zivali.github.io/tags/parquet/</link>
		<description>Recent content in Parquet on Ziva</description>
		<generator>Hugo</generator>
		<language>en</language>
		
		
		
			<copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright>
		
		
			<lastBuildDate>Sun, 21 Jun 2026 03:51:00 +0000</lastBuildDate>
		
			<atom:link href="https://zivali.github.io/tags/parquet/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>How Trino Pushes Predicates Into Iceberg</title>
				<link>https://zivali.github.io/posts/how-trino-pushes-predicates-into-iceberg/</link>
				<pubDate>Sun, 21 Jun 2026 03:50:00 +0000</pubDate>
				<guid>https://zivali.github.io/posts/how-trino-pushes-predicates-into-iceberg/</guid>
				<description>&lt;link rel=&#34;stylesheet&#34; href=&#34;https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.css&#34; integrity=&#34;sha384-bYdxxUwYipFNohQlHt0bjN/LCpueqWz13HufFEV1SUatKs1cm4L6fFgCi1jT643X&#34; crossorigin=&#34;anonymous&#34;&gt;&#xA;&lt;h1 id=&#34;what-predicate-pushdown-means-in-trino&#34; class=&#34;headerLink&#34;&gt;&#xA;    &lt;a href=&#34;#what-predicate-pushdown-means-in-trino&#34; class=&#34;header-mark&#34;&gt;&lt;/a&gt;What Predicate Pushdown Means In Trino&lt;/h1&gt;&lt;p&gt;Predicate pushdown means Trino tries to move part of a &lt;code&gt;WHERE&lt;/code&gt; filter closer to&#xA;the data source. Instead of reading all rows first and filtering only inside the&#xA;engine, Trino asks the connector whether it can use the predicate while planning&#xA;or reading the table.&lt;/p&gt;&#xA;&lt;p&gt;That can reduce work, but it is not one yes/no switch.&lt;/p&gt;&#xA;&lt;p&gt;The useful mental model is:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block highlight is-open  tw-group tw-my-2&#34;&gt;&#xA;  &lt;div class=&#34;&#xA;    &#xA;    tw-flex&#xA;    tw-flex-row&#xA;    tw-flex-1&#xA;    tw-justify-between&#xA;    tw-w-full tw-bg-bgColor-secondary&#xA;    &#34;&gt;&#xA;    &lt;button&#xA;      class=&#34;&#xA;        code-block-button&#xA;        tw-mx-2&#xA;        tw-flex&#xA;        tw-flex-row&#xA;        tw-flex-1&#34;&#xA;      title=&#34;Toggle code block&#34;&#xA;      aria-label=&#34;Toggle code block&#34;&gt;&#xA;          &lt;div class=&#34;group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1&#34;&gt;&lt;svg class=&#34;icon&#34;&#xA;    xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 320 512&#34;&gt;&lt;!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --&gt;&lt;path d=&#34;M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z&#34;/&gt;&lt;/svg&gt;&lt;/div&gt;&#xA;      &lt;/button&gt;&#xA;&#xA;   &lt;div class=&#34;tw-flex&#34;&gt;&#xA;      &lt;button&#xA;        class=&#34;&#xA;          copy-code-button&#xA;          tw-select-none&#xA;          tw-mx-2&#xA;          tw-hidden&#xA;          group-[.is-open]:tw-block&#xA;          hover:tw-text-fgColor-link&#xA;          print:!tw-hidden&#34;&#xA;        title=&#34;Copy code&#34;&gt;&#xA;          &lt;span class=&#34;copy-icon tw-block&#34;&gt;&lt;svg class=&#34;icon&#34;&#xA;    xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 448 512&#34;&gt;&lt;!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --&gt;&lt;path d=&#34;M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z&#34;/&gt;&lt;/svg&gt;&lt;/span&gt;&#xA;          &lt;span class=&#34;check-icon tw-hidden&#34;&gt;&lt;svg class=&#34;icon&#34;&#xA;    xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 512 512&#34;&gt;&lt;!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --&gt;&lt;path d=&#34;M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z&#34;/&gt;&lt;/svg&gt;&lt;/span&gt;&#xA;      &lt;/button&gt;&#xA;&#xA;      &lt;button class=&#34;wrap-code-button tw-hidden&#34; hidden aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/button&gt;&#xA;      &lt;button class=&#34;line-number-button tw-hidden&#34; hidden aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;pre style=&#34;counter-reset: codeblock;&#34; class=&#34;tw-block tw-m-0 tw-p-0&#34;&gt;&lt;code&#xA;    id=&#34;codeblock-id-79&#34;&#xA;    class=&#34;&#xA;      chroma&#xA;      !tw-block&#xA;      tw-p-0&#xA;      tw-m-0&#xA;      tw-transition-[max-height]&#xA;      tw-duration-500&#xA;      tw-ease-in-out&#xA;      group-[.is-closed]:!tw-max-h-0&#xA;      group-[.is-wrap]:tw-text-wrap&#xA;      tw-overflow-y-hidden&#xA;      tw-overflow-x-auto&#xA;      tw-scrollbar-thin&#xA;      &#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pushed down:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  the connector can use the predicate during scan planning or reading&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;enforced:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  the connector guarantees rows returned by the scan satisfy that predicate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;remaining:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Trino still evaluates the predicate above the scan for correctness&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;So “pushed down” does not mean “the engine no longer checks it.”&lt;/p&gt;</description>
			</item>
			<item>
				<title>

From SQL To Parquet Pages: Tracing An Iceberg Read In Trino</title>
				<link>https://zivali.github.io/posts/from-sql-to-parquet-pages-tracing-an-iceberg-read-in-trino/</link>
				<pubDate>Wed, 17 Jun 2026 03:06:00 +0000</pubDate>
				<guid>https://zivali.github.io/posts/from-sql-to-parquet-pages-tracing-an-iceberg-read-in-trino/</guid>
				<description>&lt;link rel=&#34;stylesheet&#34; href=&#34;https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.css&#34; integrity=&#34;sha384-bYdxxUwYipFNohQlHt0bjN/LCpueqWz13HufFEV1SUatKs1cm4L6fFgCi1jT643X&#34; crossorigin=&#34;anonymous&#34;&gt;&#xA;&lt;h1 id=&#34;from-sql-to-parquet-pages&#34; class=&#34;headerLink&#34;&gt;&#xA;    &lt;a href=&#34;#from-sql-to-parquet-pages&#34; class=&#34;header-mark&#34;&gt;&lt;/a&gt;From SQL To Parquet Pages&lt;/h1&gt;&lt;p&gt;The read path is where the Trino engine, the Iceberg connector, Iceberg&#xA;metadata, Parquet files, and Trino &lt;code&gt;Page&lt;/code&gt; objects all meet.&lt;/p&gt;&#xA;&lt;p&gt;The useful way to read this path is not as one long class chain. The useful&#xA;question is:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block highlight is-open  tw-group tw-my-2&#34;&gt;&#xA;  &lt;div class=&#34;&#xA;    &#xA;    tw-flex&#xA;    tw-flex-row&#xA;    tw-flex-1&#xA;    tw-justify-between&#xA;    tw-w-full tw-bg-bgColor-secondary&#xA;    &#34;&gt;&#xA;    &lt;button&#xA;      class=&#34;&#xA;        code-block-button&#xA;        tw-mx-2&#xA;        tw-flex&#xA;        tw-flex-row&#xA;        tw-flex-1&#34;&#xA;      title=&#34;Toggle code block&#34;&#xA;      aria-label=&#34;Toggle code block&#34;&gt;&#xA;          &lt;div class=&#34;group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1&#34;&gt;&lt;svg class=&#34;icon&#34;&#xA;    xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 320 512&#34;&gt;&lt;!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --&gt;&lt;path d=&#34;M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z&#34;/&gt;&lt;/svg&gt;&lt;/div&gt;&#xA;      &lt;/button&gt;&#xA;&#xA;   &lt;div class=&#34;tw-flex&#34;&gt;&#xA;      &lt;button&#xA;        class=&#34;&#xA;          copy-code-button&#xA;          tw-select-none&#xA;          tw-mx-2&#xA;          tw-hidden&#xA;          group-[.is-open]:tw-block&#xA;          hover:tw-text-fgColor-link&#xA;          print:!tw-hidden&#34;&#xA;        title=&#34;Copy code&#34;&gt;&#xA;          &lt;span class=&#34;copy-icon tw-block&#34;&gt;&lt;svg class=&#34;icon&#34;&#xA;    xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 448 512&#34;&gt;&lt;!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --&gt;&lt;path d=&#34;M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z&#34;/&gt;&lt;/svg&gt;&lt;/span&gt;&#xA;          &lt;span class=&#34;check-icon tw-hidden&#34;&gt;&lt;svg class=&#34;icon&#34;&#xA;    xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 512 512&#34;&gt;&lt;!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --&gt;&lt;path d=&#34;M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z&#34;/&gt;&lt;/svg&gt;&lt;/span&gt;&#xA;      &lt;/button&gt;&#xA;&#xA;      &lt;button class=&#34;wrap-code-button tw-hidden&#34; hidden aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/button&gt;&#xA;      &lt;button class=&#34;line-number-button tw-hidden&#34; hidden aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;pre style=&#34;counter-reset: codeblock;&#34; class=&#34;tw-block tw-m-0 tw-p-0&#34;&gt;&lt;code&#xA;    id=&#34;codeblock-id-71&#34;&#xA;    class=&#34;&#xA;      chroma&#xA;      !tw-block&#xA;      tw-p-0&#xA;      tw-m-0&#xA;      tw-transition-[max-height]&#xA;      tw-duration-500&#xA;      tw-ease-in-out&#xA;      group-[.is-closed]:!tw-max-h-0&#xA;      group-[.is-wrap]:tw-text-wrap&#xA;      tw-overflow-y-hidden&#xA;      tw-overflow-x-auto&#xA;      tw-scrollbar-thin&#xA;      &#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Where does the query cross a boundary?&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;For an Iceberg read, the boundaries are:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Parquet Row Groups, Column Chunks, Pages, And How Trino Reads Them</title>
				<link>https://zivali.github.io/posts/parquet-row-groups-column-chunks-pages-and-how-trino-reads-them/</link>
				<pubDate>Tue, 16 Jun 2026 02:39:00 +0000</pubDate>
				<guid>https://zivali.github.io/posts/parquet-row-groups-column-chunks-pages-and-how-trino-reads-them/</guid>
				<description>&lt;link rel=&#34;stylesheet&#34; href=&#34;https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.css&#34; integrity=&#34;sha384-bYdxxUwYipFNohQlHt0bjN/LCpueqWz13HufFEV1SUatKs1cm4L6fFgCi1jT643X&#34; crossorigin=&#34;anonymous&#34;&gt;&#xA;&lt;p&gt;Parquet is the storage-format layer that sits between Iceberg’s selected data&#xA;files and Trino’s in-memory execution batches.&lt;/p&gt;&#xA;&lt;p&gt;For a Trino scan, the useful read shape is:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block highlight is-open  tw-group tw-my-2&#34;&gt;&#xA;  &lt;div class=&#34;&#xA;    &#xA;    tw-flex&#xA;    tw-flex-row&#xA;    tw-flex-1&#xA;    tw-justify-between&#xA;    tw-w-full tw-bg-bgColor-secondary&#xA;    &#34;&gt;&#xA;    &lt;button&#xA;      class=&#34;&#xA;        code-block-button&#xA;        tw-mx-2&#xA;        tw-flex&#xA;        tw-flex-row&#xA;        tw-flex-1&#34;&#xA;      title=&#34;Toggle code block&#34;&#xA;      aria-label=&#34;Toggle code block&#34;&gt;&#xA;          &lt;div class=&#34;group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1&#34;&gt;&lt;svg class=&#34;icon&#34;&#xA;    xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 320 512&#34;&gt;&lt;!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --&gt;&lt;path d=&#34;M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z&#34;/&gt;&lt;/svg&gt;&lt;/div&gt;&#xA;      &lt;/button&gt;&#xA;&#xA;   &lt;div class=&#34;tw-flex&#34;&gt;&#xA;      &lt;button&#xA;        class=&#34;&#xA;          copy-code-button&#xA;          tw-select-none&#xA;          tw-mx-2&#xA;          tw-hidden&#xA;          group-[.is-open]:tw-block&#xA;          hover:tw-text-fgColor-link&#xA;          print:!tw-hidden&#34;&#xA;        title=&#34;Copy code&#34;&gt;&#xA;          &lt;span class=&#34;copy-icon tw-block&#34;&gt;&lt;svg class=&#34;icon&#34;&#xA;    xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 448 512&#34;&gt;&lt;!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --&gt;&lt;path d=&#34;M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z&#34;/&gt;&lt;/svg&gt;&lt;/span&gt;&#xA;          &lt;span class=&#34;check-icon tw-hidden&#34;&gt;&lt;svg class=&#34;icon&#34;&#xA;    xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 512 512&#34;&gt;&lt;!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --&gt;&lt;path d=&#34;M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z&#34;/&gt;&lt;/svg&gt;&lt;/span&gt;&#xA;      &lt;/button&gt;&#xA;&#xA;      &lt;button class=&#34;wrap-code-button tw-hidden&#34; hidden aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/button&gt;&#xA;      &lt;button class=&#34;line-number-button tw-hidden&#34; hidden aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;pre style=&#34;counter-reset: codeblock;&#34; class=&#34;tw-block tw-m-0 tw-p-0&#34;&gt;&lt;code&#xA;    id=&#34;codeblock-id-99&#34;&#xA;    class=&#34;&#xA;      chroma&#xA;      !tw-block&#xA;      tw-p-0&#xA;      tw-m-0&#xA;      tw-transition-[max-height]&#xA;      tw-duration-500&#xA;      tw-ease-in-out&#xA;      group-[.is-closed]:!tw-max-h-0&#xA;      group-[.is-wrap]:tw-text-wrap&#xA;      tw-overflow-y-hidden&#xA;      tw-overflow-x-auto&#xA;      tw-scrollbar-thin&#xA;      &#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;read file metadata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; choose useful row groups&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; read useful columns&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; read encoded and compressed Parquet pages&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; decode batches into Trino blocks&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; pass Trino Page objects to operators&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This note is the storage-format bridge before tracing a real Iceberg read query.&#xA;The previous note explained how Iceberg metadata points to data files. This one&#xA;explains what happens after a selected data file is Parquet: how row groups,&#xA;column chunks, pages, encodings, and Trino &lt;code&gt;Page&lt;/code&gt; objects fit together.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Iceberg Table Layout: Avro Metadata And Parquet Data Files</title>
				<link>https://zivali.github.io/posts/iceberg-table-layout-avro-metadata-and-parquet-data-files/</link>
				<pubDate>Sun, 14 Jun 2026 03:46:00 +0000</pubDate>
				<guid>https://zivali.github.io/posts/iceberg-table-layout-avro-metadata-and-parquet-data-files/</guid>
				<description>Iceberg Metadata, Avro, And Parquet.</description>
			</item>
	</channel>
</rss>
