blob: e49635be6293ee50842bea2fa53d4da60ccca02d [file]
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://py.iceberg.apache.org/reference/pyiceberg/table/metadata/">
<link rel="prev" href="../maintenance/">
<link rel="next" href="../name_mapping/">
<link rel="icon" href="../../../../assets/images/iceberg-logo-icon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.1">
<title>metadata - PyIceberg</title>
<link rel="stylesheet" href="../../../../assets/stylesheets/main.484c7ddc.min.css">
<link rel="stylesheet" href="../../../../assets/stylesheets/palette.ab4e12ef.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Lato";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(["setDoNotTrack", true]);
_paq.push(["disableCookies"]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '82']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo -->
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#pyiceberg.table.metadata" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../../.." title="PyIceberg" class="md-header__button md-logo" aria-label="PyIceberg" data-md-component="logo">
<img src="../../../../assets/images/iceberg-logo-icon.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
PyIceberg
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
metadata
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/apache/iceberg-python" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
apache/iceberg-python
</div>
</a>
</div>
</nav>
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../../../.." class="md-tabs__link">
Getting started
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../configuration/" class="md-tabs__link">
Configuration
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../cli/" class="md-tabs__link">
CLI
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../api/" class="md-tabs__link">
API
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../contributing/" class="md-tabs__link">
Contributing
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../community/" class="md-tabs__link">
Community
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../verify-release/" class="md-tabs__link">
Releases
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../../" class="md-tabs__link">
Code Reference
</a>
</li>
</ul>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../../.." title="PyIceberg" class="md-nav__button md-logo" aria-label="PyIceberg" data-md-component="logo">
<img src="../../../../assets/images/iceberg-logo-icon.png" alt="logo">
</a>
PyIceberg
</label>
<div class="md-nav__source">
<a href="https://github.com/apache/iceberg-python" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
apache/iceberg-python
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../.." class="md-nav__link">
<span class="md-ellipsis">
Getting started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../cli/" class="md-nav__link">
<span class="md-ellipsis">
CLI
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
<div class="md-nav__link md-nav__container">
<a href="../../../../api/" class="md-nav__link ">
<span class="md-ellipsis">
API
</span>
</a>
<label class="md-nav__link " for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
API
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../../row-filter-syntax/" class="md-nav__link">
<span class="md-ellipsis">
Row Filter Syntax
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../expression-dsl/" class="md-nav__link">
<span class="md-ellipsis">
Expression DSL
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../../contributing/" class="md-nav__link">
<span class="md-ellipsis">
Contributing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../community/" class="md-nav__link">
<span class="md-ellipsis">
Community
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Releases
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Releases
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../../verify-release/" class="md-nav__link">
<span class="md-ellipsis">
Verify a release
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../how-to-release/" class="md-nav__link">
<span class="md-ellipsis">
How to release
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://github.com/apache/iceberg-python/releases" class="md-nav__link">
<span class="md-ellipsis">
Release Notes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../nightly-build/" class="md-nav__link">
<span class="md-ellipsis">
Nightly Build
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" checked>
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="">
<span class="md-ellipsis">
Code Reference
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Code Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1" checked>
<div class="md-nav__link md-nav__container">
<a href="../../" class="md-nav__link ">
<span class="md-ellipsis">
pyiceberg
</span>
</a>
<label class="md-nav__link " for="__nav_8_1" id="__nav_8_1_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_1_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_8_1">
<span class="md-nav__icon md-icon"></span>
pyiceberg
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_1" >
<div class="md-nav__link md-nav__container">
<a href="../../avro/" class="md-nav__link ">
<span class="md-ellipsis">
avro
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_1" id="__nav_8_1_1_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_1">
<span class="md-nav__icon md-icon"></span>
avro
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_1_1" >
<div class="md-nav__link md-nav__container">
<a href="../../avro/codecs/" class="md-nav__link ">
<span class="md-ellipsis">
codecs
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_1_1" id="__nav_8_1_1_1_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_8_1_1_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_1_1">
<span class="md-nav__icon md-icon"></span>
codecs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../avro/codecs/bzip2/" class="md-nav__link">
<span class="md-ellipsis">
bzip2
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/codecs/codec/" class="md-nav__link">
<span class="md-ellipsis">
codec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/codecs/deflate/" class="md-nav__link">
<span class="md-ellipsis">
deflate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/codecs/snappy_codec/" class="md-nav__link">
<span class="md-ellipsis">
snappy_codec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/codecs/zstandard_codec/" class="md-nav__link">
<span class="md-ellipsis">
zstandard_codec
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../avro/decoder/" class="md-nav__link">
<span class="md-ellipsis">
decoder
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/encoder/" class="md-nav__link">
<span class="md-ellipsis">
encoder
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/file/" class="md-nav__link">
<span class="md-ellipsis">
file
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/reader/" class="md-nav__link">
<span class="md-ellipsis">
reader
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/resolver/" class="md-nav__link">
<span class="md-ellipsis">
resolver
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../avro/writer/" class="md-nav__link">
<span class="md-ellipsis">
writer
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_2" >
<div class="md-nav__link md-nav__container">
<a href="../../catalog/" class="md-nav__link ">
<span class="md-ellipsis">
catalog
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_2" id="__nav_8_1_2_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_2">
<span class="md-nav__icon md-icon"></span>
catalog
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../catalog/bigquery_metastore/" class="md-nav__link">
<span class="md-ellipsis">
bigquery_metastore
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../catalog/dynamodb/" class="md-nav__link">
<span class="md-ellipsis">
dynamodb
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../catalog/glue/" class="md-nav__link">
<span class="md-ellipsis">
glue
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../catalog/hive/" class="md-nav__link">
<span class="md-ellipsis">
hive
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../catalog/memory/" class="md-nav__link">
<span class="md-ellipsis">
memory
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../catalog/noop/" class="md-nav__link">
<span class="md-ellipsis">
noop
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_2_7" >
<div class="md-nav__link md-nav__container">
<a href="../../catalog/rest/" class="md-nav__link ">
<span class="md-ellipsis">
rest
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_2_7" id="__nav_8_1_2_7_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_8_1_2_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_2_7">
<span class="md-nav__icon md-icon"></span>
rest
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../catalog/rest/auth/" class="md-nav__link">
<span class="md-ellipsis">
auth
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../catalog/rest/response/" class="md-nav__link">
<span class="md-ellipsis">
response
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../catalog/rest/scan_planning/" class="md-nav__link">
<span class="md-ellipsis">
scan_planning
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../catalog/sql/" class="md-nav__link">
<span class="md-ellipsis">
sql
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_3" >
<div class="md-nav__link md-nav__container">
<a href="../../cli/" class="md-nav__link ">
<span class="md-ellipsis">
cli
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_3" id="__nav_8_1_3_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_3">
<span class="md-nav__icon md-icon"></span>
cli
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../cli/console/" class="md-nav__link">
<span class="md-ellipsis">
console
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../cli/output/" class="md-nav__link">
<span class="md-ellipsis">
output
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../conversions/" class="md-nav__link">
<span class="md-ellipsis">
conversions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../exceptions/" class="md-nav__link">
<span class="md-ellipsis">
exceptions
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_6" >
<div class="md-nav__link md-nav__container">
<a href="../../expressions/" class="md-nav__link ">
<span class="md-ellipsis">
expressions
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_6" id="__nav_8_1_6_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_6">
<span class="md-nav__icon md-icon"></span>
expressions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../expressions/literals/" class="md-nav__link">
<span class="md-ellipsis">
literals
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../expressions/parser/" class="md-nav__link">
<span class="md-ellipsis">
parser
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../expressions/visitors/" class="md-nav__link">
<span class="md-ellipsis">
visitors
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_7" >
<div class="md-nav__link md-nav__container">
<a href="../../io/" class="md-nav__link ">
<span class="md-ellipsis">
io
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_7" id="__nav_8_1_7_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_7">
<span class="md-nav__icon md-icon"></span>
io
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../io/fsspec/" class="md-nav__link">
<span class="md-ellipsis">
fsspec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../io/pyarrow/" class="md-nav__link">
<span class="md-ellipsis">
pyarrow
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../manifest/" class="md-nav__link">
<span class="md-ellipsis">
manifest
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../partitioning/" class="md-nav__link">
<span class="md-ellipsis">
partitioning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../schema/" class="md-nav__link">
<span class="md-ellipsis">
schema
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../serializers/" class="md-nav__link">
<span class="md-ellipsis">
serializers
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_12" checked>
<div class="md-nav__link md-nav__container">
<a href="../" class="md-nav__link ">
<span class="md-ellipsis">
table
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_12" id="__nav_8_1_12_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_12_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_8_1_12">
<span class="md-nav__icon md-icon"></span>
table
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../delete_file_index/" class="md-nav__link">
<span class="md-ellipsis">
delete_file_index
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../inspect/" class="md-nav__link">
<span class="md-ellipsis">
inspect
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../locations/" class="md-nav__link">
<span class="md-ellipsis">
locations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../maintenance/" class="md-nav__link">
<span class="md-ellipsis">
maintenance
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
metadata
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
metadata
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata" class="md-nav__link">
<span class="md-ellipsis">
metadata
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields" class="md-nav__link">
<span class="md-ellipsis">
TableMetadataCommonFields
</span>
</a>
<nav class="md-nav" aria-label="TableMetadataCommonFields">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.current_schema_id" class="md-nav__link">
<span class="md-ellipsis">
current_schema_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.current_snapshot_id" class="md-nav__link">
<span class="md-ellipsis">
current_snapshot_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.default_sort_order_id" class="md-nav__link">
<span class="md-ellipsis">
default_sort_order_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.default_spec_id" class="md-nav__link">
<span class="md-ellipsis">
default_spec_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.last_column_id" class="md-nav__link">
<span class="md-ellipsis">
last_column_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.last_partition_id" class="md-nav__link">
<span class="md-ellipsis">
last_partition_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.last_updated_ms" class="md-nav__link">
<span class="md-ellipsis">
last_updated_ms
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.location" class="md-nav__link">
<span class="md-ellipsis">
location
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.metadata_log" class="md-nav__link">
<span class="md-ellipsis">
metadata_log
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.partition_specs" class="md-nav__link">
<span class="md-ellipsis">
partition_specs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.partition_statistics" class="md-nav__link">
<span class="md-ellipsis">
partition_statistics
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.properties" class="md-nav__link">
<span class="md-ellipsis">
properties
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.refs" class="md-nav__link">
<span class="md-ellipsis">
refs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.schemas" class="md-nav__link">
<span class="md-ellipsis">
schemas
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.snapshot_log" class="md-nav__link">
<span class="md-ellipsis">
snapshot_log
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.snapshots" class="md-nav__link">
<span class="md-ellipsis">
snapshots
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.sort_orders" class="md-nav__link">
<span class="md-ellipsis">
sort_orders
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.statistics" class="md-nav__link">
<span class="md-ellipsis">
statistics
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.table_uuid" class="md-nav__link">
<span class="md-ellipsis">
table_uuid
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.current_snapshot" class="md-nav__link">
<span class="md-ellipsis">
current_snapshot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.name_mapping" class="md-nav__link">
<span class="md-ellipsis">
name_mapping
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.new_snapshot_id" class="md-nav__link">
<span class="md-ellipsis">
new_snapshot_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.schema" class="md-nav__link">
<span class="md-ellipsis">
schema
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.schema_by_id" class="md-nav__link">
<span class="md-ellipsis">
schema_by_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.snapshot_by_id" class="md-nav__link">
<span class="md-ellipsis">
snapshot_by_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.snapshot_by_name" class="md-nav__link">
<span class="md-ellipsis">
snapshot_by_name
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.sort_order" class="md-nav__link">
<span class="md-ellipsis">
sort_order
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.sort_order_by_id" class="md-nav__link">
<span class="md-ellipsis">
sort_order_by_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.spec" class="md-nav__link">
<span class="md-ellipsis">
spec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.specs" class="md-nav__link">
<span class="md-ellipsis">
specs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.specs_struct" class="md-nav__link">
<span class="md-ellipsis">
specs_struct
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataUtil" class="md-nav__link">
<span class="md-ellipsis">
TableMetadataUtil
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1" class="md-nav__link">
<span class="md-ellipsis">
TableMetadataV1
</span>
</a>
<nav class="md-nav" aria-label="TableMetadataV1">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.format_version" class="md-nav__link">
<span class="md-ellipsis">
format_version
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.partition_spec" class="md-nav__link">
<span class="md-ellipsis">
partition_spec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.schema_" class="md-nav__link">
<span class="md-ellipsis">
schema_
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.construct_partition_specs" class="md-nav__link">
<span class="md-ellipsis">
construct_partition_specs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.construct_schemas" class="md-nav__link">
<span class="md-ellipsis">
construct_schemas
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.set_sort_orders" class="md-nav__link">
<span class="md-ellipsis">
set_sort_orders
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.set_v2_compatible_defaults" class="md-nav__link">
<span class="md-ellipsis">
set_v2_compatible_defaults
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV2" class="md-nav__link">
<span class="md-ellipsis">
TableMetadataV2
</span>
</a>
<nav class="md-nav" aria-label="TableMetadataV2">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV2.format_version" class="md-nav__link">
<span class="md-ellipsis">
format_version
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV2.last_sequence_number" class="md-nav__link">
<span class="md-ellipsis">
last_sequence_number
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV3" class="md-nav__link">
<span class="md-ellipsis">
TableMetadataV3
</span>
</a>
<nav class="md-nav" aria-label="TableMetadataV3">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV3.format_version" class="md-nav__link">
<span class="md-ellipsis">
format_version
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV3.last_sequence_number" class="md-nav__link">
<span class="md-ellipsis">
last_sequence_number
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV3.next_row_id" class="md-nav__link">
<span class="md-ellipsis">
next_row_id
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.check_partition_specs" class="md-nav__link">
<span class="md-ellipsis">
check_partition_specs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.check_schemas" class="md-nav__link">
<span class="md-ellipsis">
check_schemas
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.check_sort_orders" class="md-nav__link">
<span class="md-ellipsis">
check_sort_orders
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.cleanup_snapshot_id" class="md-nav__link">
<span class="md-ellipsis">
cleanup_snapshot_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.construct_refs" class="md-nav__link">
<span class="md-ellipsis">
construct_refs
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../name_mapping/" class="md-nav__link">
<span class="md-ellipsis">
name_mapping
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../puffin/" class="md-nav__link">
<span class="md-ellipsis">
puffin
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../refs/" class="md-nav__link">
<span class="md-ellipsis">
refs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../snapshots/" class="md-nav__link">
<span class="md-ellipsis">
snapshots
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../sorting/" class="md-nav__link">
<span class="md-ellipsis">
sorting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../statistics/" class="md-nav__link">
<span class="md-ellipsis">
statistics
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_12_12" >
<div class="md-nav__link md-nav__container">
<a href="../update/" class="md-nav__link ">
<span class="md-ellipsis">
update
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_12_12" id="__nav_8_1_12_12_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_8_1_12_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_12_12">
<span class="md-nav__icon md-icon"></span>
update
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../update/schema/" class="md-nav__link">
<span class="md-ellipsis">
schema
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../update/snapshot/" class="md-nav__link">
<span class="md-ellipsis">
snapshot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../update/sorting/" class="md-nav__link">
<span class="md-ellipsis">
sorting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../update/spec/" class="md-nav__link">
<span class="md-ellipsis">
spec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../update/statistics/" class="md-nav__link">
<span class="md-ellipsis">
statistics
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../update/validate/" class="md-nav__link">
<span class="md-ellipsis">
validate
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../upsert_util/" class="md-nav__link">
<span class="md-ellipsis">
upsert_util
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../transforms/" class="md-nav__link">
<span class="md-ellipsis">
transforms
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../typedef/" class="md-nav__link">
<span class="md-ellipsis">
typedef
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../types/" class="md-nav__link">
<span class="md-ellipsis">
types
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_1_16" >
<div class="md-nav__link md-nav__container">
<a href="../../utils/" class="md-nav__link ">
<span class="md-ellipsis">
utils
</span>
</a>
<label class="md-nav__link " for="__nav_8_1_16" id="__nav_8_1_16_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_1_16_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_1_16">
<span class="md-nav__icon md-icon"></span>
utils
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../utils/bin_packing/" class="md-nav__link">
<span class="md-ellipsis">
bin_packing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/concurrent/" class="md-nav__link">
<span class="md-ellipsis">
concurrent
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/config/" class="md-nav__link">
<span class="md-ellipsis">
config
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/datetime/" class="md-nav__link">
<span class="md-ellipsis">
datetime
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/decimal/" class="md-nav__link">
<span class="md-ellipsis">
decimal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/deprecated/" class="md-nav__link">
<span class="md-ellipsis">
deprecated
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/lazydict/" class="md-nav__link">
<span class="md-ellipsis">
lazydict
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/parsing/" class="md-nav__link">
<span class="md-ellipsis">
parsing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/properties/" class="md-nav__link">
<span class="md-ellipsis">
properties
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/schema_conversion/" class="md-nav__link">
<span class="md-ellipsis">
schema_conversion
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/singleton/" class="md-nav__link">
<span class="md-ellipsis">
singleton
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../utils/truncate/" class="md-nav__link">
<span class="md-ellipsis">
truncate
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata" class="md-nav__link">
<span class="md-ellipsis">
metadata
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields" class="md-nav__link">
<span class="md-ellipsis">
TableMetadataCommonFields
</span>
</a>
<nav class="md-nav" aria-label="TableMetadataCommonFields">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.current_schema_id" class="md-nav__link">
<span class="md-ellipsis">
current_schema_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.current_snapshot_id" class="md-nav__link">
<span class="md-ellipsis">
current_snapshot_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.default_sort_order_id" class="md-nav__link">
<span class="md-ellipsis">
default_sort_order_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.default_spec_id" class="md-nav__link">
<span class="md-ellipsis">
default_spec_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.last_column_id" class="md-nav__link">
<span class="md-ellipsis">
last_column_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.last_partition_id" class="md-nav__link">
<span class="md-ellipsis">
last_partition_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.last_updated_ms" class="md-nav__link">
<span class="md-ellipsis">
last_updated_ms
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.location" class="md-nav__link">
<span class="md-ellipsis">
location
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.metadata_log" class="md-nav__link">
<span class="md-ellipsis">
metadata_log
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.partition_specs" class="md-nav__link">
<span class="md-ellipsis">
partition_specs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.partition_statistics" class="md-nav__link">
<span class="md-ellipsis">
partition_statistics
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.properties" class="md-nav__link">
<span class="md-ellipsis">
properties
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.refs" class="md-nav__link">
<span class="md-ellipsis">
refs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.schemas" class="md-nav__link">
<span class="md-ellipsis">
schemas
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.snapshot_log" class="md-nav__link">
<span class="md-ellipsis">
snapshot_log
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.snapshots" class="md-nav__link">
<span class="md-ellipsis">
snapshots
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.sort_orders" class="md-nav__link">
<span class="md-ellipsis">
sort_orders
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.statistics" class="md-nav__link">
<span class="md-ellipsis">
statistics
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.table_uuid" class="md-nav__link">
<span class="md-ellipsis">
table_uuid
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.current_snapshot" class="md-nav__link">
<span class="md-ellipsis">
current_snapshot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.name_mapping" class="md-nav__link">
<span class="md-ellipsis">
name_mapping
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.new_snapshot_id" class="md-nav__link">
<span class="md-ellipsis">
new_snapshot_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.schema" class="md-nav__link">
<span class="md-ellipsis">
schema
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.schema_by_id" class="md-nav__link">
<span class="md-ellipsis">
schema_by_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.snapshot_by_id" class="md-nav__link">
<span class="md-ellipsis">
snapshot_by_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.snapshot_by_name" class="md-nav__link">
<span class="md-ellipsis">
snapshot_by_name
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.sort_order" class="md-nav__link">
<span class="md-ellipsis">
sort_order
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.sort_order_by_id" class="md-nav__link">
<span class="md-ellipsis">
sort_order_by_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.spec" class="md-nav__link">
<span class="md-ellipsis">
spec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.specs" class="md-nav__link">
<span class="md-ellipsis">
specs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.specs_struct" class="md-nav__link">
<span class="md-ellipsis">
specs_struct
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataUtil" class="md-nav__link">
<span class="md-ellipsis">
TableMetadataUtil
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1" class="md-nav__link">
<span class="md-ellipsis">
TableMetadataV1
</span>
</a>
<nav class="md-nav" aria-label="TableMetadataV1">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.format_version" class="md-nav__link">
<span class="md-ellipsis">
format_version
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.partition_spec" class="md-nav__link">
<span class="md-ellipsis">
partition_spec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.schema_" class="md-nav__link">
<span class="md-ellipsis">
schema_
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.construct_partition_specs" class="md-nav__link">
<span class="md-ellipsis">
construct_partition_specs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.construct_schemas" class="md-nav__link">
<span class="md-ellipsis">
construct_schemas
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.set_sort_orders" class="md-nav__link">
<span class="md-ellipsis">
set_sort_orders
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV1.set_v2_compatible_defaults" class="md-nav__link">
<span class="md-ellipsis">
set_v2_compatible_defaults
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV2" class="md-nav__link">
<span class="md-ellipsis">
TableMetadataV2
</span>
</a>
<nav class="md-nav" aria-label="TableMetadataV2">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV2.format_version" class="md-nav__link">
<span class="md-ellipsis">
format_version
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV2.last_sequence_number" class="md-nav__link">
<span class="md-ellipsis">
last_sequence_number
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV3" class="md-nav__link">
<span class="md-ellipsis">
TableMetadataV3
</span>
</a>
<nav class="md-nav" aria-label="TableMetadataV3">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV3.format_version" class="md-nav__link">
<span class="md-ellipsis">
format_version
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV3.last_sequence_number" class="md-nav__link">
<span class="md-ellipsis">
last_sequence_number
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.TableMetadataV3.next_row_id" class="md-nav__link">
<span class="md-ellipsis">
next_row_id
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.check_partition_specs" class="md-nav__link">
<span class="md-ellipsis">
check_partition_specs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.check_schemas" class="md-nav__link">
<span class="md-ellipsis">
check_schemas
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.check_sort_orders" class="md-nav__link">
<span class="md-ellipsis">
check_sort_orders
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.cleanup_snapshot_id" class="md-nav__link">
<span class="md-ellipsis">
cleanup_snapshot_id
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pyiceberg.table.metadata.construct_refs" class="md-nav__link">
<span class="md-ellipsis">
construct_refs
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>metadata</h1>
<div class="doc doc-object doc-module">
<a id="pyiceberg.table.metadata"></a>
<div class="doc doc-contents first">
<div class="doc doc-children">
<div class="doc doc-object doc-class">
<h2 id="pyiceberg.table.metadata.TableMetadataCommonFields" class="doc doc-heading">
<code>TableMetadataCommonFields</code>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p class="doc doc-class-bases">
Bases: <code><a class="autorefs autorefs-internal" title="IcebergBaseModel (pyiceberg.typedef.IcebergBaseModel)" href="../../typedef/#pyiceberg.typedef.IcebergBaseModel">IcebergBaseModel</a></code></p>
<p>Metadata for an Iceberg table as specified in the Apache Iceberg spec.</p>
<p>https://iceberg.apache.org/spec/#iceberg-table-spec</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-128">128</a></span>
<span class="normal"><a href="#__codelineno-0-129">129</a></span>
<span class="normal"><a href="#__codelineno-0-130">130</a></span>
<span class="normal"><a href="#__codelineno-0-131">131</a></span>
<span class="normal"><a href="#__codelineno-0-132">132</a></span>
<span class="normal"><a href="#__codelineno-0-133">133</a></span>
<span class="normal"><a href="#__codelineno-0-134">134</a></span>
<span class="normal"><a href="#__codelineno-0-135">135</a></span>
<span class="normal"><a href="#__codelineno-0-136">136</a></span>
<span class="normal"><a href="#__codelineno-0-137">137</a></span>
<span class="normal"><a href="#__codelineno-0-138">138</a></span>
<span class="normal"><a href="#__codelineno-0-139">139</a></span>
<span class="normal"><a href="#__codelineno-0-140">140</a></span>
<span class="normal"><a href="#__codelineno-0-141">141</a></span>
<span class="normal"><a href="#__codelineno-0-142">142</a></span>
<span class="normal"><a href="#__codelineno-0-143">143</a></span>
<span class="normal"><a href="#__codelineno-0-144">144</a></span>
<span class="normal"><a href="#__codelineno-0-145">145</a></span>
<span class="normal"><a href="#__codelineno-0-146">146</a></span>
<span class="normal"><a href="#__codelineno-0-147">147</a></span>
<span class="normal"><a href="#__codelineno-0-148">148</a></span>
<span class="normal"><a href="#__codelineno-0-149">149</a></span>
<span class="normal"><a href="#__codelineno-0-150">150</a></span>
<span class="normal"><a href="#__codelineno-0-151">151</a></span>
<span class="normal"><a href="#__codelineno-0-152">152</a></span>
<span class="normal"><a href="#__codelineno-0-153">153</a></span>
<span class="normal"><a href="#__codelineno-0-154">154</a></span>
<span class="normal"><a href="#__codelineno-0-155">155</a></span>
<span class="normal"><a href="#__codelineno-0-156">156</a></span>
<span class="normal"><a href="#__codelineno-0-157">157</a></span>
<span class="normal"><a href="#__codelineno-0-158">158</a></span>
<span class="normal"><a href="#__codelineno-0-159">159</a></span>
<span class="normal"><a href="#__codelineno-0-160">160</a></span>
<span class="normal"><a href="#__codelineno-0-161">161</a></span>
<span class="normal"><a href="#__codelineno-0-162">162</a></span>
<span class="normal"><a href="#__codelineno-0-163">163</a></span>
<span class="normal"><a href="#__codelineno-0-164">164</a></span>
<span class="normal"><a href="#__codelineno-0-165">165</a></span>
<span class="normal"><a href="#__codelineno-0-166">166</a></span>
<span class="normal"><a href="#__codelineno-0-167">167</a></span>
<span class="normal"><a href="#__codelineno-0-168">168</a></span>
<span class="normal"><a href="#__codelineno-0-169">169</a></span>
<span class="normal"><a href="#__codelineno-0-170">170</a></span>
<span class="normal"><a href="#__codelineno-0-171">171</a></span>
<span class="normal"><a href="#__codelineno-0-172">172</a></span>
<span class="normal"><a href="#__codelineno-0-173">173</a></span>
<span class="normal"><a href="#__codelineno-0-174">174</a></span>
<span class="normal"><a href="#__codelineno-0-175">175</a></span>
<span class="normal"><a href="#__codelineno-0-176">176</a></span>
<span class="normal"><a href="#__codelineno-0-177">177</a></span>
<span class="normal"><a href="#__codelineno-0-178">178</a></span>
<span class="normal"><a href="#__codelineno-0-179">179</a></span>
<span class="normal"><a href="#__codelineno-0-180">180</a></span>
<span class="normal"><a href="#__codelineno-0-181">181</a></span>
<span class="normal"><a href="#__codelineno-0-182">182</a></span>
<span class="normal"><a href="#__codelineno-0-183">183</a></span>
<span class="normal"><a href="#__codelineno-0-184">184</a></span>
<span class="normal"><a href="#__codelineno-0-185">185</a></span>
<span class="normal"><a href="#__codelineno-0-186">186</a></span>
<span class="normal"><a href="#__codelineno-0-187">187</a></span>
<span class="normal"><a href="#__codelineno-0-188">188</a></span>
<span class="normal"><a href="#__codelineno-0-189">189</a></span>
<span class="normal"><a href="#__codelineno-0-190">190</a></span>
<span class="normal"><a href="#__codelineno-0-191">191</a></span>
<span class="normal"><a href="#__codelineno-0-192">192</a></span>
<span class="normal"><a href="#__codelineno-0-193">193</a></span>
<span class="normal"><a href="#__codelineno-0-194">194</a></span>
<span class="normal"><a href="#__codelineno-0-195">195</a></span>
<span class="normal"><a href="#__codelineno-0-196">196</a></span>
<span class="normal"><a href="#__codelineno-0-197">197</a></span>
<span class="normal"><a href="#__codelineno-0-198">198</a></span>
<span class="normal"><a href="#__codelineno-0-199">199</a></span>
<span class="normal"><a href="#__codelineno-0-200">200</a></span>
<span class="normal"><a href="#__codelineno-0-201">201</a></span>
<span class="normal"><a href="#__codelineno-0-202">202</a></span>
<span class="normal"><a href="#__codelineno-0-203">203</a></span>
<span class="normal"><a href="#__codelineno-0-204">204</a></span>
<span class="normal"><a href="#__codelineno-0-205">205</a></span>
<span class="normal"><a href="#__codelineno-0-206">206</a></span>
<span class="normal"><a href="#__codelineno-0-207">207</a></span>
<span class="normal"><a href="#__codelineno-0-208">208</a></span>
<span class="normal"><a href="#__codelineno-0-209">209</a></span>
<span class="normal"><a href="#__codelineno-0-210">210</a></span>
<span class="normal"><a href="#__codelineno-0-211">211</a></span>
<span class="normal"><a href="#__codelineno-0-212">212</a></span>
<span class="normal"><a href="#__codelineno-0-213">213</a></span>
<span class="normal"><a href="#__codelineno-0-214">214</a></span>
<span class="normal"><a href="#__codelineno-0-215">215</a></span>
<span class="normal"><a href="#__codelineno-0-216">216</a></span>
<span class="normal"><a href="#__codelineno-0-217">217</a></span>
<span class="normal"><a href="#__codelineno-0-218">218</a></span>
<span class="normal"><a href="#__codelineno-0-219">219</a></span>
<span class="normal"><a href="#__codelineno-0-220">220</a></span>
<span class="normal"><a href="#__codelineno-0-221">221</a></span>
<span class="normal"><a href="#__codelineno-0-222">222</a></span>
<span class="normal"><a href="#__codelineno-0-223">223</a></span>
<span class="normal"><a href="#__codelineno-0-224">224</a></span>
<span class="normal"><a href="#__codelineno-0-225">225</a></span>
<span class="normal"><a href="#__codelineno-0-226">226</a></span>
<span class="normal"><a href="#__codelineno-0-227">227</a></span>
<span class="normal"><a href="#__codelineno-0-228">228</a></span>
<span class="normal"><a href="#__codelineno-0-229">229</a></span>
<span class="normal"><a href="#__codelineno-0-230">230</a></span>
<span class="normal"><a href="#__codelineno-0-231">231</a></span>
<span class="normal"><a href="#__codelineno-0-232">232</a></span>
<span class="normal"><a href="#__codelineno-0-233">233</a></span>
<span class="normal"><a href="#__codelineno-0-234">234</a></span>
<span class="normal"><a href="#__codelineno-0-235">235</a></span>
<span class="normal"><a href="#__codelineno-0-236">236</a></span>
<span class="normal"><a href="#__codelineno-0-237">237</a></span>
<span class="normal"><a href="#__codelineno-0-238">238</a></span>
<span class="normal"><a href="#__codelineno-0-239">239</a></span>
<span class="normal"><a href="#__codelineno-0-240">240</a></span>
<span class="normal"><a href="#__codelineno-0-241">241</a></span>
<span class="normal"><a href="#__codelineno-0-242">242</a></span>
<span class="normal"><a href="#__codelineno-0-243">243</a></span>
<span class="normal"><a href="#__codelineno-0-244">244</a></span>
<span class="normal"><a href="#__codelineno-0-245">245</a></span>
<span class="normal"><a href="#__codelineno-0-246">246</a></span>
<span class="normal"><a href="#__codelineno-0-247">247</a></span>
<span class="normal"><a href="#__codelineno-0-248">248</a></span>
<span class="normal"><a href="#__codelineno-0-249">249</a></span>
<span class="normal"><a href="#__codelineno-0-250">250</a></span>
<span class="normal"><a href="#__codelineno-0-251">251</a></span>
<span class="normal"><a href="#__codelineno-0-252">252</a></span>
<span class="normal"><a href="#__codelineno-0-253">253</a></span>
<span class="normal"><a href="#__codelineno-0-254">254</a></span>
<span class="normal"><a href="#__codelineno-0-255">255</a></span>
<span class="normal"><a href="#__codelineno-0-256">256</a></span>
<span class="normal"><a href="#__codelineno-0-257">257</a></span>
<span class="normal"><a href="#__codelineno-0-258">258</a></span>
<span class="normal"><a href="#__codelineno-0-259">259</a></span>
<span class="normal"><a href="#__codelineno-0-260">260</a></span>
<span class="normal"><a href="#__codelineno-0-261">261</a></span>
<span class="normal"><a href="#__codelineno-0-262">262</a></span>
<span class="normal"><a href="#__codelineno-0-263">263</a></span>
<span class="normal"><a href="#__codelineno-0-264">264</a></span>
<span class="normal"><a href="#__codelineno-0-265">265</a></span>
<span class="normal"><a href="#__codelineno-0-266">266</a></span>
<span class="normal"><a href="#__codelineno-0-267">267</a></span>
<span class="normal"><a href="#__codelineno-0-268">268</a></span>
<span class="normal"><a href="#__codelineno-0-269">269</a></span>
<span class="normal"><a href="#__codelineno-0-270">270</a></span>
<span class="normal"><a href="#__codelineno-0-271">271</a></span>
<span class="normal"><a href="#__codelineno-0-272">272</a></span>
<span class="normal"><a href="#__codelineno-0-273">273</a></span>
<span class="normal"><a href="#__codelineno-0-274">274</a></span>
<span class="normal"><a href="#__codelineno-0-275">275</a></span>
<span class="normal"><a href="#__codelineno-0-276">276</a></span>
<span class="normal"><a href="#__codelineno-0-277">277</a></span>
<span class="normal"><a href="#__codelineno-0-278">278</a></span>
<span class="normal"><a href="#__codelineno-0-279">279</a></span>
<span class="normal"><a href="#__codelineno-0-280">280</a></span>
<span class="normal"><a href="#__codelineno-0-281">281</a></span>
<span class="normal"><a href="#__codelineno-0-282">282</a></span>
<span class="normal"><a href="#__codelineno-0-283">283</a></span>
<span class="normal"><a href="#__codelineno-0-284">284</a></span>
<span class="normal"><a href="#__codelineno-0-285">285</a></span>
<span class="normal"><a href="#__codelineno-0-286">286</a></span>
<span class="normal"><a href="#__codelineno-0-287">287</a></span>
<span class="normal"><a href="#__codelineno-0-288">288</a></span>
<span class="normal"><a href="#__codelineno-0-289">289</a></span>
<span class="normal"><a href="#__codelineno-0-290">290</a></span>
<span class="normal"><a href="#__codelineno-0-291">291</a></span>
<span class="normal"><a href="#__codelineno-0-292">292</a></span>
<span class="normal"><a href="#__codelineno-0-293">293</a></span>
<span class="normal"><a href="#__codelineno-0-294">294</a></span>
<span class="normal"><a href="#__codelineno-0-295">295</a></span>
<span class="normal"><a href="#__codelineno-0-296">296</a></span>
<span class="normal"><a href="#__codelineno-0-297">297</a></span>
<span class="normal"><a href="#__codelineno-0-298">298</a></span>
<span class="normal"><a href="#__codelineno-0-299">299</a></span>
<span class="normal"><a href="#__codelineno-0-300">300</a></span>
<span class="normal"><a href="#__codelineno-0-301">301</a></span>
<span class="normal"><a href="#__codelineno-0-302">302</a></span>
<span class="normal"><a href="#__codelineno-0-303">303</a></span>
<span class="normal"><a href="#__codelineno-0-304">304</a></span>
<span class="normal"><a href="#__codelineno-0-305">305</a></span>
<span class="normal"><a href="#__codelineno-0-306">306</a></span>
<span class="normal"><a href="#__codelineno-0-307">307</a></span>
<span class="normal"><a href="#__codelineno-0-308">308</a></span>
<span class="normal"><a href="#__codelineno-0-309">309</a></span>
<span class="normal"><a href="#__codelineno-0-310">310</a></span>
<span class="normal"><a href="#__codelineno-0-311">311</a></span>
<span class="normal"><a href="#__codelineno-0-312">312</a></span>
<span class="normal"><a href="#__codelineno-0-313">313</a></span>
<span class="normal"><a href="#__codelineno-0-314">314</a></span>
<span class="normal"><a href="#__codelineno-0-315">315</a></span>
<span class="normal"><a href="#__codelineno-0-316">316</a></span>
<span class="normal"><a href="#__codelineno-0-317">317</a></span>
<span class="normal"><a href="#__codelineno-0-318">318</a></span>
<span class="normal"><a href="#__codelineno-0-319">319</a></span>
<span class="normal"><a href="#__codelineno-0-320">320</a></span>
<span class="normal"><a href="#__codelineno-0-321">321</a></span>
<span class="normal"><a href="#__codelineno-0-322">322</a></span>
<span class="normal"><a href="#__codelineno-0-323">323</a></span>
<span class="normal"><a href="#__codelineno-0-324">324</a></span>
<span class="normal"><a href="#__codelineno-0-325">325</a></span>
<span class="normal"><a href="#__codelineno-0-326">326</a></span>
<span class="normal"><a href="#__codelineno-0-327">327</a></span>
<span class="normal"><a href="#__codelineno-0-328">328</a></span>
<span class="normal"><a href="#__codelineno-0-329">329</a></span>
<span class="normal"><a href="#__codelineno-0-330">330</a></span>
<span class="normal"><a href="#__codelineno-0-331">331</a></span>
<span class="normal"><a href="#__codelineno-0-332">332</a></span>
<span class="normal"><a href="#__codelineno-0-333">333</a></span>
<span class="normal"><a href="#__codelineno-0-334">334</a></span>
<span class="normal"><a href="#__codelineno-0-335">335</a></span>
<span class="normal"><a href="#__codelineno-0-336">336</a></span>
<span class="normal"><a href="#__codelineno-0-337">337</a></span>
<span class="normal"><a href="#__codelineno-0-338">338</a></span>
<span class="normal"><a href="#__codelineno-0-339">339</a></span>
<span class="normal"><a href="#__codelineno-0-340">340</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="k">class</span><span class="w"> </span><span class="nc">TableMetadataCommonFields</span><span class="p">(</span><span class="n">IcebergBaseModel</span><span class="p">):</span>
<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Metadata for an Iceberg table as specified in the Apache Iceberg spec.</span>
<a id="__codelineno-0-130" name="__codelineno-0-130"></a>
<a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="sd"> https://iceberg.apache.org/spec/#iceberg-table-spec</span>
<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-133" name="__codelineno-0-133"></a>
<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="n">location</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">Field</span><span class="p">()</span>
<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;The table’s base location. This is used by writers to determine where</span>
<a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sd"> to store data files, manifest files, and table metadata files.&quot;&quot;&quot;</span>
<a id="__codelineno-0-137" name="__codelineno-0-137"></a>
<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="n">table_uuid</span><span class="p">:</span> <span class="n">uuid</span><span class="o">.</span><span class="n">UUID</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;table-uuid&quot;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">)</span>
<a id="__codelineno-0-139" name="__codelineno-0-139"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A UUID that identifies the table, generated when the table is created.</span>
<a id="__codelineno-0-140" name="__codelineno-0-140"></a><span class="sd"> Implementations must throw an exception if a table’s UUID does not match</span>
<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="sd"> the expected UUID after refreshing metadata.&quot;&quot;&quot;</span>
<a id="__codelineno-0-142" name="__codelineno-0-142"></a>
<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="n">last_updated_ms</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span>
<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="n">alias</span><span class="o">=</span><span class="s2">&quot;last-updated-ms&quot;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="k">lambda</span><span class="p">:</span> <span class="n">datetime_to_millis</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">astimezone</span><span class="p">())</span>
<a id="__codelineno-0-145" name="__codelineno-0-145"></a> <span class="p">)</span>
<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Timestamp in milliseconds from the unix epoch when the table</span>
<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> was last updated. Each table metadata file should update this</span>
<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> field just before writing.&quot;&quot;&quot;</span>
<a id="__codelineno-0-149" name="__codelineno-0-149"></a>
<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="n">last_column_id</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;last-column-id&quot;</span><span class="p">)</span>
<a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;An integer; the highest assigned column ID for the table.</span>
<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="sd"> This is used to ensure fields are always assigned an unused ID</span>
<a id="__codelineno-0-153" name="__codelineno-0-153"></a><span class="sd"> when evolving schemas.&quot;&quot;&quot;</span>
<a id="__codelineno-0-154" name="__codelineno-0-154"></a>
<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="n">schemas</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="n">Schema</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-0-156" name="__codelineno-0-156"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A list of schemas, stored as objects with schema-id.&quot;&quot;&quot;</span>
<a id="__codelineno-0-157" name="__codelineno-0-157"></a>
<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="n">current_schema_id</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;current-schema-id&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">DEFAULT_SCHEMA_ID</span><span class="p">)</span>
<a id="__codelineno-0-159" name="__codelineno-0-159"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;ID of the table’s current schema.&quot;&quot;&quot;</span>
<a id="__codelineno-0-160" name="__codelineno-0-160"></a>
<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="n">partition_specs</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="n">PartitionSpec</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;partition-specs&quot;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-0-162" name="__codelineno-0-162"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A list of partition specs, stored as full partition spec objects.&quot;&quot;&quot;</span>
<a id="__codelineno-0-163" name="__codelineno-0-163"></a>
<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="n">default_spec_id</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;default-spec-id&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">INITIAL_SPEC_ID</span><span class="p">)</span>
<a id="__codelineno-0-165" name="__codelineno-0-165"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;ID of the “current” spec that writers should use by default.&quot;&quot;&quot;</span>
<a id="__codelineno-0-166" name="__codelineno-0-166"></a>
<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="n">last_partition_id</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;last-partition-id&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
<a id="__codelineno-0-168" name="__codelineno-0-168"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;An integer; the highest assigned partition field ID across all</span>
<a id="__codelineno-0-169" name="__codelineno-0-169"></a><span class="sd"> partition specs for the table. This is used to ensure partition fields</span>
<a id="__codelineno-0-170" name="__codelineno-0-170"></a><span class="sd"> are always assigned an unused ID when evolving specs.&quot;&quot;&quot;</span>
<a id="__codelineno-0-171" name="__codelineno-0-171"></a>
<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="n">properties</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">dict</span><span class="p">)</span>
<a id="__codelineno-0-173" name="__codelineno-0-173"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A string to string map of table properties. This is used to</span>
<a id="__codelineno-0-174" name="__codelineno-0-174"></a><span class="sd"> control settings that affect reading and writing and is not intended</span>
<a id="__codelineno-0-175" name="__codelineno-0-175"></a><span class="sd"> to be used for arbitrary metadata. For example, commit.retry.num-retries</span>
<a id="__codelineno-0-176" name="__codelineno-0-176"></a><span class="sd"> is used to control the number of commit retries.&quot;&quot;&quot;</span>
<a id="__codelineno-0-177" name="__codelineno-0-177"></a>
<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="n">current_snapshot_id</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;current-snapshot-id&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
<a id="__codelineno-0-179" name="__codelineno-0-179"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;ID of the current table snapshot.&quot;&quot;&quot;</span>
<a id="__codelineno-0-180" name="__codelineno-0-180"></a>
<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="n">snapshots</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="n">Snapshot</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-0-182" name="__codelineno-0-182"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A list of valid snapshots. Valid snapshots are snapshots for which</span>
<a id="__codelineno-0-183" name="__codelineno-0-183"></a><span class="sd"> all data files exist in the file system. A data file must not be</span>
<a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="sd"> deleted from the file system until the last snapshot in which it was</span>
<a id="__codelineno-0-185" name="__codelineno-0-185"></a><span class="sd"> listed is garbage collected.&quot;&quot;&quot;</span>
<a id="__codelineno-0-186" name="__codelineno-0-186"></a>
<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="n">snapshot_log</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="n">SnapshotLogEntry</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;snapshot-log&quot;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-0-188" name="__codelineno-0-188"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A list (optional) of timestamp and snapshot ID pairs that encodes</span>
<a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="sd"> changes to the current snapshot for the table. Each time the</span>
<a id="__codelineno-0-190" name="__codelineno-0-190"></a><span class="sd"> current-snapshot-id is changed, a new entry should be added with the</span>
<a id="__codelineno-0-191" name="__codelineno-0-191"></a><span class="sd"> last-updated-ms and the new current-snapshot-id. When snapshots are</span>
<a id="__codelineno-0-192" name="__codelineno-0-192"></a><span class="sd"> expired from the list of valid snapshots, all entries before a snapshot</span>
<a id="__codelineno-0-193" name="__codelineno-0-193"></a><span class="sd"> that has expired should be removed.&quot;&quot;&quot;</span>
<a id="__codelineno-0-194" name="__codelineno-0-194"></a>
<a id="__codelineno-0-195" name="__codelineno-0-195"></a> <span class="n">metadata_log</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="n">MetadataLogEntry</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;metadata-log&quot;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-0-196" name="__codelineno-0-196"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A list (optional) of timestamp and metadata file location pairs that</span>
<a id="__codelineno-0-197" name="__codelineno-0-197"></a><span class="sd"> encodes changes to the previous metadata files for the table. Each time</span>
<a id="__codelineno-0-198" name="__codelineno-0-198"></a><span class="sd"> a new metadata file is created, a new entry of the previous metadata</span>
<a id="__codelineno-0-199" name="__codelineno-0-199"></a><span class="sd"> file location should be added to the list. Tables can be configured to</span>
<a id="__codelineno-0-200" name="__codelineno-0-200"></a><span class="sd"> remove oldest metadata log entries and keep a fixed-size log of the most</span>
<a id="__codelineno-0-201" name="__codelineno-0-201"></a><span class="sd"> recent entries after a commit.&quot;&quot;&quot;</span>
<a id="__codelineno-0-202" name="__codelineno-0-202"></a>
<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="n">sort_orders</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="n">SortOrder</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;sort-orders&quot;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-0-204" name="__codelineno-0-204"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A list of sort orders, stored as full sort order objects.&quot;&quot;&quot;</span>
<a id="__codelineno-0-205" name="__codelineno-0-205"></a>
<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="n">default_sort_order_id</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;default-sort-order-id&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">UNSORTED_SORT_ORDER_ID</span><span class="p">)</span>
<a id="__codelineno-0-207" name="__codelineno-0-207"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Default sort order id of the table. Note that this could be used by</span>
<a id="__codelineno-0-208" name="__codelineno-0-208"></a><span class="sd"> writers, but is not used when reading because reads use the specs stored</span>
<a id="__codelineno-0-209" name="__codelineno-0-209"></a><span class="sd"> in manifest files.&quot;&quot;&quot;</span>
<a id="__codelineno-0-210" name="__codelineno-0-210"></a>
<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="n">refs</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">SnapshotRef</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">dict</span><span class="p">)</span>
<a id="__codelineno-0-212" name="__codelineno-0-212"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A map of snapshot references.</span>
<a id="__codelineno-0-213" name="__codelineno-0-213"></a><span class="sd"> The map keys are the unique snapshot reference names in the table,</span>
<a id="__codelineno-0-214" name="__codelineno-0-214"></a><span class="sd"> and the map values are snapshot reference objects.</span>
<a id="__codelineno-0-215" name="__codelineno-0-215"></a><span class="sd"> There is always a main branch reference pointing to the</span>
<a id="__codelineno-0-216" name="__codelineno-0-216"></a><span class="sd"> current-snapshot-id even if the refs map is null.&quot;&quot;&quot;</span>
<a id="__codelineno-0-217" name="__codelineno-0-217"></a>
<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="n">statistics</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="n">StatisticsFile</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-0-219" name="__codelineno-0-219"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A optional list of table statistics files.</span>
<a id="__codelineno-0-220" name="__codelineno-0-220"></a><span class="sd"> Table statistics files are valid Puffin files. Statistics are</span>
<a id="__codelineno-0-221" name="__codelineno-0-221"></a><span class="sd"> informational. A reader can choose to ignore statistics</span>
<a id="__codelineno-0-222" name="__codelineno-0-222"></a><span class="sd"> information. Statistics support is not required to read the</span>
<a id="__codelineno-0-223" name="__codelineno-0-223"></a><span class="sd"> table correctly. A table can contain many statistics files</span>
<a id="__codelineno-0-224" name="__codelineno-0-224"></a><span class="sd"> associated with different table snapshots.&quot;&quot;&quot;</span>
<a id="__codelineno-0-225" name="__codelineno-0-225"></a>
<a id="__codelineno-0-226" name="__codelineno-0-226"></a> <span class="n">partition_statistics</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="n">PartitionStatisticsFile</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;partition-statistics&quot;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-0-227" name="__codelineno-0-227"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A optional list of partition statistics files.</span>
<a id="__codelineno-0-228" name="__codelineno-0-228"></a><span class="sd"> Partition statistics are not required for reading or planning</span>
<a id="__codelineno-0-229" name="__codelineno-0-229"></a><span class="sd"> and readers may ignore them. Each table snapshot may be associated</span>
<a id="__codelineno-0-230" name="__codelineno-0-230"></a><span class="sd"> with at most one partition statistics file. A writer can optionally</span>
<a id="__codelineno-0-231" name="__codelineno-0-231"></a><span class="sd"> write the partition statistics file during each write operation,</span>
<a id="__codelineno-0-232" name="__codelineno-0-232"></a><span class="sd"> or it can also be computed on demand.&quot;&quot;&quot;</span>
<a id="__codelineno-0-233" name="__codelineno-0-233"></a>
<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="c1"># validators</span>
<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="nd">@field_validator</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s2">&quot;before&quot;</span><span class="p">)</span>
<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="k">def</span><span class="w"> </span><span class="nf">transform_properties_dict_value_to_str</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]:</span>
<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="k">return</span> <span class="n">transform_dict_value_to_str</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span>
<a id="__codelineno-0-238" name="__codelineno-0-238"></a>
<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="k">def</span><span class="w"> </span><span class="nf">snapshot_by_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">snapshot_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Snapshot</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-240" name="__codelineno-0-240"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the snapshot by snapshot_id.&quot;&quot;&quot;</span>
<a id="__codelineno-0-241" name="__codelineno-0-241"></a> <span class="k">return</span> <span class="nb">next</span><span class="p">((</span><span class="n">snapshot</span> <span class="k">for</span> <span class="n">snapshot</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">snapshots</span> <span class="k">if</span> <span class="n">snapshot</span><span class="o">.</span><span class="n">snapshot_id</span> <span class="o">==</span> <span class="n">snapshot_id</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
<a id="__codelineno-0-242" name="__codelineno-0-242"></a>
<a id="__codelineno-0-243" name="__codelineno-0-243"></a> <span class="k">def</span><span class="w"> </span><span class="nf">schema_by_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-244" name="__codelineno-0-244"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the schema by schema_id.&quot;&quot;&quot;</span>
<a id="__codelineno-0-245" name="__codelineno-0-245"></a> <span class="k">return</span> <span class="nb">next</span><span class="p">((</span><span class="n">schema</span> <span class="k">for</span> <span class="n">schema</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">schemas</span> <span class="k">if</span> <span class="n">schema</span><span class="o">.</span><span class="n">schema_id</span> <span class="o">==</span> <span class="n">schema_id</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
<a id="__codelineno-0-246" name="__codelineno-0-246"></a>
<a id="__codelineno-0-247" name="__codelineno-0-247"></a> <span class="k">def</span><span class="w"> </span><span class="nf">schema</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span><span class="p">:</span>
<a id="__codelineno-0-248" name="__codelineno-0-248"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the schema for this table.&quot;&quot;&quot;</span>
<a id="__codelineno-0-249" name="__codelineno-0-249"></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">schema</span> <span class="k">for</span> <span class="n">schema</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">schemas</span> <span class="k">if</span> <span class="n">schema</span><span class="o">.</span><span class="n">schema_id</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_schema_id</span><span class="p">)</span>
<a id="__codelineno-0-250" name="__codelineno-0-250"></a>
<a id="__codelineno-0-251" name="__codelineno-0-251"></a> <span class="k">def</span><span class="w"> </span><span class="nf">name_mapping</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">NameMapping</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-252" name="__codelineno-0-252"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the table&#39;s field-id NameMapping.&quot;&quot;&quot;</span>
<a id="__codelineno-0-253" name="__codelineno-0-253"></a> <span class="k">if</span> <span class="n">name_mapping_json</span> <span class="o">:=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;schema.name-mapping.default&quot;</span><span class="p">):</span>
<a id="__codelineno-0-254" name="__codelineno-0-254"></a> <span class="k">return</span> <span class="n">parse_mapping_from_json</span><span class="p">(</span><span class="n">name_mapping_json</span><span class="p">)</span>
<a id="__codelineno-0-255" name="__codelineno-0-255"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-256" name="__codelineno-0-256"></a> <span class="k">return</span> <span class="kc">None</span>
<a id="__codelineno-0-257" name="__codelineno-0-257"></a>
<a id="__codelineno-0-258" name="__codelineno-0-258"></a> <span class="k">def</span><span class="w"> </span><span class="nf">spec</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">PartitionSpec</span><span class="p">:</span>
<a id="__codelineno-0-259" name="__codelineno-0-259"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the partition spec of this table.&quot;&quot;&quot;</span>
<a id="__codelineno-0-260" name="__codelineno-0-260"></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">spec</span> <span class="k">for</span> <span class="n">spec</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_specs</span> <span class="k">if</span> <span class="n">spec</span><span class="o">.</span><span class="n">spec_id</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_spec_id</span><span class="p">)</span>
<a id="__codelineno-0-261" name="__codelineno-0-261"></a>
<a id="__codelineno-0-262" name="__codelineno-0-262"></a> <span class="k">def</span><span class="w"> </span><span class="nf">specs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">PartitionSpec</span><span class="p">]:</span>
<a id="__codelineno-0-263" name="__codelineno-0-263"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return a dict the partition specs this table.&quot;&quot;&quot;</span>
<a id="__codelineno-0-264" name="__codelineno-0-264"></a> <span class="k">return</span> <span class="p">{</span><span class="n">spec</span><span class="o">.</span><span class="n">spec_id</span><span class="p">:</span> <span class="n">spec</span> <span class="k">for</span> <span class="n">spec</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_specs</span><span class="p">}</span>
<a id="__codelineno-0-265" name="__codelineno-0-265"></a>
<a id="__codelineno-0-266" name="__codelineno-0-266"></a> <span class="k">def</span><span class="w"> </span><span class="nf">specs_struct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">spec_ids</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">StructType</span><span class="p">:</span>
<a id="__codelineno-0-267" name="__codelineno-0-267"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Produce a struct of the combined PartitionSpecs.</span>
<a id="__codelineno-0-268" name="__codelineno-0-268"></a>
<a id="__codelineno-0-269" name="__codelineno-0-269"></a><span class="sd"> The partition fields should be optional: Partition fields may be added later,</span>
<a id="__codelineno-0-270" name="__codelineno-0-270"></a><span class="sd"> in which case not all files would have the result field, and it may be null.</span>
<a id="__codelineno-0-271" name="__codelineno-0-271"></a>
<a id="__codelineno-0-272" name="__codelineno-0-272"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-273" name="__codelineno-0-273"></a><span class="sd"> spec_ids: Optional iterable of spec IDs to include. When not provided,</span>
<a id="__codelineno-0-274" name="__codelineno-0-274"></a><span class="sd"> all table specs are used.</span>
<a id="__codelineno-0-275" name="__codelineno-0-275"></a>
<a id="__codelineno-0-276" name="__codelineno-0-276"></a><span class="sd"> :return: A StructType that represents the combined PartitionSpecs of the table</span>
<a id="__codelineno-0-277" name="__codelineno-0-277"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-278" name="__codelineno-0-278"></a> <span class="n">specs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">specs</span><span class="p">()</span>
<a id="__codelineno-0-279" name="__codelineno-0-279"></a> <span class="n">selected_specs</span> <span class="o">=</span> <span class="n">specs</span><span class="o">.</span><span class="n">values</span><span class="p">()</span> <span class="k">if</span> <span class="n">spec_ids</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[</span><span class="n">specs</span><span class="p">[</span><span class="n">spec_id</span><span class="p">]</span> <span class="k">for</span> <span class="n">spec_id</span> <span class="ow">in</span> <span class="n">spec_ids</span> <span class="k">if</span> <span class="n">spec_id</span> <span class="ow">in</span> <span class="n">specs</span><span class="p">]</span>
<a id="__codelineno-0-280" name="__codelineno-0-280"></a>
<a id="__codelineno-0-281" name="__codelineno-0-281"></a> <span class="c1"># Collect all the fields</span>
<a id="__codelineno-0-282" name="__codelineno-0-282"></a> <span class="n">struct_fields</span> <span class="o">=</span> <span class="p">{</span><span class="n">field</span><span class="o">.</span><span class="n">field_id</span><span class="p">:</span> <span class="n">field</span> <span class="k">for</span> <span class="n">spec</span> <span class="ow">in</span> <span class="n">selected_specs</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">spec</span><span class="o">.</span><span class="n">fields</span><span class="p">}</span>
<a id="__codelineno-0-283" name="__codelineno-0-283"></a>
<a id="__codelineno-0-284" name="__codelineno-0-284"></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">()</span>
<a id="__codelineno-0-285" name="__codelineno-0-285"></a>
<a id="__codelineno-0-286" name="__codelineno-0-286"></a> <span class="n">nested_fields</span> <span class="o">=</span> <span class="p">[]</span>
<a id="__codelineno-0-287" name="__codelineno-0-287"></a> <span class="c1"># Sort them by field_id in order to get a deterministic output</span>
<a id="__codelineno-0-288" name="__codelineno-0-288"></a> <span class="k">for</span> <span class="n">field_id</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">struct_fields</span><span class="p">):</span>
<a id="__codelineno-0-289" name="__codelineno-0-289"></a> <span class="n">field</span> <span class="o">=</span> <span class="n">struct_fields</span><span class="p">[</span><span class="n">field_id</span><span class="p">]</span>
<a id="__codelineno-0-290" name="__codelineno-0-290"></a> <span class="n">source_type</span> <span class="o">=</span> <span class="n">schema</span><span class="o">.</span><span class="n">find_type</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">source_id</span><span class="p">)</span>
<a id="__codelineno-0-291" name="__codelineno-0-291"></a> <span class="n">result_type</span> <span class="o">=</span> <span class="n">field</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">result_type</span><span class="p">(</span><span class="n">source_type</span><span class="p">)</span>
<a id="__codelineno-0-292" name="__codelineno-0-292"></a> <span class="n">nested_fields</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">NestedField</span><span class="p">(</span><span class="n">field_id</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">field_id</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">result_type</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
<a id="__codelineno-0-293" name="__codelineno-0-293"></a>
<a id="__codelineno-0-294" name="__codelineno-0-294"></a> <span class="k">return</span> <span class="n">StructType</span><span class="p">(</span><span class="o">*</span><span class="n">nested_fields</span><span class="p">)</span>
<a id="__codelineno-0-295" name="__codelineno-0-295"></a>
<a id="__codelineno-0-296" name="__codelineno-0-296"></a> <span class="k">def</span><span class="w"> </span><span class="nf">new_snapshot_id</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<a id="__codelineno-0-297" name="__codelineno-0-297"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Generate a new snapshot-id that&#39;s not in use.&quot;&quot;&quot;</span>
<a id="__codelineno-0-298" name="__codelineno-0-298"></a> <span class="n">snapshot_id</span> <span class="o">=</span> <span class="n">_generate_snapshot_id</span><span class="p">()</span>
<a id="__codelineno-0-299" name="__codelineno-0-299"></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">snapshot_by_id</span><span class="p">(</span><span class="n">snapshot_id</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-300" name="__codelineno-0-300"></a> <span class="n">snapshot_id</span> <span class="o">=</span> <span class="n">_generate_snapshot_id</span><span class="p">()</span>
<a id="__codelineno-0-301" name="__codelineno-0-301"></a>
<a id="__codelineno-0-302" name="__codelineno-0-302"></a> <span class="k">return</span> <span class="n">snapshot_id</span>
<a id="__codelineno-0-303" name="__codelineno-0-303"></a>
<a id="__codelineno-0-304" name="__codelineno-0-304"></a> <span class="k">def</span><span class="w"> </span><span class="nf">snapshot_by_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Snapshot</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-305" name="__codelineno-0-305"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the snapshot referenced by the given name or null if no such reference exists.&quot;&quot;&quot;</span>
<a id="__codelineno-0-306" name="__codelineno-0-306"></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-307" name="__codelineno-0-307"></a> <span class="n">name</span> <span class="o">=</span> <span class="n">MAIN_BRANCH</span>
<a id="__codelineno-0-308" name="__codelineno-0-308"></a> <span class="k">if</span> <span class="n">ref</span> <span class="o">:=</span> <span class="bp">self</span><span class="o">.</span><span class="n">refs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<a id="__codelineno-0-309" name="__codelineno-0-309"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">snapshot_by_id</span><span class="p">(</span><span class="n">ref</span><span class="o">.</span><span class="n">snapshot_id</span><span class="p">)</span>
<a id="__codelineno-0-310" name="__codelineno-0-310"></a> <span class="k">return</span> <span class="kc">None</span>
<a id="__codelineno-0-311" name="__codelineno-0-311"></a>
<a id="__codelineno-0-312" name="__codelineno-0-312"></a> <span class="k">def</span><span class="w"> </span><span class="nf">current_snapshot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Snapshot</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-313" name="__codelineno-0-313"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the current snapshot for this table, or None if there is no current snapshot.&quot;&quot;&quot;</span>
<a id="__codelineno-0-314" name="__codelineno-0-314"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_snapshot_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-315" name="__codelineno-0-315"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">snapshot_by_id</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">current_snapshot_id</span><span class="p">)</span>
<a id="__codelineno-0-316" name="__codelineno-0-316"></a> <span class="k">return</span> <span class="kc">None</span>
<a id="__codelineno-0-317" name="__codelineno-0-317"></a>
<a id="__codelineno-0-318" name="__codelineno-0-318"></a> <span class="k">def</span><span class="w"> </span><span class="nf">next_sequence_number</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<a id="__codelineno-0-319" name="__codelineno-0-319"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_sequence_number</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_version</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">INITIAL_SEQUENCE_NUMBER</span>
<a id="__codelineno-0-320" name="__codelineno-0-320"></a>
<a id="__codelineno-0-321" name="__codelineno-0-321"></a> <span class="k">def</span><span class="w"> </span><span class="nf">sort_order</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SortOrder</span><span class="p">:</span>
<a id="__codelineno-0-322" name="__codelineno-0-322"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the current sort order for this table, or UNSORTED_SORT_ORDER if there is no sort order.&quot;&quot;&quot;</span>
<a id="__codelineno-0-323" name="__codelineno-0-323"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort_order_by_id</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">default_sort_order_id</span><span class="p">)</span> <span class="ow">or</span> <span class="n">UNSORTED_SORT_ORDER</span>
<a id="__codelineno-0-324" name="__codelineno-0-324"></a>
<a id="__codelineno-0-325" name="__codelineno-0-325"></a> <span class="k">def</span><span class="w"> </span><span class="nf">sort_order_by_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sort_order_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SortOrder</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-326" name="__codelineno-0-326"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the sort order by sort_order_id.&quot;&quot;&quot;</span>
<a id="__codelineno-0-327" name="__codelineno-0-327"></a> <span class="k">return</span> <span class="nb">next</span><span class="p">((</span><span class="n">sort_order</span> <span class="k">for</span> <span class="n">sort_order</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort_orders</span> <span class="k">if</span> <span class="n">sort_order</span><span class="o">.</span><span class="n">order_id</span> <span class="o">==</span> <span class="n">sort_order_id</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
<a id="__codelineno-0-328" name="__codelineno-0-328"></a>
<a id="__codelineno-0-329" name="__codelineno-0-329"></a> <span class="nd">@field_serializer</span><span class="p">(</span><span class="s2">&quot;current_snapshot_id&quot;</span><span class="p">)</span>
<a id="__codelineno-0-330" name="__codelineno-0-330"></a> <span class="k">def</span><span class="w"> </span><span class="nf">serialize_current_snapshot_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">current_snapshot_id</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-331" name="__codelineno-0-331"></a> <span class="k">if</span> <span class="n">current_snapshot_id</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">Config</span><span class="p">()</span><span class="o">.</span><span class="n">get_bool</span><span class="p">(</span><span class="s2">&quot;legacy-current-snapshot-id&quot;</span><span class="p">):</span>
<a id="__codelineno-0-332" name="__codelineno-0-332"></a> <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<a id="__codelineno-0-333" name="__codelineno-0-333"></a> <span class="k">return</span> <span class="n">current_snapshot_id</span>
<a id="__codelineno-0-334" name="__codelineno-0-334"></a>
<a id="__codelineno-0-335" name="__codelineno-0-335"></a> <span class="nd">@field_serializer</span><span class="p">(</span><span class="s2">&quot;snapshots&quot;</span><span class="p">)</span>
<a id="__codelineno-0-336" name="__codelineno-0-336"></a> <span class="k">def</span><span class="w"> </span><span class="nf">serialize_snapshots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">snapshots</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="n">Snapshot</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">Snapshot</span><span class="p">]:</span>
<a id="__codelineno-0-337" name="__codelineno-0-337"></a> <span class="c1"># Snapshot field `sequence-number` should not be written for v1 metadata</span>
<a id="__codelineno-0-338" name="__codelineno-0-338"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_version</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<a id="__codelineno-0-339" name="__codelineno-0-339"></a> <span class="k">return</span> <span class="p">[</span><span class="n">snapshot</span><span class="o">.</span><span class="n">model_copy</span><span class="p">(</span><span class="n">update</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;sequence_number&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">})</span> <span class="k">for</span> <span class="n">snapshot</span> <span class="ow">in</span> <span class="n">snapshots</span><span class="p">]</span>
<a id="__codelineno-0-340" name="__codelineno-0-340"></a> <span class="k">return</span> <span class="n">snapshots</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.current_schema_id" class="doc doc-heading">
<code class="highlight language-python"><span class="n">current_schema_id</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;current-schema-id&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">DEFAULT_SCHEMA_ID</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.current_schema_id" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>ID of the table’s current schema.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.current_snapshot_id" class="doc doc-heading">
<code class="highlight language-python"><span class="n">current_snapshot_id</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;current-snapshot-id&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.current_snapshot_id" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>ID of the current table snapshot.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.default_sort_order_id" class="doc doc-heading">
<code class="highlight language-python"><span class="n">default_sort_order_id</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;default-sort-order-id&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">UNSORTED_SORT_ORDER_ID</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.default_sort_order_id" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Default sort order id of the table. Note that this could be used by
writers, but is not used when reading because reads use the specs stored
in manifest files.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.default_spec_id" class="doc doc-heading">
<code class="highlight language-python"><span class="n">default_spec_id</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;default-spec-id&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">INITIAL_SPEC_ID</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.default_spec_id" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>ID of the “current” spec that writers should use by default.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.last_column_id" class="doc doc-heading">
<code class="highlight language-python"><span class="n">last_column_id</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;last-column-id&#39;</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.last_column_id" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>An integer; the highest assigned column ID for the table.
This is used to ensure fields are always assigned an unused ID
when evolving schemas.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.last_partition_id" class="doc doc-heading">
<code class="highlight language-python"><span class="n">last_partition_id</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;last-partition-id&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.last_partition_id" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>An integer; the highest assigned partition field ID across all
partition specs for the table. This is used to ensure partition fields
are always assigned an unused ID when evolving specs.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.last_updated_ms" class="doc doc-heading">
<code class="highlight language-python"><span class="n">last_updated_ms</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;last-updated-ms&#39;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="n">datetime_to_millis</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">astimezone</span><span class="p">())))</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.last_updated_ms" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Timestamp in milliseconds from the unix epoch when the table
was last updated. Each table metadata file should update this
field just before writing.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.location" class="doc doc-heading">
<code class="highlight language-python"><span class="n">location</span> <span class="o">=</span> <span class="n">Field</span><span class="p">()</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.location" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>The table’s base location. This is used by writers to determine where
to store data files, manifest files, and table metadata files.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.metadata_log" class="doc doc-heading">
<code class="highlight language-python"><span class="n">metadata_log</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;metadata-log&#39;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.metadata_log" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>A list (optional) of timestamp and metadata file location pairs that
encodes changes to the previous metadata files for the table. Each time
a new metadata file is created, a new entry of the previous metadata
file location should be added to the list. Tables can be configured to
remove oldest metadata log entries and keep a fixed-size log of the most
recent entries after a commit.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.partition_specs" class="doc doc-heading">
<code class="highlight language-python"><span class="n">partition_specs</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;partition-specs&#39;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.partition_specs" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>A list of partition specs, stored as full partition spec objects.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.partition_statistics" class="doc doc-heading">
<code class="highlight language-python"><span class="n">partition_statistics</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;partition-statistics&#39;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.partition_statistics" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>A optional list of partition statistics files.
Partition statistics are not required for reading or planning
and readers may ignore them. Each table snapshot may be associated
with at most one partition statistics file. A writer can optionally
write the partition statistics file during each write operation,
or it can also be computed on demand.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.properties" class="doc doc-heading">
<code class="highlight language-python"><span class="n">properties</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">dict</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.properties" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>A string to string map of table properties. This is used to
control settings that affect reading and writing and is not intended
to be used for arbitrary metadata. For example, commit.retry.num-retries
is used to control the number of commit retries.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.refs" class="doc doc-heading">
<code class="highlight language-python"><span class="n">refs</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">dict</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.refs" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>A map of snapshot references.
The map keys are the unique snapshot reference names in the table,
and the map values are snapshot reference objects.
There is always a main branch reference pointing to the
current-snapshot-id even if the refs map is null.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.schemas" class="doc doc-heading">
<code class="highlight language-python"><span class="n">schemas</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.schemas" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>A list of schemas, stored as objects with schema-id.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.snapshot_log" class="doc doc-heading">
<code class="highlight language-python"><span class="n">snapshot_log</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;snapshot-log&#39;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.snapshot_log" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>A list (optional) of timestamp and snapshot ID pairs that encodes
changes to the current snapshot for the table. Each time the
current-snapshot-id is changed, a new entry should be added with the
last-updated-ms and the new current-snapshot-id. When snapshots are
expired from the list of valid snapshots, all entries before a snapshot
that has expired should be removed.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.snapshots" class="doc doc-heading">
<code class="highlight language-python"><span class="n">snapshots</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.snapshots" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>A list of valid snapshots. Valid snapshots are snapshots for which
all data files exist in the file system. A data file must not be
deleted from the file system until the last snapshot in which it was
listed is garbage collected.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.sort_orders" class="doc doc-heading">
<code class="highlight language-python"><span class="n">sort_orders</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;sort-orders&#39;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.sort_orders" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>A list of sort orders, stored as full sort order objects.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.statistics" class="doc doc-heading">
<code class="highlight language-python"><span class="n">statistics</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.statistics" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>A optional list of table statistics files.
Table statistics files are valid Puffin files. Statistics are
informational. A reader can choose to ignore statistics
information. Statistics support is not required to read the
table correctly. A table can contain many statistics files
associated with different table snapshots.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.table_uuid" class="doc doc-heading">
<code class="highlight language-python"><span class="n">table_uuid</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;table-uuid&#39;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="p">(</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">))</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.table_uuid" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>A UUID that identifies the table, generated when the table is created.
Implementations must throw an exception if a table’s UUID does not match
the expected UUID after refreshing metadata.</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.current_snapshot" class="doc doc-heading">
<code class="highlight language-python"><span class="n">current_snapshot</span><span class="p">()</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.current_snapshot" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Get the current snapshot for this table, or None if there is no current snapshot.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-312">312</a></span>
<span class="normal"><a href="#__codelineno-0-313">313</a></span>
<span class="normal"><a href="#__codelineno-0-314">314</a></span>
<span class="normal"><a href="#__codelineno-0-315">315</a></span>
<span class="normal"><a href="#__codelineno-0-316">316</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-312" name="__codelineno-0-312"></a><span class="k">def</span><span class="w"> </span><span class="nf">current_snapshot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Snapshot</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-313" name="__codelineno-0-313"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the current snapshot for this table, or None if there is no current snapshot.&quot;&quot;&quot;</span>
<a id="__codelineno-0-314" name="__codelineno-0-314"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_snapshot_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-315" name="__codelineno-0-315"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">snapshot_by_id</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">current_snapshot_id</span><span class="p">)</span>
<a id="__codelineno-0-316" name="__codelineno-0-316"></a> <span class="k">return</span> <span class="kc">None</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.name_mapping" class="doc doc-heading">
<code class="highlight language-python"><span class="n">name_mapping</span><span class="p">()</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.name_mapping" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Return the table's field-id NameMapping.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-251">251</a></span>
<span class="normal"><a href="#__codelineno-0-252">252</a></span>
<span class="normal"><a href="#__codelineno-0-253">253</a></span>
<span class="normal"><a href="#__codelineno-0-254">254</a></span>
<span class="normal"><a href="#__codelineno-0-255">255</a></span>
<span class="normal"><a href="#__codelineno-0-256">256</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-251" name="__codelineno-0-251"></a><span class="k">def</span><span class="w"> </span><span class="nf">name_mapping</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">NameMapping</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-252" name="__codelineno-0-252"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the table&#39;s field-id NameMapping.&quot;&quot;&quot;</span>
<a id="__codelineno-0-253" name="__codelineno-0-253"></a> <span class="k">if</span> <span class="n">name_mapping_json</span> <span class="o">:=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;schema.name-mapping.default&quot;</span><span class="p">):</span>
<a id="__codelineno-0-254" name="__codelineno-0-254"></a> <span class="k">return</span> <span class="n">parse_mapping_from_json</span><span class="p">(</span><span class="n">name_mapping_json</span><span class="p">)</span>
<a id="__codelineno-0-255" name="__codelineno-0-255"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-256" name="__codelineno-0-256"></a> <span class="k">return</span> <span class="kc">None</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.new_snapshot_id" class="doc doc-heading">
<code class="highlight language-python"><span class="n">new_snapshot_id</span><span class="p">()</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.new_snapshot_id" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Generate a new snapshot-id that's not in use.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-296">296</a></span>
<span class="normal"><a href="#__codelineno-0-297">297</a></span>
<span class="normal"><a href="#__codelineno-0-298">298</a></span>
<span class="normal"><a href="#__codelineno-0-299">299</a></span>
<span class="normal"><a href="#__codelineno-0-300">300</a></span>
<span class="normal"><a href="#__codelineno-0-301">301</a></span>
<span class="normal"><a href="#__codelineno-0-302">302</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-296" name="__codelineno-0-296"></a><span class="k">def</span><span class="w"> </span><span class="nf">new_snapshot_id</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<a id="__codelineno-0-297" name="__codelineno-0-297"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Generate a new snapshot-id that&#39;s not in use.&quot;&quot;&quot;</span>
<a id="__codelineno-0-298" name="__codelineno-0-298"></a> <span class="n">snapshot_id</span> <span class="o">=</span> <span class="n">_generate_snapshot_id</span><span class="p">()</span>
<a id="__codelineno-0-299" name="__codelineno-0-299"></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">snapshot_by_id</span><span class="p">(</span><span class="n">snapshot_id</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-300" name="__codelineno-0-300"></a> <span class="n">snapshot_id</span> <span class="o">=</span> <span class="n">_generate_snapshot_id</span><span class="p">()</span>
<a id="__codelineno-0-301" name="__codelineno-0-301"></a>
<a id="__codelineno-0-302" name="__codelineno-0-302"></a> <span class="k">return</span> <span class="n">snapshot_id</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.schema" class="doc doc-heading">
<code class="highlight language-python"><span class="n">schema</span><span class="p">()</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.schema" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Return the schema for this table.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-247">247</a></span>
<span class="normal"><a href="#__codelineno-0-248">248</a></span>
<span class="normal"><a href="#__codelineno-0-249">249</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-247" name="__codelineno-0-247"></a><span class="k">def</span><span class="w"> </span><span class="nf">schema</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span><span class="p">:</span>
<a id="__codelineno-0-248" name="__codelineno-0-248"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the schema for this table.&quot;&quot;&quot;</span>
<a id="__codelineno-0-249" name="__codelineno-0-249"></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">schema</span> <span class="k">for</span> <span class="n">schema</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">schemas</span> <span class="k">if</span> <span class="n">schema</span><span class="o">.</span><span class="n">schema_id</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_schema_id</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.schema_by_id" class="doc doc-heading">
<code class="highlight language-python"><span class="n">schema_by_id</span><span class="p">(</span><span class="n">schema_id</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.schema_by_id" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Get the schema by schema_id.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-243">243</a></span>
<span class="normal"><a href="#__codelineno-0-244">244</a></span>
<span class="normal"><a href="#__codelineno-0-245">245</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-243" name="__codelineno-0-243"></a><span class="k">def</span><span class="w"> </span><span class="nf">schema_by_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-244" name="__codelineno-0-244"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the schema by schema_id.&quot;&quot;&quot;</span>
<a id="__codelineno-0-245" name="__codelineno-0-245"></a> <span class="k">return</span> <span class="nb">next</span><span class="p">((</span><span class="n">schema</span> <span class="k">for</span> <span class="n">schema</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">schemas</span> <span class="k">if</span> <span class="n">schema</span><span class="o">.</span><span class="n">schema_id</span> <span class="o">==</span> <span class="n">schema_id</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.snapshot_by_id" class="doc doc-heading">
<code class="highlight language-python"><span class="n">snapshot_by_id</span><span class="p">(</span><span class="n">snapshot_id</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.snapshot_by_id" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Get the snapshot by snapshot_id.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-239">239</a></span>
<span class="normal"><a href="#__codelineno-0-240">240</a></span>
<span class="normal"><a href="#__codelineno-0-241">241</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-239" name="__codelineno-0-239"></a><span class="k">def</span><span class="w"> </span><span class="nf">snapshot_by_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">snapshot_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Snapshot</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-240" name="__codelineno-0-240"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the snapshot by snapshot_id.&quot;&quot;&quot;</span>
<a id="__codelineno-0-241" name="__codelineno-0-241"></a> <span class="k">return</span> <span class="nb">next</span><span class="p">((</span><span class="n">snapshot</span> <span class="k">for</span> <span class="n">snapshot</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">snapshots</span> <span class="k">if</span> <span class="n">snapshot</span><span class="o">.</span><span class="n">snapshot_id</span> <span class="o">==</span> <span class="n">snapshot_id</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.snapshot_by_name" class="doc doc-heading">
<code class="highlight language-python"><span class="n">snapshot_by_name</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.snapshot_by_name" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Return the snapshot referenced by the given name or null if no such reference exists.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-304">304</a></span>
<span class="normal"><a href="#__codelineno-0-305">305</a></span>
<span class="normal"><a href="#__codelineno-0-306">306</a></span>
<span class="normal"><a href="#__codelineno-0-307">307</a></span>
<span class="normal"><a href="#__codelineno-0-308">308</a></span>
<span class="normal"><a href="#__codelineno-0-309">309</a></span>
<span class="normal"><a href="#__codelineno-0-310">310</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-304" name="__codelineno-0-304"></a><span class="k">def</span><span class="w"> </span><span class="nf">snapshot_by_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Snapshot</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-305" name="__codelineno-0-305"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the snapshot referenced by the given name or null if no such reference exists.&quot;&quot;&quot;</span>
<a id="__codelineno-0-306" name="__codelineno-0-306"></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-307" name="__codelineno-0-307"></a> <span class="n">name</span> <span class="o">=</span> <span class="n">MAIN_BRANCH</span>
<a id="__codelineno-0-308" name="__codelineno-0-308"></a> <span class="k">if</span> <span class="n">ref</span> <span class="o">:=</span> <span class="bp">self</span><span class="o">.</span><span class="n">refs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<a id="__codelineno-0-309" name="__codelineno-0-309"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">snapshot_by_id</span><span class="p">(</span><span class="n">ref</span><span class="o">.</span><span class="n">snapshot_id</span><span class="p">)</span>
<a id="__codelineno-0-310" name="__codelineno-0-310"></a> <span class="k">return</span> <span class="kc">None</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.sort_order" class="doc doc-heading">
<code class="highlight language-python"><span class="n">sort_order</span><span class="p">()</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.sort_order" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Get the current sort order for this table, or UNSORTED_SORT_ORDER if there is no sort order.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-321">321</a></span>
<span class="normal"><a href="#__codelineno-0-322">322</a></span>
<span class="normal"><a href="#__codelineno-0-323">323</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-321" name="__codelineno-0-321"></a><span class="k">def</span><span class="w"> </span><span class="nf">sort_order</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SortOrder</span><span class="p">:</span>
<a id="__codelineno-0-322" name="__codelineno-0-322"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the current sort order for this table, or UNSORTED_SORT_ORDER if there is no sort order.&quot;&quot;&quot;</span>
<a id="__codelineno-0-323" name="__codelineno-0-323"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort_order_by_id</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">default_sort_order_id</span><span class="p">)</span> <span class="ow">or</span> <span class="n">UNSORTED_SORT_ORDER</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.sort_order_by_id" class="doc doc-heading">
<code class="highlight language-python"><span class="n">sort_order_by_id</span><span class="p">(</span><span class="n">sort_order_id</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.sort_order_by_id" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Get the sort order by sort_order_id.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-325">325</a></span>
<span class="normal"><a href="#__codelineno-0-326">326</a></span>
<span class="normal"><a href="#__codelineno-0-327">327</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-325" name="__codelineno-0-325"></a><span class="k">def</span><span class="w"> </span><span class="nf">sort_order_by_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sort_order_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SortOrder</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-326" name="__codelineno-0-326"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the sort order by sort_order_id.&quot;&quot;&quot;</span>
<a id="__codelineno-0-327" name="__codelineno-0-327"></a> <span class="k">return</span> <span class="nb">next</span><span class="p">((</span><span class="n">sort_order</span> <span class="k">for</span> <span class="n">sort_order</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort_orders</span> <span class="k">if</span> <span class="n">sort_order</span><span class="o">.</span><span class="n">order_id</span> <span class="o">==</span> <span class="n">sort_order_id</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.spec" class="doc doc-heading">
<code class="highlight language-python"><span class="n">spec</span><span class="p">()</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.spec" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Return the partition spec of this table.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-258">258</a></span>
<span class="normal"><a href="#__codelineno-0-259">259</a></span>
<span class="normal"><a href="#__codelineno-0-260">260</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-258" name="__codelineno-0-258"></a><span class="k">def</span><span class="w"> </span><span class="nf">spec</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">PartitionSpec</span><span class="p">:</span>
<a id="__codelineno-0-259" name="__codelineno-0-259"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the partition spec of this table.&quot;&quot;&quot;</span>
<a id="__codelineno-0-260" name="__codelineno-0-260"></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">spec</span> <span class="k">for</span> <span class="n">spec</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_specs</span> <span class="k">if</span> <span class="n">spec</span><span class="o">.</span><span class="n">spec_id</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_spec_id</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.specs" class="doc doc-heading">
<code class="highlight language-python"><span class="n">specs</span><span class="p">()</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.specs" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Return a dict the partition specs this table.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-262">262</a></span>
<span class="normal"><a href="#__codelineno-0-263">263</a></span>
<span class="normal"><a href="#__codelineno-0-264">264</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-262" name="__codelineno-0-262"></a><span class="k">def</span><span class="w"> </span><span class="nf">specs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">PartitionSpec</span><span class="p">]:</span>
<a id="__codelineno-0-263" name="__codelineno-0-263"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return a dict the partition specs this table.&quot;&quot;&quot;</span>
<a id="__codelineno-0-264" name="__codelineno-0-264"></a> <span class="k">return</span> <span class="p">{</span><span class="n">spec</span><span class="o">.</span><span class="n">spec_id</span><span class="p">:</span> <span class="n">spec</span> <span class="k">for</span> <span class="n">spec</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_specs</span><span class="p">}</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataCommonFields.specs_struct" class="doc doc-heading">
<code class="highlight language-python"><span class="n">specs_struct</span><span class="p">(</span><span class="n">spec_ids</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataCommonFields.specs_struct" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Produce a struct of the combined PartitionSpecs.</p>
<p>The partition fields should be optional: Partition fields may be added later,
in which case not all files would have the result field, and it may be null.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>spec_ids</code>
</td>
<td>
<code><span title="collections.abc.Iterable">Iterable</span>[<span title="int">int</span>] | None</code>
</td>
<td>
<div class="doc-md-description">
<p>Optional iterable of spec IDs to include. When not provided,
all table specs are used.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<p>:return: A StructType that represents the combined PartitionSpecs of the table</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-266">266</a></span>
<span class="normal"><a href="#__codelineno-0-267">267</a></span>
<span class="normal"><a href="#__codelineno-0-268">268</a></span>
<span class="normal"><a href="#__codelineno-0-269">269</a></span>
<span class="normal"><a href="#__codelineno-0-270">270</a></span>
<span class="normal"><a href="#__codelineno-0-271">271</a></span>
<span class="normal"><a href="#__codelineno-0-272">272</a></span>
<span class="normal"><a href="#__codelineno-0-273">273</a></span>
<span class="normal"><a href="#__codelineno-0-274">274</a></span>
<span class="normal"><a href="#__codelineno-0-275">275</a></span>
<span class="normal"><a href="#__codelineno-0-276">276</a></span>
<span class="normal"><a href="#__codelineno-0-277">277</a></span>
<span class="normal"><a href="#__codelineno-0-278">278</a></span>
<span class="normal"><a href="#__codelineno-0-279">279</a></span>
<span class="normal"><a href="#__codelineno-0-280">280</a></span>
<span class="normal"><a href="#__codelineno-0-281">281</a></span>
<span class="normal"><a href="#__codelineno-0-282">282</a></span>
<span class="normal"><a href="#__codelineno-0-283">283</a></span>
<span class="normal"><a href="#__codelineno-0-284">284</a></span>
<span class="normal"><a href="#__codelineno-0-285">285</a></span>
<span class="normal"><a href="#__codelineno-0-286">286</a></span>
<span class="normal"><a href="#__codelineno-0-287">287</a></span>
<span class="normal"><a href="#__codelineno-0-288">288</a></span>
<span class="normal"><a href="#__codelineno-0-289">289</a></span>
<span class="normal"><a href="#__codelineno-0-290">290</a></span>
<span class="normal"><a href="#__codelineno-0-291">291</a></span>
<span class="normal"><a href="#__codelineno-0-292">292</a></span>
<span class="normal"><a href="#__codelineno-0-293">293</a></span>
<span class="normal"><a href="#__codelineno-0-294">294</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-266" name="__codelineno-0-266"></a><span class="k">def</span><span class="w"> </span><span class="nf">specs_struct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">spec_ids</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">StructType</span><span class="p">:</span>
<a id="__codelineno-0-267" name="__codelineno-0-267"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Produce a struct of the combined PartitionSpecs.</span>
<a id="__codelineno-0-268" name="__codelineno-0-268"></a>
<a id="__codelineno-0-269" name="__codelineno-0-269"></a><span class="sd"> The partition fields should be optional: Partition fields may be added later,</span>
<a id="__codelineno-0-270" name="__codelineno-0-270"></a><span class="sd"> in which case not all files would have the result field, and it may be null.</span>
<a id="__codelineno-0-271" name="__codelineno-0-271"></a>
<a id="__codelineno-0-272" name="__codelineno-0-272"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-273" name="__codelineno-0-273"></a><span class="sd"> spec_ids: Optional iterable of spec IDs to include. When not provided,</span>
<a id="__codelineno-0-274" name="__codelineno-0-274"></a><span class="sd"> all table specs are used.</span>
<a id="__codelineno-0-275" name="__codelineno-0-275"></a>
<a id="__codelineno-0-276" name="__codelineno-0-276"></a><span class="sd"> :return: A StructType that represents the combined PartitionSpecs of the table</span>
<a id="__codelineno-0-277" name="__codelineno-0-277"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-278" name="__codelineno-0-278"></a> <span class="n">specs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">specs</span><span class="p">()</span>
<a id="__codelineno-0-279" name="__codelineno-0-279"></a> <span class="n">selected_specs</span> <span class="o">=</span> <span class="n">specs</span><span class="o">.</span><span class="n">values</span><span class="p">()</span> <span class="k">if</span> <span class="n">spec_ids</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[</span><span class="n">specs</span><span class="p">[</span><span class="n">spec_id</span><span class="p">]</span> <span class="k">for</span> <span class="n">spec_id</span> <span class="ow">in</span> <span class="n">spec_ids</span> <span class="k">if</span> <span class="n">spec_id</span> <span class="ow">in</span> <span class="n">specs</span><span class="p">]</span>
<a id="__codelineno-0-280" name="__codelineno-0-280"></a>
<a id="__codelineno-0-281" name="__codelineno-0-281"></a> <span class="c1"># Collect all the fields</span>
<a id="__codelineno-0-282" name="__codelineno-0-282"></a> <span class="n">struct_fields</span> <span class="o">=</span> <span class="p">{</span><span class="n">field</span><span class="o">.</span><span class="n">field_id</span><span class="p">:</span> <span class="n">field</span> <span class="k">for</span> <span class="n">spec</span> <span class="ow">in</span> <span class="n">selected_specs</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">spec</span><span class="o">.</span><span class="n">fields</span><span class="p">}</span>
<a id="__codelineno-0-283" name="__codelineno-0-283"></a>
<a id="__codelineno-0-284" name="__codelineno-0-284"></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">()</span>
<a id="__codelineno-0-285" name="__codelineno-0-285"></a>
<a id="__codelineno-0-286" name="__codelineno-0-286"></a> <span class="n">nested_fields</span> <span class="o">=</span> <span class="p">[]</span>
<a id="__codelineno-0-287" name="__codelineno-0-287"></a> <span class="c1"># Sort them by field_id in order to get a deterministic output</span>
<a id="__codelineno-0-288" name="__codelineno-0-288"></a> <span class="k">for</span> <span class="n">field_id</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">struct_fields</span><span class="p">):</span>
<a id="__codelineno-0-289" name="__codelineno-0-289"></a> <span class="n">field</span> <span class="o">=</span> <span class="n">struct_fields</span><span class="p">[</span><span class="n">field_id</span><span class="p">]</span>
<a id="__codelineno-0-290" name="__codelineno-0-290"></a> <span class="n">source_type</span> <span class="o">=</span> <span class="n">schema</span><span class="o">.</span><span class="n">find_type</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">source_id</span><span class="p">)</span>
<a id="__codelineno-0-291" name="__codelineno-0-291"></a> <span class="n">result_type</span> <span class="o">=</span> <span class="n">field</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">result_type</span><span class="p">(</span><span class="n">source_type</span><span class="p">)</span>
<a id="__codelineno-0-292" name="__codelineno-0-292"></a> <span class="n">nested_fields</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">NestedField</span><span class="p">(</span><span class="n">field_id</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">field_id</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">result_type</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
<a id="__codelineno-0-293" name="__codelineno-0-293"></a>
<a id="__codelineno-0-294" name="__codelineno-0-294"></a> <span class="k">return</span> <span class="n">StructType</span><span class="p">(</span><span class="o">*</span><span class="n">nested_fields</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h2 id="pyiceberg.table.metadata.TableMetadataUtil" class="doc doc-heading">
<code>TableMetadataUtil</code>
<a href="#pyiceberg.table.metadata.TableMetadataUtil" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p>Helper class for parsing TableMetadata.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-657">657</a></span>
<span class="normal"><a href="#__codelineno-0-658">658</a></span>
<span class="normal"><a href="#__codelineno-0-659">659</a></span>
<span class="normal"><a href="#__codelineno-0-660">660</a></span>
<span class="normal"><a href="#__codelineno-0-661">661</a></span>
<span class="normal"><a href="#__codelineno-0-662">662</a></span>
<span class="normal"><a href="#__codelineno-0-663">663</a></span>
<span class="normal"><a href="#__codelineno-0-664">664</a></span>
<span class="normal"><a href="#__codelineno-0-665">665</a></span>
<span class="normal"><a href="#__codelineno-0-666">666</a></span>
<span class="normal"><a href="#__codelineno-0-667">667</a></span>
<span class="normal"><a href="#__codelineno-0-668">668</a></span>
<span class="normal"><a href="#__codelineno-0-669">669</a></span>
<span class="normal"><a href="#__codelineno-0-670">670</a></span>
<span class="normal"><a href="#__codelineno-0-671">671</a></span>
<span class="normal"><a href="#__codelineno-0-672">672</a></span>
<span class="normal"><a href="#__codelineno-0-673">673</a></span>
<span class="normal"><a href="#__codelineno-0-674">674</a></span>
<span class="normal"><a href="#__codelineno-0-675">675</a></span>
<span class="normal"><a href="#__codelineno-0-676">676</a></span>
<span class="normal"><a href="#__codelineno-0-677">677</a></span>
<span class="normal"><a href="#__codelineno-0-678">678</a></span>
<span class="normal"><a href="#__codelineno-0-679">679</a></span>
<span class="normal"><a href="#__codelineno-0-680">680</a></span>
<span class="normal"><a href="#__codelineno-0-681">681</a></span>
<span class="normal"><a href="#__codelineno-0-682">682</a></span>
<span class="normal"><a href="#__codelineno-0-683">683</a></span>
<span class="normal"><a href="#__codelineno-0-684">684</a></span>
<span class="normal"><a href="#__codelineno-0-685">685</a></span>
<span class="normal"><a href="#__codelineno-0-686">686</a></span>
<span class="normal"><a href="#__codelineno-0-687">687</a></span>
<span class="normal"><a href="#__codelineno-0-688">688</a></span>
<span class="normal"><a href="#__codelineno-0-689">689</a></span>
<span class="normal"><a href="#__codelineno-0-690">690</a></span>
<span class="normal"><a href="#__codelineno-0-691">691</a></span>
<span class="normal"><a href="#__codelineno-0-692">692</a></span>
<span class="normal"><a href="#__codelineno-0-693">693</a></span>
<span class="normal"><a href="#__codelineno-0-694">694</a></span>
<span class="normal"><a href="#__codelineno-0-695">695</a></span>
<span class="normal"><a href="#__codelineno-0-696">696</a></span>
<span class="normal"><a href="#__codelineno-0-697">697</a></span>
<span class="normal"><a href="#__codelineno-0-698">698</a></span>
<span class="normal"><a href="#__codelineno-0-699">699</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-657" name="__codelineno-0-657"></a><span class="k">class</span><span class="w"> </span><span class="nc">TableMetadataUtil</span><span class="p">:</span>
<a id="__codelineno-0-658" name="__codelineno-0-658"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper class for parsing TableMetadata.&quot;&quot;&quot;</span>
<a id="__codelineno-0-659" name="__codelineno-0-659"></a>
<a id="__codelineno-0-660" name="__codelineno-0-660"></a> <span class="nd">@staticmethod</span>
<a id="__codelineno-0-661" name="__codelineno-0-661"></a> <span class="k">def</span><span class="w"> </span><span class="nf">parse_raw</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-662" name="__codelineno-0-662"></a> <span class="k">try</span><span class="p">:</span>
<a id="__codelineno-0-663" name="__codelineno-0-663"></a> <span class="k">return</span> <span class="n">TableMetadataWrapper</span><span class="o">.</span><span class="n">model_validate_json</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="o">.</span><span class="n">root</span>
<a id="__codelineno-0-664" name="__codelineno-0-664"></a> <span class="k">except</span> <span class="n">PydanticValidationError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<a id="__codelineno-0-665" name="__codelineno-0-665"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="kn">from</span><span class="w"> </span><span class="nn">e</span>
<a id="__codelineno-0-666" name="__codelineno-0-666"></a>
<a id="__codelineno-0-667" name="__codelineno-0-667"></a> <span class="nd">@staticmethod</span>
<a id="__codelineno-0-668" name="__codelineno-0-668"></a> <span class="k">def</span><span class="w"> </span><span class="nf">parse_obj</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-669" name="__codelineno-0-669"></a> <span class="k">if</span> <span class="s2">&quot;format-version&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<a id="__codelineno-0-670" name="__codelineno-0-670"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing format-version in TableMetadata: </span><span class="si">{</span><span class="n">data</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<a id="__codelineno-0-671" name="__codelineno-0-671"></a> <span class="n">format_version</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;format-version&quot;</span><span class="p">]</span>
<a id="__codelineno-0-672" name="__codelineno-0-672"></a>
<a id="__codelineno-0-673" name="__codelineno-0-673"></a> <span class="k">if</span> <span class="n">format_version</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<a id="__codelineno-0-674" name="__codelineno-0-674"></a> <span class="k">return</span> <span class="n">TableMetadataV1</span><span class="p">(</span><span class="o">**</span><span class="n">data</span><span class="p">)</span>
<a id="__codelineno-0-675" name="__codelineno-0-675"></a> <span class="k">elif</span> <span class="n">format_version</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<a id="__codelineno-0-676" name="__codelineno-0-676"></a> <span class="k">return</span> <span class="n">TableMetadataV2</span><span class="p">(</span><span class="o">**</span><span class="n">data</span><span class="p">)</span>
<a id="__codelineno-0-677" name="__codelineno-0-677"></a> <span class="k">elif</span> <span class="n">format_version</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
<a id="__codelineno-0-678" name="__codelineno-0-678"></a> <span class="k">return</span> <span class="n">TableMetadataV3</span><span class="p">(</span><span class="o">**</span><span class="n">data</span><span class="p">)</span>
<a id="__codelineno-0-679" name="__codelineno-0-679"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-680" name="__codelineno-0-680"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown format version: </span><span class="si">{</span><span class="n">format_version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<a id="__codelineno-0-681" name="__codelineno-0-681"></a>
<a id="__codelineno-0-682" name="__codelineno-0-682"></a> <span class="nd">@staticmethod</span>
<a id="__codelineno-0-683" name="__codelineno-0-683"></a> <span class="k">def</span><span class="w"> </span><span class="nf">_construct_without_validation</span><span class="p">(</span><span class="n">table_metadata</span><span class="p">:</span> <span class="n">TableMetadata</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-684" name="__codelineno-0-684"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Construct table metadata from an existing table without performing validation.</span>
<a id="__codelineno-0-685" name="__codelineno-0-685"></a>
<a id="__codelineno-0-686" name="__codelineno-0-686"></a><span class="sd"> This method is useful during a sequence of table updates when the model needs to be</span>
<a id="__codelineno-0-687" name="__codelineno-0-687"></a><span class="sd"> re-constructed but is not yet ready for validation.</span>
<a id="__codelineno-0-688" name="__codelineno-0-688"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-689" name="__codelineno-0-689"></a> <span class="k">if</span> <span class="n">table_metadata</span><span class="o">.</span><span class="n">format_version</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-690" name="__codelineno-0-690"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing format-version in TableMetadata: </span><span class="si">{</span><span class="n">table_metadata</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<a id="__codelineno-0-691" name="__codelineno-0-691"></a>
<a id="__codelineno-0-692" name="__codelineno-0-692"></a> <span class="k">if</span> <span class="n">table_metadata</span><span class="o">.</span><span class="n">format_version</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<a id="__codelineno-0-693" name="__codelineno-0-693"></a> <span class="k">return</span> <span class="n">TableMetadataV1</span><span class="o">.</span><span class="n">model_construct</span><span class="p">(</span><span class="o">**</span><span class="nb">dict</span><span class="p">(</span><span class="n">table_metadata</span><span class="p">))</span>
<a id="__codelineno-0-694" name="__codelineno-0-694"></a> <span class="k">elif</span> <span class="n">table_metadata</span><span class="o">.</span><span class="n">format_version</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<a id="__codelineno-0-695" name="__codelineno-0-695"></a> <span class="k">return</span> <span class="n">TableMetadataV2</span><span class="o">.</span><span class="n">model_construct</span><span class="p">(</span><span class="o">**</span><span class="nb">dict</span><span class="p">(</span><span class="n">table_metadata</span><span class="p">))</span>
<a id="__codelineno-0-696" name="__codelineno-0-696"></a> <span class="k">elif</span> <span class="n">table_metadata</span><span class="o">.</span><span class="n">format_version</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
<a id="__codelineno-0-697" name="__codelineno-0-697"></a> <span class="k">return</span> <span class="n">TableMetadataV3</span><span class="o">.</span><span class="n">model_construct</span><span class="p">(</span><span class="o">**</span><span class="nb">dict</span><span class="p">(</span><span class="n">table_metadata</span><span class="p">))</span>
<a id="__codelineno-0-698" name="__codelineno-0-698"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-699" name="__codelineno-0-699"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown format version: </span><span class="si">{</span><span class="n">table_metadata</span><span class="o">.</span><span class="n">format_version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h2 id="pyiceberg.table.metadata.TableMetadataV1" class="doc doc-heading">
<code>TableMetadataV1</code>
<a href="#pyiceberg.table.metadata.TableMetadataV1" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p class="doc doc-class-bases">
Bases: <code><a class="autorefs autorefs-internal" title="TableMetadataCommonFields (pyiceberg.table.metadata.TableMetadataCommonFields)" href="#pyiceberg.table.metadata.TableMetadataCommonFields">TableMetadataCommonFields</a></code>, <code><a class="autorefs autorefs-internal" title="IcebergBaseModel (pyiceberg.typedef.IcebergBaseModel)" href="../../typedef/#pyiceberg.typedef.IcebergBaseModel">IcebergBaseModel</a></code></p>
<p>Represents version 1 of the Table Metadata.</p>
<p>More information about the specification:
https://iceberg.apache.org/spec/#version-1-analytic-data-tables</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-359">359</a></span>
<span class="normal"><a href="#__codelineno-0-360">360</a></span>
<span class="normal"><a href="#__codelineno-0-361">361</a></span>
<span class="normal"><a href="#__codelineno-0-362">362</a></span>
<span class="normal"><a href="#__codelineno-0-363">363</a></span>
<span class="normal"><a href="#__codelineno-0-364">364</a></span>
<span class="normal"><a href="#__codelineno-0-365">365</a></span>
<span class="normal"><a href="#__codelineno-0-366">366</a></span>
<span class="normal"><a href="#__codelineno-0-367">367</a></span>
<span class="normal"><a href="#__codelineno-0-368">368</a></span>
<span class="normal"><a href="#__codelineno-0-369">369</a></span>
<span class="normal"><a href="#__codelineno-0-370">370</a></span>
<span class="normal"><a href="#__codelineno-0-371">371</a></span>
<span class="normal"><a href="#__codelineno-0-372">372</a></span>
<span class="normal"><a href="#__codelineno-0-373">373</a></span>
<span class="normal"><a href="#__codelineno-0-374">374</a></span>
<span class="normal"><a href="#__codelineno-0-375">375</a></span>
<span class="normal"><a href="#__codelineno-0-376">376</a></span>
<span class="normal"><a href="#__codelineno-0-377">377</a></span>
<span class="normal"><a href="#__codelineno-0-378">378</a></span>
<span class="normal"><a href="#__codelineno-0-379">379</a></span>
<span class="normal"><a href="#__codelineno-0-380">380</a></span>
<span class="normal"><a href="#__codelineno-0-381">381</a></span>
<span class="normal"><a href="#__codelineno-0-382">382</a></span>
<span class="normal"><a href="#__codelineno-0-383">383</a></span>
<span class="normal"><a href="#__codelineno-0-384">384</a></span>
<span class="normal"><a href="#__codelineno-0-385">385</a></span>
<span class="normal"><a href="#__codelineno-0-386">386</a></span>
<span class="normal"><a href="#__codelineno-0-387">387</a></span>
<span class="normal"><a href="#__codelineno-0-388">388</a></span>
<span class="normal"><a href="#__codelineno-0-389">389</a></span>
<span class="normal"><a href="#__codelineno-0-390">390</a></span>
<span class="normal"><a href="#__codelineno-0-391">391</a></span>
<span class="normal"><a href="#__codelineno-0-392">392</a></span>
<span class="normal"><a href="#__codelineno-0-393">393</a></span>
<span class="normal"><a href="#__codelineno-0-394">394</a></span>
<span class="normal"><a href="#__codelineno-0-395">395</a></span>
<span class="normal"><a href="#__codelineno-0-396">396</a></span>
<span class="normal"><a href="#__codelineno-0-397">397</a></span>
<span class="normal"><a href="#__codelineno-0-398">398</a></span>
<span class="normal"><a href="#__codelineno-0-399">399</a></span>
<span class="normal"><a href="#__codelineno-0-400">400</a></span>
<span class="normal"><a href="#__codelineno-0-401">401</a></span>
<span class="normal"><a href="#__codelineno-0-402">402</a></span>
<span class="normal"><a href="#__codelineno-0-403">403</a></span>
<span class="normal"><a href="#__codelineno-0-404">404</a></span>
<span class="normal"><a href="#__codelineno-0-405">405</a></span>
<span class="normal"><a href="#__codelineno-0-406">406</a></span>
<span class="normal"><a href="#__codelineno-0-407">407</a></span>
<span class="normal"><a href="#__codelineno-0-408">408</a></span>
<span class="normal"><a href="#__codelineno-0-409">409</a></span>
<span class="normal"><a href="#__codelineno-0-410">410</a></span>
<span class="normal"><a href="#__codelineno-0-411">411</a></span>
<span class="normal"><a href="#__codelineno-0-412">412</a></span>
<span class="normal"><a href="#__codelineno-0-413">413</a></span>
<span class="normal"><a href="#__codelineno-0-414">414</a></span>
<span class="normal"><a href="#__codelineno-0-415">415</a></span>
<span class="normal"><a href="#__codelineno-0-416">416</a></span>
<span class="normal"><a href="#__codelineno-0-417">417</a></span>
<span class="normal"><a href="#__codelineno-0-418">418</a></span>
<span class="normal"><a href="#__codelineno-0-419">419</a></span>
<span class="normal"><a href="#__codelineno-0-420">420</a></span>
<span class="normal"><a href="#__codelineno-0-421">421</a></span>
<span class="normal"><a href="#__codelineno-0-422">422</a></span>
<span class="normal"><a href="#__codelineno-0-423">423</a></span>
<span class="normal"><a href="#__codelineno-0-424">424</a></span>
<span class="normal"><a href="#__codelineno-0-425">425</a></span>
<span class="normal"><a href="#__codelineno-0-426">426</a></span>
<span class="normal"><a href="#__codelineno-0-427">427</a></span>
<span class="normal"><a href="#__codelineno-0-428">428</a></span>
<span class="normal"><a href="#__codelineno-0-429">429</a></span>
<span class="normal"><a href="#__codelineno-0-430">430</a></span>
<span class="normal"><a href="#__codelineno-0-431">431</a></span>
<span class="normal"><a href="#__codelineno-0-432">432</a></span>
<span class="normal"><a href="#__codelineno-0-433">433</a></span>
<span class="normal"><a href="#__codelineno-0-434">434</a></span>
<span class="normal"><a href="#__codelineno-0-435">435</a></span>
<span class="normal"><a href="#__codelineno-0-436">436</a></span>
<span class="normal"><a href="#__codelineno-0-437">437</a></span>
<span class="normal"><a href="#__codelineno-0-438">438</a></span>
<span class="normal"><a href="#__codelineno-0-439">439</a></span>
<span class="normal"><a href="#__codelineno-0-440">440</a></span>
<span class="normal"><a href="#__codelineno-0-441">441</a></span>
<span class="normal"><a href="#__codelineno-0-442">442</a></span>
<span class="normal"><a href="#__codelineno-0-443">443</a></span>
<span class="normal"><a href="#__codelineno-0-444">444</a></span>
<span class="normal"><a href="#__codelineno-0-445">445</a></span>
<span class="normal"><a href="#__codelineno-0-446">446</a></span>
<span class="normal"><a href="#__codelineno-0-447">447</a></span>
<span class="normal"><a href="#__codelineno-0-448">448</a></span>
<span class="normal"><a href="#__codelineno-0-449">449</a></span>
<span class="normal"><a href="#__codelineno-0-450">450</a></span>
<span class="normal"><a href="#__codelineno-0-451">451</a></span>
<span class="normal"><a href="#__codelineno-0-452">452</a></span>
<span class="normal"><a href="#__codelineno-0-453">453</a></span>
<span class="normal"><a href="#__codelineno-0-454">454</a></span>
<span class="normal"><a href="#__codelineno-0-455">455</a></span>
<span class="normal"><a href="#__codelineno-0-456">456</a></span>
<span class="normal"><a href="#__codelineno-0-457">457</a></span>
<span class="normal"><a href="#__codelineno-0-458">458</a></span>
<span class="normal"><a href="#__codelineno-0-459">459</a></span>
<span class="normal"><a href="#__codelineno-0-460">460</a></span>
<span class="normal"><a href="#__codelineno-0-461">461</a></span>
<span class="normal"><a href="#__codelineno-0-462">462</a></span>
<span class="normal"><a href="#__codelineno-0-463">463</a></span>
<span class="normal"><a href="#__codelineno-0-464">464</a></span>
<span class="normal"><a href="#__codelineno-0-465">465</a></span>
<span class="normal"><a href="#__codelineno-0-466">466</a></span>
<span class="normal"><a href="#__codelineno-0-467">467</a></span>
<span class="normal"><a href="#__codelineno-0-468">468</a></span>
<span class="normal"><a href="#__codelineno-0-469">469</a></span>
<span class="normal"><a href="#__codelineno-0-470">470</a></span>
<span class="normal"><a href="#__codelineno-0-471">471</a></span>
<span class="normal"><a href="#__codelineno-0-472">472</a></span>
<span class="normal"><a href="#__codelineno-0-473">473</a></span>
<span class="normal"><a href="#__codelineno-0-474">474</a></span>
<span class="normal"><a href="#__codelineno-0-475">475</a></span>
<span class="normal"><a href="#__codelineno-0-476">476</a></span>
<span class="normal"><a href="#__codelineno-0-477">477</a></span>
<span class="normal"><a href="#__codelineno-0-478">478</a></span>
<span class="normal"><a href="#__codelineno-0-479">479</a></span>
<span class="normal"><a href="#__codelineno-0-480">480</a></span>
<span class="normal"><a href="#__codelineno-0-481">481</a></span>
<span class="normal"><a href="#__codelineno-0-482">482</a></span>
<span class="normal"><a href="#__codelineno-0-483">483</a></span>
<span class="normal"><a href="#__codelineno-0-484">484</a></span>
<span class="normal"><a href="#__codelineno-0-485">485</a></span>
<span class="normal"><a href="#__codelineno-0-486">486</a></span>
<span class="normal"><a href="#__codelineno-0-487">487</a></span>
<span class="normal"><a href="#__codelineno-0-488">488</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-359" name="__codelineno-0-359"></a><span class="k">class</span><span class="w"> </span><span class="nc">TableMetadataV1</span><span class="p">(</span><span class="n">TableMetadataCommonFields</span><span class="p">,</span> <span class="n">IcebergBaseModel</span><span class="p">):</span>
<a id="__codelineno-0-360" name="__codelineno-0-360"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Represents version 1 of the Table Metadata.</span>
<a id="__codelineno-0-361" name="__codelineno-0-361"></a>
<a id="__codelineno-0-362" name="__codelineno-0-362"></a><span class="sd"> More information about the specification:</span>
<a id="__codelineno-0-363" name="__codelineno-0-363"></a><span class="sd"> https://iceberg.apache.org/spec/#version-1-analytic-data-tables</span>
<a id="__codelineno-0-364" name="__codelineno-0-364"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-365" name="__codelineno-0-365"></a>
<a id="__codelineno-0-366" name="__codelineno-0-366"></a> <span class="c1"># When we read a V1 format-version, we&#39;ll make sure to populate the fields</span>
<a id="__codelineno-0-367" name="__codelineno-0-367"></a> <span class="c1"># for V2 as well. This makes it easier downstream because we can just</span>
<a id="__codelineno-0-368" name="__codelineno-0-368"></a> <span class="c1"># assume that everything is a TableMetadataV2.</span>
<a id="__codelineno-0-369" name="__codelineno-0-369"></a> <span class="c1"># When writing, we should stick to the same version that it was,</span>
<a id="__codelineno-0-370" name="__codelineno-0-370"></a> <span class="c1"># because bumping the version should be an explicit operation that is up</span>
<a id="__codelineno-0-371" name="__codelineno-0-371"></a> <span class="c1"># to the owner of the table.</span>
<a id="__codelineno-0-372" name="__codelineno-0-372"></a>
<a id="__codelineno-0-373" name="__codelineno-0-373"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;before&quot;</span><span class="p">)</span>
<a id="__codelineno-0-374" name="__codelineno-0-374"></a> <span class="k">def</span><span class="w"> </span><span class="nf">cleanup_snapshot_id</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<a id="__codelineno-0-375" name="__codelineno-0-375"></a> <span class="k">return</span> <span class="n">cleanup_snapshot_id</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<a id="__codelineno-0-376" name="__codelineno-0-376"></a>
<a id="__codelineno-0-377" name="__codelineno-0-377"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;after&quot;</span><span class="p">)</span>
<a id="__codelineno-0-378" name="__codelineno-0-378"></a> <span class="k">def</span><span class="w"> </span><span class="nf">construct_refs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadataV1</span><span class="p">:</span>
<a id="__codelineno-0-379" name="__codelineno-0-379"></a> <span class="k">return</span> <span class="n">construct_refs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-0-380" name="__codelineno-0-380"></a>
<a id="__codelineno-0-381" name="__codelineno-0-381"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;before&quot;</span><span class="p">)</span>
<a id="__codelineno-0-382" name="__codelineno-0-382"></a> <span class="k">def</span><span class="w"> </span><span class="nf">set_v2_compatible_defaults</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<a id="__codelineno-0-383" name="__codelineno-0-383"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Set default values to be compatible with the format v2.</span>
<a id="__codelineno-0-384" name="__codelineno-0-384"></a>
<a id="__codelineno-0-385" name="__codelineno-0-385"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-386" name="__codelineno-0-386"></a><span class="sd"> data: The raw arguments when initializing a V1 TableMetadata.</span>
<a id="__codelineno-0-387" name="__codelineno-0-387"></a>
<a id="__codelineno-0-388" name="__codelineno-0-388"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-389" name="__codelineno-0-389"></a><span class="sd"> The TableMetadata with the defaults applied.</span>
<a id="__codelineno-0-390" name="__codelineno-0-390"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-391" name="__codelineno-0-391"></a> <span class="c1"># When the schema doesn&#39;t have an ID</span>
<a id="__codelineno-0-392" name="__codelineno-0-392"></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;schema&quot;</span><span class="p">)</span>
<a id="__codelineno-0-393" name="__codelineno-0-393"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<a id="__codelineno-0-394" name="__codelineno-0-394"></a> <span class="k">if</span> <span class="s2">&quot;schema_id&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">schema</span> <span class="ow">and</span> <span class="s2">&quot;schema-id&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">schema</span><span class="p">:</span>
<a id="__codelineno-0-395" name="__codelineno-0-395"></a> <span class="n">schema</span><span class="p">[</span><span class="s2">&quot;schema_id&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">DEFAULT_SCHEMA_ID</span>
<a id="__codelineno-0-396" name="__codelineno-0-396"></a>
<a id="__codelineno-0-397" name="__codelineno-0-397"></a> <span class="k">return</span> <span class="n">data</span>
<a id="__codelineno-0-398" name="__codelineno-0-398"></a>
<a id="__codelineno-0-399" name="__codelineno-0-399"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;before&quot;</span><span class="p">)</span>
<a id="__codelineno-0-400" name="__codelineno-0-400"></a> <span class="k">def</span><span class="w"> </span><span class="nf">construct_schemas</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<a id="__codelineno-0-401" name="__codelineno-0-401"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert the schema into schemas.</span>
<a id="__codelineno-0-402" name="__codelineno-0-402"></a>
<a id="__codelineno-0-403" name="__codelineno-0-403"></a><span class="sd"> For V1 schemas is optional, and if they aren&#39;t set, we&#39;ll set them</span>
<a id="__codelineno-0-404" name="__codelineno-0-404"></a><span class="sd"> in this validator. This was we can always use the schemas when reading</span>
<a id="__codelineno-0-405" name="__codelineno-0-405"></a><span class="sd"> table metadata, and we don&#39;t have to worry if it is a v1 or v2 format.</span>
<a id="__codelineno-0-406" name="__codelineno-0-406"></a>
<a id="__codelineno-0-407" name="__codelineno-0-407"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-408" name="__codelineno-0-408"></a><span class="sd"> data: The raw data after validation, meaning that the aliases are applied.</span>
<a id="__codelineno-0-409" name="__codelineno-0-409"></a>
<a id="__codelineno-0-410" name="__codelineno-0-410"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-411" name="__codelineno-0-411"></a><span class="sd"> The TableMetadata with the schemas set, if not provided.</span>
<a id="__codelineno-0-412" name="__codelineno-0-412"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-413" name="__codelineno-0-413"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;schemas&quot;</span><span class="p">):</span>
<a id="__codelineno-0-414" name="__codelineno-0-414"></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;schema&quot;</span><span class="p">]</span>
<a id="__codelineno-0-415" name="__codelineno-0-415"></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;schemas&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">schema</span><span class="p">]</span>
<a id="__codelineno-0-416" name="__codelineno-0-416"></a> <span class="k">return</span> <span class="n">data</span>
<a id="__codelineno-0-417" name="__codelineno-0-417"></a>
<a id="__codelineno-0-418" name="__codelineno-0-418"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;before&quot;</span><span class="p">)</span>
<a id="__codelineno-0-419" name="__codelineno-0-419"></a> <span class="k">def</span><span class="w"> </span><span class="nf">construct_partition_specs</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<a id="__codelineno-0-420" name="__codelineno-0-420"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert the partition_spec into partition_specs.</span>
<a id="__codelineno-0-421" name="__codelineno-0-421"></a>
<a id="__codelineno-0-422" name="__codelineno-0-422"></a><span class="sd"> For V1 partition_specs is optional, and if they aren&#39;t set, we&#39;ll set them</span>
<a id="__codelineno-0-423" name="__codelineno-0-423"></a><span class="sd"> in this validator. This was we can always use the partition_specs when reading</span>
<a id="__codelineno-0-424" name="__codelineno-0-424"></a><span class="sd"> table metadata, and we don&#39;t have to worry if it is a v1 or v2 format.</span>
<a id="__codelineno-0-425" name="__codelineno-0-425"></a>
<a id="__codelineno-0-426" name="__codelineno-0-426"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-427" name="__codelineno-0-427"></a><span class="sd"> data: The raw data after validation, meaning that the aliases are applied.</span>
<a id="__codelineno-0-428" name="__codelineno-0-428"></a>
<a id="__codelineno-0-429" name="__codelineno-0-429"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-430" name="__codelineno-0-430"></a><span class="sd"> The TableMetadata with the partition_specs set, if not provided.</span>
<a id="__codelineno-0-431" name="__codelineno-0-431"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-432" name="__codelineno-0-432"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">PARTITION_SPECS</span><span class="p">):</span>
<a id="__codelineno-0-433" name="__codelineno-0-433"></a> <span class="k">if</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">PARTITION_SPEC</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-434" name="__codelineno-0-434"></a> <span class="c1"># Promote the spec from partition-spec to partition-specs</span>
<a id="__codelineno-0-435" name="__codelineno-0-435"></a> <span class="n">fields</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">PARTITION_SPEC</span><span class="p">]</span>
<a id="__codelineno-0-436" name="__codelineno-0-436"></a> <span class="n">data</span><span class="p">[</span><span class="n">PARTITION_SPECS</span><span class="p">]</span> <span class="o">=</span> <span class="p">[{</span><span class="n">SPEC_ID</span><span class="p">:</span> <span class="n">INITIAL_SPEC_ID</span><span class="p">,</span> <span class="n">FIELDS</span><span class="p">:</span> <span class="n">fields</span><span class="p">}]</span>
<a id="__codelineno-0-437" name="__codelineno-0-437"></a> <span class="n">data</span><span class="p">[</span><span class="n">DEFAULT_SPEC_ID</span><span class="p">]</span> <span class="o">=</span> <span class="n">INITIAL_SPEC_ID</span>
<a id="__codelineno-0-438" name="__codelineno-0-438"></a> <span class="k">elif</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition_spec&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-439" name="__codelineno-0-439"></a> <span class="c1"># Promote the spec from partition_spec to partition-specs</span>
<a id="__codelineno-0-440" name="__codelineno-0-440"></a> <span class="n">fields</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;partition_spec&quot;</span><span class="p">]</span>
<a id="__codelineno-0-441" name="__codelineno-0-441"></a> <span class="n">data</span><span class="p">[</span><span class="n">PARTITION_SPECS</span><span class="p">]</span> <span class="o">=</span> <span class="p">[{</span><span class="n">SPEC_ID</span><span class="p">:</span> <span class="n">INITIAL_SPEC_ID</span><span class="p">,</span> <span class="n">FIELDS</span><span class="p">:</span> <span class="n">fields</span><span class="p">}]</span>
<a id="__codelineno-0-442" name="__codelineno-0-442"></a> <span class="n">data</span><span class="p">[</span><span class="n">DEFAULT_SPEC_ID</span><span class="p">]</span> <span class="o">=</span> <span class="n">INITIAL_SPEC_ID</span>
<a id="__codelineno-0-443" name="__codelineno-0-443"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-444" name="__codelineno-0-444"></a> <span class="n">data</span><span class="p">[</span><span class="n">PARTITION_SPECS</span><span class="p">]</span> <span class="o">=</span> <span class="p">[{</span><span class="s2">&quot;field-id&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;fields&quot;</span><span class="p">:</span> <span class="p">()}]</span>
<a id="__codelineno-0-445" name="__codelineno-0-445"></a>
<a id="__codelineno-0-446" name="__codelineno-0-446"></a> <span class="n">data</span><span class="p">[</span><span class="n">LAST_PARTITION_ID</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span>
<a id="__codelineno-0-447" name="__codelineno-0-447"></a> <span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">FIELD_ID</span><span class="p">)</span> <span class="k">for</span> <span class="n">spec</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="n">PARTITION_SPECS</span><span class="p">]</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">spec</span><span class="p">[</span><span class="n">FIELDS</span><span class="p">]],</span>
<a id="__codelineno-0-448" name="__codelineno-0-448"></a> <span class="n">default</span><span class="o">=</span><span class="n">PARTITION_FIELD_ID_START</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span>
<a id="__codelineno-0-449" name="__codelineno-0-449"></a> <span class="p">)</span>
<a id="__codelineno-0-450" name="__codelineno-0-450"></a>
<a id="__codelineno-0-451" name="__codelineno-0-451"></a> <span class="k">return</span> <span class="n">data</span>
<a id="__codelineno-0-452" name="__codelineno-0-452"></a>
<a id="__codelineno-0-453" name="__codelineno-0-453"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;before&quot;</span><span class="p">)</span>
<a id="__codelineno-0-454" name="__codelineno-0-454"></a> <span class="k">def</span><span class="w"> </span><span class="nf">set_sort_orders</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<a id="__codelineno-0-455" name="__codelineno-0-455"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Set the sort_orders if not provided.</span>
<a id="__codelineno-0-456" name="__codelineno-0-456"></a>
<a id="__codelineno-0-457" name="__codelineno-0-457"></a><span class="sd"> For V1 sort_orders is optional, and if they aren&#39;t set, we&#39;ll set them</span>
<a id="__codelineno-0-458" name="__codelineno-0-458"></a><span class="sd"> in this validator.</span>
<a id="__codelineno-0-459" name="__codelineno-0-459"></a>
<a id="__codelineno-0-460" name="__codelineno-0-460"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-461" name="__codelineno-0-461"></a><span class="sd"> data: The raw data after validation, meaning that the aliases are applied.</span>
<a id="__codelineno-0-462" name="__codelineno-0-462"></a>
<a id="__codelineno-0-463" name="__codelineno-0-463"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-464" name="__codelineno-0-464"></a><span class="sd"> The TableMetadata with the sort_orders set, if not provided.</span>
<a id="__codelineno-0-465" name="__codelineno-0-465"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-466" name="__codelineno-0-466"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">SORT_ORDERS</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;sort_orders&quot;</span><span class="p">):</span>
<a id="__codelineno-0-467" name="__codelineno-0-467"></a> <span class="n">data</span><span class="p">[</span><span class="n">SORT_ORDERS</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">UNSORTED_SORT_ORDER</span><span class="p">]</span>
<a id="__codelineno-0-468" name="__codelineno-0-468"></a> <span class="k">return</span> <span class="n">data</span>
<a id="__codelineno-0-469" name="__codelineno-0-469"></a>
<a id="__codelineno-0-470" name="__codelineno-0-470"></a> <span class="k">def</span><span class="w"> </span><span class="nf">to_v2</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadataV2</span><span class="p">:</span>
<a id="__codelineno-0-471" name="__codelineno-0-471"></a> <span class="n">metadata</span> <span class="o">=</span> <span class="n">copy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model_dump</span><span class="p">())</span>
<a id="__codelineno-0-472" name="__codelineno-0-472"></a> <span class="n">metadata</span><span class="p">[</span><span class="s2">&quot;format-version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2</span>
<a id="__codelineno-0-473" name="__codelineno-0-473"></a> <span class="k">return</span> <span class="n">TableMetadataV2</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span><span class="n">metadata</span><span class="p">)</span>
<a id="__codelineno-0-474" name="__codelineno-0-474"></a>
<a id="__codelineno-0-475" name="__codelineno-0-475"></a> <span class="n">format_version</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;format-version&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<a id="__codelineno-0-476" name="__codelineno-0-476"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;An integer version number for the format. Implementations must throw</span>
<a id="__codelineno-0-477" name="__codelineno-0-477"></a><span class="sd"> an exception if a table’s version is higher than the supported version.&quot;&quot;&quot;</span>
<a id="__codelineno-0-478" name="__codelineno-0-478"></a>
<a id="__codelineno-0-479" name="__codelineno-0-479"></a> <span class="n">schema_</span><span class="p">:</span> <span class="n">Schema</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;schema&quot;</span><span class="p">)</span>
<a id="__codelineno-0-480" name="__codelineno-0-480"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;The table’s current schema. (Deprecated: use schemas and</span>
<a id="__codelineno-0-481" name="__codelineno-0-481"></a><span class="sd"> current-schema-id instead).&quot;&quot;&quot;</span>
<a id="__codelineno-0-482" name="__codelineno-0-482"></a>
<a id="__codelineno-0-483" name="__codelineno-0-483"></a> <span class="n">partition_spec</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;partition-spec&quot;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-0-484" name="__codelineno-0-484"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;The table’s current partition spec, stored as only fields.</span>
<a id="__codelineno-0-485" name="__codelineno-0-485"></a><span class="sd"> Note that this is used by writers to partition data, but is</span>
<a id="__codelineno-0-486" name="__codelineno-0-486"></a><span class="sd"> not used when reading because reads use the specs stored in</span>
<a id="__codelineno-0-487" name="__codelineno-0-487"></a><span class="sd"> manifest files. (Deprecated: use partition-specs and default-spec-id</span>
<a id="__codelineno-0-488" name="__codelineno-0-488"></a><span class="sd"> instead).&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataV1.format_version" class="doc doc-heading">
<code class="highlight language-python"><span class="n">format_version</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;format-version&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataV1.format_version" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>An integer version number for the format. Implementations must throw
an exception if a table’s version is higher than the supported version.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataV1.partition_spec" class="doc doc-heading">
<code class="highlight language-python"><span class="n">partition_spec</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;partition-spec&#39;</span><span class="p">,</span> <span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataV1.partition_spec" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>The table’s current partition spec, stored as only fields.
Note that this is used by writers to partition data, but is
not used when reading because reads use the specs stored in
manifest files. (Deprecated: use partition-specs and default-spec-id
instead).</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataV1.schema_" class="doc doc-heading">
<code class="highlight language-python"><span class="n">schema_</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;schema&#39;</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataV1.schema_" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>The table’s current schema. (Deprecated: use schemas and
current-schema-id instead).</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataV1.construct_partition_specs" class="doc doc-heading">
<code class="highlight language-python"><span class="n">construct_partition_specs</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataV1.construct_partition_specs" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Convert the partition_spec into partition_specs.</p>
<p>For V1 partition_specs is optional, and if they aren't set, we'll set them
in this validator. This was we can always use the partition_specs when reading
table metadata, and we don't have to worry if it is a v1 or v2 format.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>data</code>
</td>
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>The raw data after validation, meaning that the aliases are applied.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>The TableMetadata with the partition_specs set, if not provided.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-418">418</a></span>
<span class="normal"><a href="#__codelineno-0-419">419</a></span>
<span class="normal"><a href="#__codelineno-0-420">420</a></span>
<span class="normal"><a href="#__codelineno-0-421">421</a></span>
<span class="normal"><a href="#__codelineno-0-422">422</a></span>
<span class="normal"><a href="#__codelineno-0-423">423</a></span>
<span class="normal"><a href="#__codelineno-0-424">424</a></span>
<span class="normal"><a href="#__codelineno-0-425">425</a></span>
<span class="normal"><a href="#__codelineno-0-426">426</a></span>
<span class="normal"><a href="#__codelineno-0-427">427</a></span>
<span class="normal"><a href="#__codelineno-0-428">428</a></span>
<span class="normal"><a href="#__codelineno-0-429">429</a></span>
<span class="normal"><a href="#__codelineno-0-430">430</a></span>
<span class="normal"><a href="#__codelineno-0-431">431</a></span>
<span class="normal"><a href="#__codelineno-0-432">432</a></span>
<span class="normal"><a href="#__codelineno-0-433">433</a></span>
<span class="normal"><a href="#__codelineno-0-434">434</a></span>
<span class="normal"><a href="#__codelineno-0-435">435</a></span>
<span class="normal"><a href="#__codelineno-0-436">436</a></span>
<span class="normal"><a href="#__codelineno-0-437">437</a></span>
<span class="normal"><a href="#__codelineno-0-438">438</a></span>
<span class="normal"><a href="#__codelineno-0-439">439</a></span>
<span class="normal"><a href="#__codelineno-0-440">440</a></span>
<span class="normal"><a href="#__codelineno-0-441">441</a></span>
<span class="normal"><a href="#__codelineno-0-442">442</a></span>
<span class="normal"><a href="#__codelineno-0-443">443</a></span>
<span class="normal"><a href="#__codelineno-0-444">444</a></span>
<span class="normal"><a href="#__codelineno-0-445">445</a></span>
<span class="normal"><a href="#__codelineno-0-446">446</a></span>
<span class="normal"><a href="#__codelineno-0-447">447</a></span>
<span class="normal"><a href="#__codelineno-0-448">448</a></span>
<span class="normal"><a href="#__codelineno-0-449">449</a></span>
<span class="normal"><a href="#__codelineno-0-450">450</a></span>
<span class="normal"><a href="#__codelineno-0-451">451</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-418" name="__codelineno-0-418"></a><span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;before&quot;</span><span class="p">)</span>
<a id="__codelineno-0-419" name="__codelineno-0-419"></a><span class="k">def</span><span class="w"> </span><span class="nf">construct_partition_specs</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<a id="__codelineno-0-420" name="__codelineno-0-420"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert the partition_spec into partition_specs.</span>
<a id="__codelineno-0-421" name="__codelineno-0-421"></a>
<a id="__codelineno-0-422" name="__codelineno-0-422"></a><span class="sd"> For V1 partition_specs is optional, and if they aren&#39;t set, we&#39;ll set them</span>
<a id="__codelineno-0-423" name="__codelineno-0-423"></a><span class="sd"> in this validator. This was we can always use the partition_specs when reading</span>
<a id="__codelineno-0-424" name="__codelineno-0-424"></a><span class="sd"> table metadata, and we don&#39;t have to worry if it is a v1 or v2 format.</span>
<a id="__codelineno-0-425" name="__codelineno-0-425"></a>
<a id="__codelineno-0-426" name="__codelineno-0-426"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-427" name="__codelineno-0-427"></a><span class="sd"> data: The raw data after validation, meaning that the aliases are applied.</span>
<a id="__codelineno-0-428" name="__codelineno-0-428"></a>
<a id="__codelineno-0-429" name="__codelineno-0-429"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-430" name="__codelineno-0-430"></a><span class="sd"> The TableMetadata with the partition_specs set, if not provided.</span>
<a id="__codelineno-0-431" name="__codelineno-0-431"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-432" name="__codelineno-0-432"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">PARTITION_SPECS</span><span class="p">):</span>
<a id="__codelineno-0-433" name="__codelineno-0-433"></a> <span class="k">if</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">PARTITION_SPEC</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-434" name="__codelineno-0-434"></a> <span class="c1"># Promote the spec from partition-spec to partition-specs</span>
<a id="__codelineno-0-435" name="__codelineno-0-435"></a> <span class="n">fields</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">PARTITION_SPEC</span><span class="p">]</span>
<a id="__codelineno-0-436" name="__codelineno-0-436"></a> <span class="n">data</span><span class="p">[</span><span class="n">PARTITION_SPECS</span><span class="p">]</span> <span class="o">=</span> <span class="p">[{</span><span class="n">SPEC_ID</span><span class="p">:</span> <span class="n">INITIAL_SPEC_ID</span><span class="p">,</span> <span class="n">FIELDS</span><span class="p">:</span> <span class="n">fields</span><span class="p">}]</span>
<a id="__codelineno-0-437" name="__codelineno-0-437"></a> <span class="n">data</span><span class="p">[</span><span class="n">DEFAULT_SPEC_ID</span><span class="p">]</span> <span class="o">=</span> <span class="n">INITIAL_SPEC_ID</span>
<a id="__codelineno-0-438" name="__codelineno-0-438"></a> <span class="k">elif</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition_spec&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-439" name="__codelineno-0-439"></a> <span class="c1"># Promote the spec from partition_spec to partition-specs</span>
<a id="__codelineno-0-440" name="__codelineno-0-440"></a> <span class="n">fields</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;partition_spec&quot;</span><span class="p">]</span>
<a id="__codelineno-0-441" name="__codelineno-0-441"></a> <span class="n">data</span><span class="p">[</span><span class="n">PARTITION_SPECS</span><span class="p">]</span> <span class="o">=</span> <span class="p">[{</span><span class="n">SPEC_ID</span><span class="p">:</span> <span class="n">INITIAL_SPEC_ID</span><span class="p">,</span> <span class="n">FIELDS</span><span class="p">:</span> <span class="n">fields</span><span class="p">}]</span>
<a id="__codelineno-0-442" name="__codelineno-0-442"></a> <span class="n">data</span><span class="p">[</span><span class="n">DEFAULT_SPEC_ID</span><span class="p">]</span> <span class="o">=</span> <span class="n">INITIAL_SPEC_ID</span>
<a id="__codelineno-0-443" name="__codelineno-0-443"></a> <span class="k">else</span><span class="p">:</span>
<a id="__codelineno-0-444" name="__codelineno-0-444"></a> <span class="n">data</span><span class="p">[</span><span class="n">PARTITION_SPECS</span><span class="p">]</span> <span class="o">=</span> <span class="p">[{</span><span class="s2">&quot;field-id&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;fields&quot;</span><span class="p">:</span> <span class="p">()}]</span>
<a id="__codelineno-0-445" name="__codelineno-0-445"></a>
<a id="__codelineno-0-446" name="__codelineno-0-446"></a> <span class="n">data</span><span class="p">[</span><span class="n">LAST_PARTITION_ID</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span>
<a id="__codelineno-0-447" name="__codelineno-0-447"></a> <span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">FIELD_ID</span><span class="p">)</span> <span class="k">for</span> <span class="n">spec</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="n">PARTITION_SPECS</span><span class="p">]</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">spec</span><span class="p">[</span><span class="n">FIELDS</span><span class="p">]],</span>
<a id="__codelineno-0-448" name="__codelineno-0-448"></a> <span class="n">default</span><span class="o">=</span><span class="n">PARTITION_FIELD_ID_START</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span>
<a id="__codelineno-0-449" name="__codelineno-0-449"></a> <span class="p">)</span>
<a id="__codelineno-0-450" name="__codelineno-0-450"></a>
<a id="__codelineno-0-451" name="__codelineno-0-451"></a> <span class="k">return</span> <span class="n">data</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataV1.construct_schemas" class="doc doc-heading">
<code class="highlight language-python"><span class="n">construct_schemas</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataV1.construct_schemas" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Convert the schema into schemas.</p>
<p>For V1 schemas is optional, and if they aren't set, we'll set them
in this validator. This was we can always use the schemas when reading
table metadata, and we don't have to worry if it is a v1 or v2 format.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>data</code>
</td>
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>The raw data after validation, meaning that the aliases are applied.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>The TableMetadata with the schemas set, if not provided.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-399">399</a></span>
<span class="normal"><a href="#__codelineno-0-400">400</a></span>
<span class="normal"><a href="#__codelineno-0-401">401</a></span>
<span class="normal"><a href="#__codelineno-0-402">402</a></span>
<span class="normal"><a href="#__codelineno-0-403">403</a></span>
<span class="normal"><a href="#__codelineno-0-404">404</a></span>
<span class="normal"><a href="#__codelineno-0-405">405</a></span>
<span class="normal"><a href="#__codelineno-0-406">406</a></span>
<span class="normal"><a href="#__codelineno-0-407">407</a></span>
<span class="normal"><a href="#__codelineno-0-408">408</a></span>
<span class="normal"><a href="#__codelineno-0-409">409</a></span>
<span class="normal"><a href="#__codelineno-0-410">410</a></span>
<span class="normal"><a href="#__codelineno-0-411">411</a></span>
<span class="normal"><a href="#__codelineno-0-412">412</a></span>
<span class="normal"><a href="#__codelineno-0-413">413</a></span>
<span class="normal"><a href="#__codelineno-0-414">414</a></span>
<span class="normal"><a href="#__codelineno-0-415">415</a></span>
<span class="normal"><a href="#__codelineno-0-416">416</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-399" name="__codelineno-0-399"></a><span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;before&quot;</span><span class="p">)</span>
<a id="__codelineno-0-400" name="__codelineno-0-400"></a><span class="k">def</span><span class="w"> </span><span class="nf">construct_schemas</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<a id="__codelineno-0-401" name="__codelineno-0-401"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert the schema into schemas.</span>
<a id="__codelineno-0-402" name="__codelineno-0-402"></a>
<a id="__codelineno-0-403" name="__codelineno-0-403"></a><span class="sd"> For V1 schemas is optional, and if they aren&#39;t set, we&#39;ll set them</span>
<a id="__codelineno-0-404" name="__codelineno-0-404"></a><span class="sd"> in this validator. This was we can always use the schemas when reading</span>
<a id="__codelineno-0-405" name="__codelineno-0-405"></a><span class="sd"> table metadata, and we don&#39;t have to worry if it is a v1 or v2 format.</span>
<a id="__codelineno-0-406" name="__codelineno-0-406"></a>
<a id="__codelineno-0-407" name="__codelineno-0-407"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-408" name="__codelineno-0-408"></a><span class="sd"> data: The raw data after validation, meaning that the aliases are applied.</span>
<a id="__codelineno-0-409" name="__codelineno-0-409"></a>
<a id="__codelineno-0-410" name="__codelineno-0-410"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-411" name="__codelineno-0-411"></a><span class="sd"> The TableMetadata with the schemas set, if not provided.</span>
<a id="__codelineno-0-412" name="__codelineno-0-412"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-413" name="__codelineno-0-413"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;schemas&quot;</span><span class="p">):</span>
<a id="__codelineno-0-414" name="__codelineno-0-414"></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;schema&quot;</span><span class="p">]</span>
<a id="__codelineno-0-415" name="__codelineno-0-415"></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;schemas&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">schema</span><span class="p">]</span>
<a id="__codelineno-0-416" name="__codelineno-0-416"></a> <span class="k">return</span> <span class="n">data</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataV1.set_sort_orders" class="doc doc-heading">
<code class="highlight language-python"><span class="n">set_sort_orders</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataV1.set_sort_orders" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Set the sort_orders if not provided.</p>
<p>For V1 sort_orders is optional, and if they aren't set, we'll set them
in this validator.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>data</code>
</td>
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>The raw data after validation, meaning that the aliases are applied.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>The TableMetadata with the sort_orders set, if not provided.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-453">453</a></span>
<span class="normal"><a href="#__codelineno-0-454">454</a></span>
<span class="normal"><a href="#__codelineno-0-455">455</a></span>
<span class="normal"><a href="#__codelineno-0-456">456</a></span>
<span class="normal"><a href="#__codelineno-0-457">457</a></span>
<span class="normal"><a href="#__codelineno-0-458">458</a></span>
<span class="normal"><a href="#__codelineno-0-459">459</a></span>
<span class="normal"><a href="#__codelineno-0-460">460</a></span>
<span class="normal"><a href="#__codelineno-0-461">461</a></span>
<span class="normal"><a href="#__codelineno-0-462">462</a></span>
<span class="normal"><a href="#__codelineno-0-463">463</a></span>
<span class="normal"><a href="#__codelineno-0-464">464</a></span>
<span class="normal"><a href="#__codelineno-0-465">465</a></span>
<span class="normal"><a href="#__codelineno-0-466">466</a></span>
<span class="normal"><a href="#__codelineno-0-467">467</a></span>
<span class="normal"><a href="#__codelineno-0-468">468</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-453" name="__codelineno-0-453"></a><span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;before&quot;</span><span class="p">)</span>
<a id="__codelineno-0-454" name="__codelineno-0-454"></a><span class="k">def</span><span class="w"> </span><span class="nf">set_sort_orders</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<a id="__codelineno-0-455" name="__codelineno-0-455"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Set the sort_orders if not provided.</span>
<a id="__codelineno-0-456" name="__codelineno-0-456"></a>
<a id="__codelineno-0-457" name="__codelineno-0-457"></a><span class="sd"> For V1 sort_orders is optional, and if they aren&#39;t set, we&#39;ll set them</span>
<a id="__codelineno-0-458" name="__codelineno-0-458"></a><span class="sd"> in this validator.</span>
<a id="__codelineno-0-459" name="__codelineno-0-459"></a>
<a id="__codelineno-0-460" name="__codelineno-0-460"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-461" name="__codelineno-0-461"></a><span class="sd"> data: The raw data after validation, meaning that the aliases are applied.</span>
<a id="__codelineno-0-462" name="__codelineno-0-462"></a>
<a id="__codelineno-0-463" name="__codelineno-0-463"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-464" name="__codelineno-0-464"></a><span class="sd"> The TableMetadata with the sort_orders set, if not provided.</span>
<a id="__codelineno-0-465" name="__codelineno-0-465"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-466" name="__codelineno-0-466"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">SORT_ORDERS</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;sort_orders&quot;</span><span class="p">):</span>
<a id="__codelineno-0-467" name="__codelineno-0-467"></a> <span class="n">data</span><span class="p">[</span><span class="n">SORT_ORDERS</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">UNSORTED_SORT_ORDER</span><span class="p">]</span>
<a id="__codelineno-0-468" name="__codelineno-0-468"></a> <span class="k">return</span> <span class="n">data</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="pyiceberg.table.metadata.TableMetadataV1.set_v2_compatible_defaults" class="doc doc-heading">
<code class="highlight language-python"><span class="n">set_v2_compatible_defaults</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.TableMetadataV1.set_v2_compatible_defaults" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>Set default values to be compatible with the format v2.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>data</code>
</td>
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>The raw arguments when initializing a V1 TableMetadata.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>The TableMetadata with the defaults applied.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-381">381</a></span>
<span class="normal"><a href="#__codelineno-0-382">382</a></span>
<span class="normal"><a href="#__codelineno-0-383">383</a></span>
<span class="normal"><a href="#__codelineno-0-384">384</a></span>
<span class="normal"><a href="#__codelineno-0-385">385</a></span>
<span class="normal"><a href="#__codelineno-0-386">386</a></span>
<span class="normal"><a href="#__codelineno-0-387">387</a></span>
<span class="normal"><a href="#__codelineno-0-388">388</a></span>
<span class="normal"><a href="#__codelineno-0-389">389</a></span>
<span class="normal"><a href="#__codelineno-0-390">390</a></span>
<span class="normal"><a href="#__codelineno-0-391">391</a></span>
<span class="normal"><a href="#__codelineno-0-392">392</a></span>
<span class="normal"><a href="#__codelineno-0-393">393</a></span>
<span class="normal"><a href="#__codelineno-0-394">394</a></span>
<span class="normal"><a href="#__codelineno-0-395">395</a></span>
<span class="normal"><a href="#__codelineno-0-396">396</a></span>
<span class="normal"><a href="#__codelineno-0-397">397</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-381" name="__codelineno-0-381"></a><span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;before&quot;</span><span class="p">)</span>
<a id="__codelineno-0-382" name="__codelineno-0-382"></a><span class="k">def</span><span class="w"> </span><span class="nf">set_v2_compatible_defaults</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<a id="__codelineno-0-383" name="__codelineno-0-383"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Set default values to be compatible with the format v2.</span>
<a id="__codelineno-0-384" name="__codelineno-0-384"></a>
<a id="__codelineno-0-385" name="__codelineno-0-385"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-386" name="__codelineno-0-386"></a><span class="sd"> data: The raw arguments when initializing a V1 TableMetadata.</span>
<a id="__codelineno-0-387" name="__codelineno-0-387"></a>
<a id="__codelineno-0-388" name="__codelineno-0-388"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-389" name="__codelineno-0-389"></a><span class="sd"> The TableMetadata with the defaults applied.</span>
<a id="__codelineno-0-390" name="__codelineno-0-390"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-391" name="__codelineno-0-391"></a> <span class="c1"># When the schema doesn&#39;t have an ID</span>
<a id="__codelineno-0-392" name="__codelineno-0-392"></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;schema&quot;</span><span class="p">)</span>
<a id="__codelineno-0-393" name="__codelineno-0-393"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<a id="__codelineno-0-394" name="__codelineno-0-394"></a> <span class="k">if</span> <span class="s2">&quot;schema_id&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">schema</span> <span class="ow">and</span> <span class="s2">&quot;schema-id&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">schema</span><span class="p">:</span>
<a id="__codelineno-0-395" name="__codelineno-0-395"></a> <span class="n">schema</span><span class="p">[</span><span class="s2">&quot;schema_id&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">DEFAULT_SCHEMA_ID</span>
<a id="__codelineno-0-396" name="__codelineno-0-396"></a>
<a id="__codelineno-0-397" name="__codelineno-0-397"></a> <span class="k">return</span> <span class="n">data</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h2 id="pyiceberg.table.metadata.TableMetadataV2" class="doc doc-heading">
<code>TableMetadataV2</code>
<a href="#pyiceberg.table.metadata.TableMetadataV2" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p class="doc doc-class-bases">
Bases: <code><a class="autorefs autorefs-internal" title="TableMetadataCommonFields (pyiceberg.table.metadata.TableMetadataCommonFields)" href="#pyiceberg.table.metadata.TableMetadataCommonFields">TableMetadataCommonFields</a></code>, <code><a class="autorefs autorefs-internal" title="IcebergBaseModel (pyiceberg.typedef.IcebergBaseModel)" href="../../typedef/#pyiceberg.typedef.IcebergBaseModel">IcebergBaseModel</a></code></p>
<p>Represents version 2 of the Table Metadata.</p>
<p>This extends Version 1 with row-level deletes, and adds some additional
information to the schema, such as all the historical schemas, partition-specs,
sort-orders.</p>
<p>For more information:
https://iceberg.apache.org/spec/#version-2-row-level-deletes</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-491">491</a></span>
<span class="normal"><a href="#__codelineno-0-492">492</a></span>
<span class="normal"><a href="#__codelineno-0-493">493</a></span>
<span class="normal"><a href="#__codelineno-0-494">494</a></span>
<span class="normal"><a href="#__codelineno-0-495">495</a></span>
<span class="normal"><a href="#__codelineno-0-496">496</a></span>
<span class="normal"><a href="#__codelineno-0-497">497</a></span>
<span class="normal"><a href="#__codelineno-0-498">498</a></span>
<span class="normal"><a href="#__codelineno-0-499">499</a></span>
<span class="normal"><a href="#__codelineno-0-500">500</a></span>
<span class="normal"><a href="#__codelineno-0-501">501</a></span>
<span class="normal"><a href="#__codelineno-0-502">502</a></span>
<span class="normal"><a href="#__codelineno-0-503">503</a></span>
<span class="normal"><a href="#__codelineno-0-504">504</a></span>
<span class="normal"><a href="#__codelineno-0-505">505</a></span>
<span class="normal"><a href="#__codelineno-0-506">506</a></span>
<span class="normal"><a href="#__codelineno-0-507">507</a></span>
<span class="normal"><a href="#__codelineno-0-508">508</a></span>
<span class="normal"><a href="#__codelineno-0-509">509</a></span>
<span class="normal"><a href="#__codelineno-0-510">510</a></span>
<span class="normal"><a href="#__codelineno-0-511">511</a></span>
<span class="normal"><a href="#__codelineno-0-512">512</a></span>
<span class="normal"><a href="#__codelineno-0-513">513</a></span>
<span class="normal"><a href="#__codelineno-0-514">514</a></span>
<span class="normal"><a href="#__codelineno-0-515">515</a></span>
<span class="normal"><a href="#__codelineno-0-516">516</a></span>
<span class="normal"><a href="#__codelineno-0-517">517</a></span>
<span class="normal"><a href="#__codelineno-0-518">518</a></span>
<span class="normal"><a href="#__codelineno-0-519">519</a></span>
<span class="normal"><a href="#__codelineno-0-520">520</a></span>
<span class="normal"><a href="#__codelineno-0-521">521</a></span>
<span class="normal"><a href="#__codelineno-0-522">522</a></span>
<span class="normal"><a href="#__codelineno-0-523">523</a></span>
<span class="normal"><a href="#__codelineno-0-524">524</a></span>
<span class="normal"><a href="#__codelineno-0-525">525</a></span>
<span class="normal"><a href="#__codelineno-0-526">526</a></span>
<span class="normal"><a href="#__codelineno-0-527">527</a></span>
<span class="normal"><a href="#__codelineno-0-528">528</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-491" name="__codelineno-0-491"></a><span class="k">class</span><span class="w"> </span><span class="nc">TableMetadataV2</span><span class="p">(</span><span class="n">TableMetadataCommonFields</span><span class="p">,</span> <span class="n">IcebergBaseModel</span><span class="p">):</span>
<a id="__codelineno-0-492" name="__codelineno-0-492"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Represents version 2 of the Table Metadata.</span>
<a id="__codelineno-0-493" name="__codelineno-0-493"></a>
<a id="__codelineno-0-494" name="__codelineno-0-494"></a><span class="sd"> This extends Version 1 with row-level deletes, and adds some additional</span>
<a id="__codelineno-0-495" name="__codelineno-0-495"></a><span class="sd"> information to the schema, such as all the historical schemas, partition-specs,</span>
<a id="__codelineno-0-496" name="__codelineno-0-496"></a><span class="sd"> sort-orders.</span>
<a id="__codelineno-0-497" name="__codelineno-0-497"></a>
<a id="__codelineno-0-498" name="__codelineno-0-498"></a><span class="sd"> For more information:</span>
<a id="__codelineno-0-499" name="__codelineno-0-499"></a><span class="sd"> https://iceberg.apache.org/spec/#version-2-row-level-deletes</span>
<a id="__codelineno-0-500" name="__codelineno-0-500"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-501" name="__codelineno-0-501"></a>
<a id="__codelineno-0-502" name="__codelineno-0-502"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;before&quot;</span><span class="p">)</span>
<a id="__codelineno-0-503" name="__codelineno-0-503"></a> <span class="k">def</span><span class="w"> </span><span class="nf">cleanup_snapshot_id</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<a id="__codelineno-0-504" name="__codelineno-0-504"></a> <span class="k">return</span> <span class="n">cleanup_snapshot_id</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<a id="__codelineno-0-505" name="__codelineno-0-505"></a>
<a id="__codelineno-0-506" name="__codelineno-0-506"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;after&quot;</span><span class="p">)</span>
<a id="__codelineno-0-507" name="__codelineno-0-507"></a> <span class="k">def</span><span class="w"> </span><span class="nf">check_schemas</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-508" name="__codelineno-0-508"></a> <span class="k">return</span> <span class="n">check_schemas</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-0-509" name="__codelineno-0-509"></a>
<a id="__codelineno-0-510" name="__codelineno-0-510"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;after&quot;</span><span class="p">)</span>
<a id="__codelineno-0-511" name="__codelineno-0-511"></a> <span class="k">def</span><span class="w"> </span><span class="nf">check_partition_specs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-512" name="__codelineno-0-512"></a> <span class="k">return</span> <span class="n">check_partition_specs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-0-513" name="__codelineno-0-513"></a>
<a id="__codelineno-0-514" name="__codelineno-0-514"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;after&quot;</span><span class="p">)</span>
<a id="__codelineno-0-515" name="__codelineno-0-515"></a> <span class="k">def</span><span class="w"> </span><span class="nf">check_sort_orders</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-516" name="__codelineno-0-516"></a> <span class="k">return</span> <span class="n">check_sort_orders</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-0-517" name="__codelineno-0-517"></a>
<a id="__codelineno-0-518" name="__codelineno-0-518"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;after&quot;</span><span class="p">)</span>
<a id="__codelineno-0-519" name="__codelineno-0-519"></a> <span class="k">def</span><span class="w"> </span><span class="nf">construct_refs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-520" name="__codelineno-0-520"></a> <span class="k">return</span> <span class="n">construct_refs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-0-521" name="__codelineno-0-521"></a>
<a id="__codelineno-0-522" name="__codelineno-0-522"></a> <span class="n">format_version</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;format-version&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<a id="__codelineno-0-523" name="__codelineno-0-523"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;An integer version number for the format. Implementations must throw</span>
<a id="__codelineno-0-524" name="__codelineno-0-524"></a><span class="sd"> an exception if a table’s version is higher than the supported version.&quot;&quot;&quot;</span>
<a id="__codelineno-0-525" name="__codelineno-0-525"></a>
<a id="__codelineno-0-526" name="__codelineno-0-526"></a> <span class="n">last_sequence_number</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;last-sequence-number&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">INITIAL_SEQUENCE_NUMBER</span><span class="p">)</span>
<a id="__codelineno-0-527" name="__codelineno-0-527"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;The table’s highest assigned sequence number, a monotonically</span>
<a id="__codelineno-0-528" name="__codelineno-0-528"></a><span class="sd"> increasing long that tracks the order of snapshots in a table.&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataV2.format_version" class="doc doc-heading">
<code class="highlight language-python"><span class="n">format_version</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;format-version&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataV2.format_version" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>An integer version number for the format. Implementations must throw
an exception if a table’s version is higher than the supported version.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataV2.last_sequence_number" class="doc doc-heading">
<code class="highlight language-python"><span class="n">last_sequence_number</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;last-sequence-number&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">INITIAL_SEQUENCE_NUMBER</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataV2.last_sequence_number" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>The table’s highest assigned sequence number, a monotonically
increasing long that tracks the order of snapshots in a table.</p>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h2 id="pyiceberg.table.metadata.TableMetadataV3" class="doc doc-heading">
<code>TableMetadataV3</code>
<a href="#pyiceberg.table.metadata.TableMetadataV3" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p class="doc doc-class-bases">
Bases: <code><a class="autorefs autorefs-internal" title="TableMetadataCommonFields (pyiceberg.table.metadata.TableMetadataCommonFields)" href="#pyiceberg.table.metadata.TableMetadataCommonFields">TableMetadataCommonFields</a></code>, <code><a class="autorefs autorefs-internal" title="IcebergBaseModel (pyiceberg.typedef.IcebergBaseModel)" href="../../typedef/#pyiceberg.typedef.IcebergBaseModel">IcebergBaseModel</a></code></p>
<p>Represents version 3 of the Table Metadata.</p>
<p>Version 3 of the Iceberg spec extends data types and existing metadata structures to add new capabilities:</p>
<div class="highlight"><pre><span></span><code>- New data types: nanosecond timestamp(tz), unknown
- Default value support for columns
- Multi-argument transforms for partitioning and sorting
- Row Lineage tracking
- Binary deletion vectors
</code></pre></div>
<p>For more information:
https://iceberg.apache.org/spec/?column-projection#version-3-extended-types-and-capabilities</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-531">531</a></span>
<span class="normal"><a href="#__codelineno-0-532">532</a></span>
<span class="normal"><a href="#__codelineno-0-533">533</a></span>
<span class="normal"><a href="#__codelineno-0-534">534</a></span>
<span class="normal"><a href="#__codelineno-0-535">535</a></span>
<span class="normal"><a href="#__codelineno-0-536">536</a></span>
<span class="normal"><a href="#__codelineno-0-537">537</a></span>
<span class="normal"><a href="#__codelineno-0-538">538</a></span>
<span class="normal"><a href="#__codelineno-0-539">539</a></span>
<span class="normal"><a href="#__codelineno-0-540">540</a></span>
<span class="normal"><a href="#__codelineno-0-541">541</a></span>
<span class="normal"><a href="#__codelineno-0-542">542</a></span>
<span class="normal"><a href="#__codelineno-0-543">543</a></span>
<span class="normal"><a href="#__codelineno-0-544">544</a></span>
<span class="normal"><a href="#__codelineno-0-545">545</a></span>
<span class="normal"><a href="#__codelineno-0-546">546</a></span>
<span class="normal"><a href="#__codelineno-0-547">547</a></span>
<span class="normal"><a href="#__codelineno-0-548">548</a></span>
<span class="normal"><a href="#__codelineno-0-549">549</a></span>
<span class="normal"><a href="#__codelineno-0-550">550</a></span>
<span class="normal"><a href="#__codelineno-0-551">551</a></span>
<span class="normal"><a href="#__codelineno-0-552">552</a></span>
<span class="normal"><a href="#__codelineno-0-553">553</a></span>
<span class="normal"><a href="#__codelineno-0-554">554</a></span>
<span class="normal"><a href="#__codelineno-0-555">555</a></span>
<span class="normal"><a href="#__codelineno-0-556">556</a></span>
<span class="normal"><a href="#__codelineno-0-557">557</a></span>
<span class="normal"><a href="#__codelineno-0-558">558</a></span>
<span class="normal"><a href="#__codelineno-0-559">559</a></span>
<span class="normal"><a href="#__codelineno-0-560">560</a></span>
<span class="normal"><a href="#__codelineno-0-561">561</a></span>
<span class="normal"><a href="#__codelineno-0-562">562</a></span>
<span class="normal"><a href="#__codelineno-0-563">563</a></span>
<span class="normal"><a href="#__codelineno-0-564">564</a></span>
<span class="normal"><a href="#__codelineno-0-565">565</a></span>
<span class="normal"><a href="#__codelineno-0-566">566</a></span>
<span class="normal"><a href="#__codelineno-0-567">567</a></span>
<span class="normal"><a href="#__codelineno-0-568">568</a></span>
<span class="normal"><a href="#__codelineno-0-569">569</a></span>
<span class="normal"><a href="#__codelineno-0-570">570</a></span>
<span class="normal"><a href="#__codelineno-0-571">571</a></span>
<span class="normal"><a href="#__codelineno-0-572">572</a></span>
<span class="normal"><a href="#__codelineno-0-573">573</a></span>
<span class="normal"><a href="#__codelineno-0-574">574</a></span>
<span class="normal"><a href="#__codelineno-0-575">575</a></span>
<span class="normal"><a href="#__codelineno-0-576">576</a></span>
<span class="normal"><a href="#__codelineno-0-577">577</a></span>
<span class="normal"><a href="#__codelineno-0-578">578</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-531" name="__codelineno-0-531"></a><span class="k">class</span><span class="w"> </span><span class="nc">TableMetadataV3</span><span class="p">(</span><span class="n">TableMetadataCommonFields</span><span class="p">,</span> <span class="n">IcebergBaseModel</span><span class="p">):</span>
<a id="__codelineno-0-532" name="__codelineno-0-532"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Represents version 3 of the Table Metadata.</span>
<a id="__codelineno-0-533" name="__codelineno-0-533"></a>
<a id="__codelineno-0-534" name="__codelineno-0-534"></a><span class="sd"> Version 3 of the Iceberg spec extends data types and existing metadata structures to add new capabilities:</span>
<a id="__codelineno-0-535" name="__codelineno-0-535"></a>
<a id="__codelineno-0-536" name="__codelineno-0-536"></a><span class="sd"> - New data types: nanosecond timestamp(tz), unknown</span>
<a id="__codelineno-0-537" name="__codelineno-0-537"></a><span class="sd"> - Default value support for columns</span>
<a id="__codelineno-0-538" name="__codelineno-0-538"></a><span class="sd"> - Multi-argument transforms for partitioning and sorting</span>
<a id="__codelineno-0-539" name="__codelineno-0-539"></a><span class="sd"> - Row Lineage tracking</span>
<a id="__codelineno-0-540" name="__codelineno-0-540"></a><span class="sd"> - Binary deletion vectors</span>
<a id="__codelineno-0-541" name="__codelineno-0-541"></a>
<a id="__codelineno-0-542" name="__codelineno-0-542"></a><span class="sd"> For more information:</span>
<a id="__codelineno-0-543" name="__codelineno-0-543"></a><span class="sd"> https://iceberg.apache.org/spec/?column-projection#version-3-extended-types-and-capabilities</span>
<a id="__codelineno-0-544" name="__codelineno-0-544"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-545" name="__codelineno-0-545"></a>
<a id="__codelineno-0-546" name="__codelineno-0-546"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;before&quot;</span><span class="p">)</span>
<a id="__codelineno-0-547" name="__codelineno-0-547"></a> <span class="k">def</span><span class="w"> </span><span class="nf">cleanup_snapshot_id</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<a id="__codelineno-0-548" name="__codelineno-0-548"></a> <span class="k">return</span> <span class="n">cleanup_snapshot_id</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<a id="__codelineno-0-549" name="__codelineno-0-549"></a>
<a id="__codelineno-0-550" name="__codelineno-0-550"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;after&quot;</span><span class="p">)</span>
<a id="__codelineno-0-551" name="__codelineno-0-551"></a> <span class="k">def</span><span class="w"> </span><span class="nf">check_schemas</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-552" name="__codelineno-0-552"></a> <span class="k">return</span> <span class="n">check_schemas</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-0-553" name="__codelineno-0-553"></a>
<a id="__codelineno-0-554" name="__codelineno-0-554"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;after&quot;</span><span class="p">)</span>
<a id="__codelineno-0-555" name="__codelineno-0-555"></a> <span class="k">def</span><span class="w"> </span><span class="nf">check_partition_specs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-556" name="__codelineno-0-556"></a> <span class="k">return</span> <span class="n">check_partition_specs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-0-557" name="__codelineno-0-557"></a>
<a id="__codelineno-0-558" name="__codelineno-0-558"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;after&quot;</span><span class="p">)</span>
<a id="__codelineno-0-559" name="__codelineno-0-559"></a> <span class="k">def</span><span class="w"> </span><span class="nf">check_sort_orders</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-560" name="__codelineno-0-560"></a> <span class="k">return</span> <span class="n">check_sort_orders</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-0-561" name="__codelineno-0-561"></a>
<a id="__codelineno-0-562" name="__codelineno-0-562"></a> <span class="nd">@model_validator</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;after&quot;</span><span class="p">)</span>
<a id="__codelineno-0-563" name="__codelineno-0-563"></a> <span class="k">def</span><span class="w"> </span><span class="nf">construct_refs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-564" name="__codelineno-0-564"></a> <span class="k">return</span> <span class="n">construct_refs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-0-565" name="__codelineno-0-565"></a>
<a id="__codelineno-0-566" name="__codelineno-0-566"></a> <span class="n">format_version</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;format-version&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<a id="__codelineno-0-567" name="__codelineno-0-567"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;An integer version number for the format. Implementations must throw</span>
<a id="__codelineno-0-568" name="__codelineno-0-568"></a><span class="sd"> an exception if a table’s version is higher than the supported version.&quot;&quot;&quot;</span>
<a id="__codelineno-0-569" name="__codelineno-0-569"></a>
<a id="__codelineno-0-570" name="__codelineno-0-570"></a> <span class="n">last_sequence_number</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;last-sequence-number&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">INITIAL_SEQUENCE_NUMBER</span><span class="p">)</span>
<a id="__codelineno-0-571" name="__codelineno-0-571"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;The table’s highest assigned sequence number, a monotonically</span>
<a id="__codelineno-0-572" name="__codelineno-0-572"></a><span class="sd"> increasing long that tracks the order of snapshots in a table.&quot;&quot;&quot;</span>
<a id="__codelineno-0-573" name="__codelineno-0-573"></a>
<a id="__codelineno-0-574" name="__codelineno-0-574"></a> <span class="n">next_row_id</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;next-row-id&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
<a id="__codelineno-0-575" name="__codelineno-0-575"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A long higher than all assigned row IDs; the next snapshot&#39;s `first-row-id`.&quot;&quot;&quot;</span>
<a id="__codelineno-0-576" name="__codelineno-0-576"></a>
<a id="__codelineno-0-577" name="__codelineno-0-577"></a> <span class="k">def</span><span class="w"> </span><span class="nf">model_dump_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exclude_none</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="n">exclude</span><span class="p">:</span> <span class="n">Any</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">by_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<a id="__codelineno-0-578" name="__codelineno-0-578"></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Writing V3 is not yet supported, see: https://github.com/apache/iceberg-python/issues/1551&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataV3.format_version" class="doc doc-heading">
<code class="highlight language-python"><span class="n">format_version</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;format-version&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataV3.format_version" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>An integer version number for the format. Implementations must throw
an exception if a table’s version is higher than the supported version.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataV3.last_sequence_number" class="doc doc-heading">
<code class="highlight language-python"><span class="n">last_sequence_number</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;last-sequence-number&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">INITIAL_SEQUENCE_NUMBER</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataV3.last_sequence_number" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>The table’s highest assigned sequence number, a monotonically
increasing long that tracks the order of snapshots in a table.</p>
</div>
</div>
<div class="doc doc-object doc-attribute">
<h3 id="pyiceberg.table.metadata.TableMetadataV3.next_row_id" class="doc doc-heading">
<code class="highlight language-python"><span class="n">next_row_id</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s1">&#39;next-row-id&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small>
<small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small>
</span>
<a href="#pyiceberg.table.metadata.TableMetadataV3.next_row_id" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc doc-contents ">
<p>A long higher than all assigned row IDs; the next snapshot's <code>first-row-id</code>.</p>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-function">
<h2 id="pyiceberg.table.metadata.check_partition_specs" class="doc doc-heading">
<code class="highlight language-python"><span class="n">check_partition_specs</span><span class="p">(</span><span class="n">table_metadata</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.check_partition_specs" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p>Check if the default-spec-id is present in partition-specs.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
<span class="normal"><a href="#__codelineno-0-100">100</a></span>
<span class="normal"><a href="#__codelineno-0-101">101</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="k">def</span><span class="w"> </span><span class="nf">check_partition_specs</span><span class="p">(</span><span class="n">table_metadata</span><span class="p">:</span> <span class="n">TableMetadata</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Check if the default-spec-id is present in partition-specs.&quot;&quot;&quot;</span>
<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">default_spec_id</span> <span class="o">=</span> <span class="n">table_metadata</span><span class="o">.</span><span class="n">default_spec_id</span>
<a id="__codelineno-0-95" name="__codelineno-0-95"></a>
<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="n">partition_specs</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="n">PartitionSpec</span><span class="p">]</span> <span class="o">=</span> <span class="n">table_metadata</span><span class="o">.</span><span class="n">partition_specs</span>
<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">for</span> <span class="n">spec</span> <span class="ow">in</span> <span class="n">partition_specs</span><span class="p">:</span>
<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">if</span> <span class="n">spec</span><span class="o">.</span><span class="n">spec_id</span> <span class="o">==</span> <span class="n">default_spec_id</span><span class="p">:</span>
<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="k">return</span> <span class="n">table_metadata</span>
<a id="__codelineno-0-100" name="__codelineno-0-100"></a>
<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;default-spec-id </span><span class="si">{</span><span class="n">default_spec_id</span><span class="si">}</span><span class="s2"> can&#39;t be found&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h2 id="pyiceberg.table.metadata.check_schemas" class="doc doc-heading">
<code class="highlight language-python"><span class="n">check_schemas</span><span class="p">(</span><span class="n">table_metadata</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.check_schemas" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p>Check if the current-schema-id is actually present in schemas.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-81">81</a></span>
<span class="normal"><a href="#__codelineno-0-82">82</a></span>
<span class="normal"><a href="#__codelineno-0-83">83</a></span>
<span class="normal"><a href="#__codelineno-0-84">84</a></span>
<span class="normal"><a href="#__codelineno-0-85">85</a></span>
<span class="normal"><a href="#__codelineno-0-86">86</a></span>
<span class="normal"><a href="#__codelineno-0-87">87</a></span>
<span class="normal"><a href="#__codelineno-0-88">88</a></span>
<span class="normal"><a href="#__codelineno-0-89">89</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="k">def</span><span class="w"> </span><span class="nf">check_schemas</span><span class="p">(</span><span class="n">table_metadata</span><span class="p">:</span> <span class="n">TableMetadata</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Check if the current-schema-id is actually present in schemas.&quot;&quot;&quot;</span>
<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="n">current_schema_id</span> <span class="o">=</span> <span class="n">table_metadata</span><span class="o">.</span><span class="n">current_schema_id</span>
<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">for</span> <span class="n">schema</span> <span class="ow">in</span> <span class="n">table_metadata</span><span class="o">.</span><span class="n">schemas</span><span class="p">:</span>
<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="k">if</span> <span class="n">schema</span><span class="o">.</span><span class="n">schema_id</span> <span class="o">==</span> <span class="n">current_schema_id</span><span class="p">:</span>
<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">return</span> <span class="n">table_metadata</span>
<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;current-schema-id </span><span class="si">{</span><span class="n">current_schema_id</span><span class="si">}</span><span class="s2"> can&#39;t be found in the schemas&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h2 id="pyiceberg.table.metadata.check_sort_orders" class="doc doc-heading">
<code class="highlight language-python"><span class="n">check_sort_orders</span><span class="p">(</span><span class="n">table_metadata</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.check_sort_orders" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p>Check if the default_sort_order_id is present in sort-orders.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-104">104</a></span>
<span class="normal"><a href="#__codelineno-0-105">105</a></span>
<span class="normal"><a href="#__codelineno-0-106">106</a></span>
<span class="normal"><a href="#__codelineno-0-107">107</a></span>
<span class="normal"><a href="#__codelineno-0-108">108</a></span>
<span class="normal"><a href="#__codelineno-0-109">109</a></span>
<span class="normal"><a href="#__codelineno-0-110">110</a></span>
<span class="normal"><a href="#__codelineno-0-111">111</a></span>
<span class="normal"><a href="#__codelineno-0-112">112</a></span>
<span class="normal"><a href="#__codelineno-0-113">113</a></span>
<span class="normal"><a href="#__codelineno-0-114">114</a></span>
<span class="normal"><a href="#__codelineno-0-115">115</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="k">def</span><span class="w"> </span><span class="nf">check_sort_orders</span><span class="p">(</span><span class="n">table_metadata</span><span class="p">:</span> <span class="n">TableMetadata</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Check if the default_sort_order_id is present in sort-orders.&quot;&quot;&quot;</span>
<a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="n">default_sort_order_id</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">table_metadata</span><span class="o">.</span><span class="n">default_sort_order_id</span>
<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">if</span> <span class="n">default_sort_order_id</span> <span class="o">!=</span> <span class="n">UNSORTED_SORT_ORDER_ID</span><span class="p">:</span>
<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="n">sort_orders</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="n">SortOrder</span><span class="p">]</span> <span class="o">=</span> <span class="n">table_metadata</span><span class="o">.</span><span class="n">sort_orders</span>
<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="k">for</span> <span class="n">sort_order</span> <span class="ow">in</span> <span class="n">sort_orders</span><span class="p">:</span>
<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="k">if</span> <span class="n">sort_order</span><span class="o">.</span><span class="n">order_id</span> <span class="o">==</span> <span class="n">default_sort_order_id</span><span class="p">:</span>
<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="k">return</span> <span class="n">table_metadata</span>
<a id="__codelineno-0-113" name="__codelineno-0-113"></a>
<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;default-sort-order-id </span><span class="si">{</span><span class="n">default_sort_order_id</span><span class="si">}</span><span class="s2"> can&#39;t be found in </span><span class="si">{</span><span class="n">sort_orders</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="k">return</span> <span class="n">table_metadata</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h2 id="pyiceberg.table.metadata.cleanup_snapshot_id" class="doc doc-heading">
<code class="highlight language-python"><span class="n">cleanup_snapshot_id</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.cleanup_snapshot_id" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p>Run before validation.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-72">72</a></span>
<span class="normal"><a href="#__codelineno-0-73">73</a></span>
<span class="normal"><a href="#__codelineno-0-74">74</a></span>
<span class="normal"><a href="#__codelineno-0-75">75</a></span>
<span class="normal"><a href="#__codelineno-0-76">76</a></span>
<span class="normal"><a href="#__codelineno-0-77">77</a></span>
<span class="normal"><a href="#__codelineno-0-78">78</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="k">def</span><span class="w"> </span><span class="nf">cleanup_snapshot_id</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Run before validation.&quot;&quot;&quot;</span>
<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="k">if</span> <span class="n">CURRENT_SNAPSHOT_ID</span> <span class="ow">in</span> <span class="n">data</span> <span class="ow">and</span> <span class="n">data</span><span class="p">[</span><span class="n">CURRENT_SNAPSHOT_ID</span><span class="p">]</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="c1"># We treat -1 and None the same, by cleaning this up</span>
<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="c1"># in a pre-validator, we can simplify the logic later on</span>
<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="n">data</span><span class="p">[</span><span class="n">CURRENT_SNAPSHOT_ID</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">return</span> <span class="n">data</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h2 id="pyiceberg.table.metadata.construct_refs" class="doc doc-heading">
<code class="highlight language-python"><span class="n">construct_refs</span><span class="p">(</span><span class="n">table_metadata</span><span class="p">)</span></code>
<a href="#pyiceberg.table.metadata.construct_refs" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p>Set the main branch if missing.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>pyiceberg/table/metadata.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-118">118</a></span>
<span class="normal"><a href="#__codelineno-0-119">119</a></span>
<span class="normal"><a href="#__codelineno-0-120">120</a></span>
<span class="normal"><a href="#__codelineno-0-121">121</a></span>
<span class="normal"><a href="#__codelineno-0-122">122</a></span>
<span class="normal"><a href="#__codelineno-0-123">123</a></span>
<span class="normal"><a href="#__codelineno-0-124">124</a></span>
<span class="normal"><a href="#__codelineno-0-125">125</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-118" name="__codelineno-0-118"></a><span class="k">def</span><span class="w"> </span><span class="nf">construct_refs</span><span class="p">(</span><span class="n">table_metadata</span><span class="p">:</span> <span class="n">TableMetadata</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TableMetadata</span><span class="p">:</span>
<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Set the main branch if missing.&quot;&quot;&quot;</span>
<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="k">if</span> <span class="n">table_metadata</span><span class="o">.</span><span class="n">current_snapshot_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="k">if</span> <span class="n">MAIN_BRANCH</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">table_metadata</span><span class="o">.</span><span class="n">refs</span><span class="p">:</span>
<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="n">table_metadata</span><span class="o">.</span><span class="n">refs</span><span class="p">[</span><span class="n">MAIN_BRANCH</span><span class="p">]</span> <span class="o">=</span> <span class="n">SnapshotRef</span><span class="p">(</span>
<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="n">snapshot_id</span><span class="o">=</span><span class="n">table_metadata</span><span class="o">.</span><span class="n">current_snapshot_id</span><span class="p">,</span> <span class="n">snapshot_ref_type</span><span class="o">=</span><span class="n">SnapshotRefType</span><span class="o">.</span><span class="n">BRANCH</span>
<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="p">)</span>
<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="k">return</span> <span class="n">table_metadata</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate": null, "base": "../../../..", "features": ["navigation.top", "navigation.tracking", "navigation.tabs", "navigation.tabs.sticky", "content.code.copy"], "search": "../../../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../../../assets/javascripts/bundle.79ae519e.min.js"></script>
</body>
</html>