blob: bbcef3139eec6d99082c230c903edffe164a65a0 [file] [log] [blame]
<!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="icon" href="../../../../assets/images/favicon-96x96.png">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.23">
<title>AWS - Apache Iceberg</title>
<link rel="stylesheet" href="../../../../assets/stylesheets/main.6543a935.min.css">
<link rel="stylesheet" href="../../../../assets/stylesheets/palette.06af60db.min.css">
<link rel="stylesheet" href="../../../../assets/external/fonts.googleapis.com/css.46f4883b.css">
<style>:root{--md-text-font:"Nunito Sans";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../../../assets/stylesheets/extra.css">
<link rel="stylesheet" href="../../../../assets/stylesheets/bootstrap-grid.css">
<link rel="stylesheet" href="../../../../assets/stylesheets/bootstrap-buttons.css">
<link rel="stylesheet" href="../../../../assets/stylesheets/home.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>
</head>
<body dir="ltr" data-md-color-scheme="iceberg" 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="#iceberg-aws-integrations" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<!--
Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
<!-- Determine classes -->
<!-- Header -->
<header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<!-- Link to home -->
<a
href="../../../.."
title="Apache Iceberg"
class="md-header__button md-logo"
aria-label="Apache Iceberg"
data-md-component="logo"
>
<img src="../../../../assets/images/Iceberg-logo.svg" alt="logo">
</a>
<!-- Button to open drawer -->
<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 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<!-- Header title -->
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis"> </span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
AWS
</span>
</div>
</div>
</div>
<!-- Button to open search modal -->
<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.516 6.516 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 5Z"/></svg>
</label>
<!-- Search interface -->
<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.516 6.516 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 5Z"/></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 11h12Z"/></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 12 19 6.41Z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" 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-social">
<a href="https://iceberg.apache.org/community/" target="_blank" rel="noopener" title="iceberg.apache.org" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.5.2 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 2024 Fonticons, Inc.--><path d="M88.2 309.1c9.8-18.3 6.8-40.8-7.5-55.8C59.4 230.9 48 204 48 176c0-63.5 63.8-128 160-128s160 64.5 160 128-63.8 128-160 128c-13.1 0-25.8-1.3-37.8-3.6-10.4-2-21.2-.6-30.7 4.2-4.1 2.1-8.3 4.1-12.6 6-16 7.2-32.9 13.5-49.9 18 2.8-4.6 5.4-9.1 7.9-13.6 1.1-1.9 2.2-3.9 3.2-5.9zM0 176c0 41.8 17.2 80.1 45.9 110.3-.9 1.7-1.9 3.5-2.8 5.1-10.3 18.4-22.3 36.5-36.6 52.1-6.6 7-8.3 17.2-4.6 25.9C5.8 378.3 14.4 384 24 384c43 0 86.5-13.3 122.7-29.7 4.8-2.2 9.6-4.5 14.2-6.8 15.1 3 30.9 4.5 47.1 4.5 114.9 0 208-78.8 208-176S322.9 0 208 0 0 78.8 0 176zm432 304c16.2 0 31.9-1.6 47.1-4.5 4.6 2.3 9.4 4.6 14.2 6.8C529.5 498.7 573 512 616 512c9.6 0 18.2-5.7 22-14.5 3.8-8.8 2-19-4.6-25.9-14.2-15.6-26.2-33.7-36.6-52.1-.9-1.7-1.9-3.4-2.8-5.1 28.8-30.3 46-68.6 46-110.4 0-94.4-87.9-171.5-198.2-175.8 4.1 15.2 6.2 31.2 6.2 47.8v.6c87.2 6.7 144 67.5 144 127.4 0 28-11.4 54.9-32.7 77.2-14.3 15-17.3 37.6-7.5 55.8 1.1 2 2.2 4 3.2 5.9 2.5 4.5 5.2 9 7.9 13.6-17-4.5-33.9-10.7-49.9-18-4.3-1.9-8.5-3.9-12.6-6-9.5-4.8-20.3-6.2-30.7-4.2-12.1 2.4-24.7 3.6-37.8 3.6-61.7 0-110-26.5-136.8-62.3-16 5.4-32.8 9.4-50 11.8C279 439.8 350 480 432 480z"/></svg>
</a>
<a href="https://github.com/apache/iceberg" target="_blank" rel="noopener" title="github.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.2 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 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://www.youtube.com/@ApacheIceberg" target="_blank" rel="noopener" title="www.youtube.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.5.2 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 2024 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"/></svg>
</a>
<a href="https://join.slack.com/t/apache-iceberg/shared_invite/zt-287g3akar-K9Oe_En5j1UL7Y_Ikpai3A" target="_blank" rel="noopener" title="join.slack.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 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 2024 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z"/></svg>
</a>
</div>
<!-- Color palette toggle -->
<!-- User preference: color palette -->
<!-- Site language selector -->
<!-- Repository information -->
</nav>
<!-- Navigation tabs (sticky) -->
<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">
Home
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../spark-quickstart/" class="md-tabs__link">
Quickstart
</a>
</li>
<li class="md-tabs__item">
<a href="../../../nightly/" class="md-tabs__link">
Docs
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../releases/" class="md-tabs__link">
Releases
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../blogs/" class="md-tabs__link">
Blogs
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../talks/" class="md-tabs__link">
Talks
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../vendors/" class="md-tabs__link">
Vendors
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../community/" class="md-tabs__link">
Project
</a>
</li>
<li class="md-tabs__item">
<a href="../../../../concepts/catalog/" class="md-tabs__link">
Concepts
</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="Apache Iceberg" class="md-nav__button md-logo" aria-label="Apache Iceberg" data-md-component="logo">
<img src="../../../../assets/images/Iceberg-logo.svg" alt="logo">
</a>
Apache Iceberg
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../.." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-ellipsis">
Quickstart
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Quickstart
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../../spark-quickstart/" class="md-nav__link">
<span class="md-ellipsis">
Spark
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../hive-quickstart/" class="md-nav__link">
<span class="md-ellipsis">
Hive
</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_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Docs
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Docs
</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_3_1" >
<label class="md-nav__link" for="__nav_3_1" id="__nav_3_1_label" tabindex="0">
<span class="md-ellipsis">
nightly
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_1">
<span class="md-nav__icon md-icon"></span>
nightly
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../nightly/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1_2" >
<label class="md-nav__link" for="__nav_3_1_2" id="__nav_3_1_2_label" tabindex="0">
<span class="md-ellipsis">
Tables
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_1_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_1_2">
<span class="md-nav__icon md-icon"></span>
Tables
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../nightly/branching/" class="md-nav__link">
<span class="md-ellipsis">
Branching and Tagging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/evolution/" class="md-nav__link">
<span class="md-ellipsis">
Evolution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/maintenance/" class="md-nav__link">
<span class="md-ellipsis">
Maintenance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/partitioning/" class="md-nav__link">
<span class="md-ellipsis">
Partitioning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/performance/" class="md-nav__link">
<span class="md-ellipsis">
Performance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/reliability/" class="md-nav__link">
<span class="md-ellipsis">
Reliability
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/schemas/" class="md-nav__link">
<span class="md-ellipsis">
Schemas
</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_3_1_3" >
<label class="md-nav__link" for="__nav_3_1_3" id="__nav_3_1_3_label" tabindex="0">
<span class="md-ellipsis">
Views
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_1_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_1_3">
<span class="md-nav__icon md-icon"></span>
Views
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../nightly/view-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</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_3_1_4" >
<label class="md-nav__link" for="__nav_3_1_4" id="__nav_3_1_4_label" tabindex="0">
<span class="md-ellipsis">
Spark
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_1_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_1_4">
<span class="md-nav__icon md-icon"></span>
Spark
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../nightly/spark-getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/spark-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/spark-ddl/" class="md-nav__link">
<span class="md-ellipsis">
DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/spark-procedures/" class="md-nav__link">
<span class="md-ellipsis">
Procedures
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/spark-queries/" class="md-nav__link">
<span class="md-ellipsis">
Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/spark-structured-streaming/" class="md-nav__link">
<span class="md-ellipsis">
Structured Streaming
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/spark-writes/" class="md-nav__link">
<span class="md-ellipsis">
Writes
</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_3_1_5" >
<label class="md-nav__link" for="__nav_3_1_5" id="__nav_3_1_5_label" tabindex="0">
<span class="md-ellipsis">
Flink
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_1_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_1_5">
<span class="md-nav__icon md-icon"></span>
Flink
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../nightly/flink/" class="md-nav__link">
<span class="md-ellipsis">
Flink Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/flink-connector/" class="md-nav__link">
<span class="md-ellipsis">
Flink Connector
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/flink-ddl/" class="md-nav__link">
<span class="md-ellipsis">
Flink DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/flink-queries/" class="md-nav__link">
<span class="md-ellipsis">
Flink Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/flink-writes/" class="md-nav__link">
<span class="md-ellipsis">
Flink Writes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/flink-actions/" class="md-nav__link">
<span class="md-ellipsis">
Flink Actions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/flink-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Flink Configuration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../nightly/hive/" class="md-nav__link">
<span class="md-ellipsis">
Hive
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://trino.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Trino
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/daft/" class="md-nav__link">
<span class="md-ellipsis">
Daft
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://clickhouse.com/docs/en/engines/table-engines/integrations/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Clickhouse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://prestodb.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Presto
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.dremio.com/data-formats/apache-iceberg/" class="md-nav__link">
<span class="md-ellipsis">
Dremio
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.starrocks.io/en-us/latest/data_source/catalog/iceberg_catalog" class="md-nav__link">
<span class="md-ellipsis">
Starrocks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon Athena
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-cluster.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon EMR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.snowflake.com/en/user-guide/tables-iceberg" class="md-nav__link">
<span class="md-ellipsis">
Snowflake
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://impala.apache.org/docs/build/html/topics/impala_iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Impala
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://doris.apache.org/docs/dev/lakehouse/datalake-analytics/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Doris
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1_18" >
<label class="md-nav__link" for="__nav_3_1_18" id="__nav_3_1_18_label" tabindex="0">
<span class="md-ellipsis">
Integrations
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_1_18_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_1_18">
<span class="md-nav__icon md-icon"></span>
Integrations
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../nightly/aws/" class="md-nav__link">
<span class="md-ellipsis">
AWS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/dell/" class="md-nav__link">
<span class="md-ellipsis">
Dell
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/jdbc/" class="md-nav__link">
<span class="md-ellipsis">
JDBC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/nessie/" class="md-nav__link">
<span class="md-ellipsis">
Nessie
</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_3_1_19" >
<label class="md-nav__link" for="__nav_3_1_19" id="__nav_3_1_19_label" tabindex="0">
<span class="md-ellipsis">
API
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_1_19_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_1_19">
<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="../../../nightly/java-api-quickstart/" class="md-nav__link">
<span class="md-ellipsis">
Java Quickstart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/api/" class="md-nav__link">
<span class="md-ellipsis">
Java API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../nightly/custom-catalog/" class="md-nav__link">
<span class="md-ellipsis">
Java Custom Catalog
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../../javadoc/nightly" class="md-nav__link">
<span class="md-ellipsis">
Javadoc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://py.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
PyIceberg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://rust.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
IcebergRust
</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_3_2" >
<label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
<span class="md-ellipsis">
latest
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2">
<span class="md-nav__icon md-icon"></span>
latest
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../latest/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_2" >
<label class="md-nav__link" for="__nav_3_2_2" id="__nav_3_2_2_label" tabindex="0">
<span class="md-ellipsis">
Tables
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2_2">
<span class="md-nav__icon md-icon"></span>
Tables
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../latest/branching/" class="md-nav__link">
<span class="md-ellipsis">
Branching and Tagging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/evolution/" class="md-nav__link">
<span class="md-ellipsis">
Evolution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/maintenance/" class="md-nav__link">
<span class="md-ellipsis">
Maintenance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/partitioning/" class="md-nav__link">
<span class="md-ellipsis">
Partitioning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/performance/" class="md-nav__link">
<span class="md-ellipsis">
Performance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/reliability/" class="md-nav__link">
<span class="md-ellipsis">
Reliability
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/schemas/" class="md-nav__link">
<span class="md-ellipsis">
Schemas
</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_3_2_3" >
<label class="md-nav__link" for="__nav_3_2_3" id="__nav_3_2_3_label" tabindex="0">
<span class="md-ellipsis">
Views
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2_3">
<span class="md-nav__icon md-icon"></span>
Views
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../latest/view-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</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_3_2_4" >
<label class="md-nav__link" for="__nav_3_2_4" id="__nav_3_2_4_label" tabindex="0">
<span class="md-ellipsis">
Spark
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2_4">
<span class="md-nav__icon md-icon"></span>
Spark
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../latest/spark-getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/spark-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/spark-ddl/" class="md-nav__link">
<span class="md-ellipsis">
DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/spark-procedures/" class="md-nav__link">
<span class="md-ellipsis">
Procedures
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/spark-queries/" class="md-nav__link">
<span class="md-ellipsis">
Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/spark-structured-streaming/" class="md-nav__link">
<span class="md-ellipsis">
Structured Streaming
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/spark-writes/" class="md-nav__link">
<span class="md-ellipsis">
Writes
</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_3_2_5" >
<label class="md-nav__link" for="__nav_3_2_5" id="__nav_3_2_5_label" tabindex="0">
<span class="md-ellipsis">
Flink
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2_5">
<span class="md-nav__icon md-icon"></span>
Flink
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../latest/flink/" class="md-nav__link">
<span class="md-ellipsis">
Flink Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/flink-connector/" class="md-nav__link">
<span class="md-ellipsis">
Flink Connector
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/flink-ddl/" class="md-nav__link">
<span class="md-ellipsis">
Flink DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/flink-queries/" class="md-nav__link">
<span class="md-ellipsis">
Flink Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/flink-writes/" class="md-nav__link">
<span class="md-ellipsis">
Flink Writes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/flink-actions/" class="md-nav__link">
<span class="md-ellipsis">
Flink Actions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/flink-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Flink Configuration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../latest/hive/" class="md-nav__link">
<span class="md-ellipsis">
Hive
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://trino.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Trino
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://clickhouse.com/docs/en/engines/table-engines/integrations/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Clickhouse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://prestodb.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Presto
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.dremio.com/data-formats/apache-iceberg/" class="md-nav__link">
<span class="md-ellipsis">
Dremio
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.starrocks.io/en-us/latest/data_source/catalog/iceberg_catalog" class="md-nav__link">
<span class="md-ellipsis">
Starrocks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon Athena
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-cluster.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon EMR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.snowflake.com/en/user-guide/tables-iceberg" class="md-nav__link">
<span class="md-ellipsis">
Snowflake
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://impala.apache.org/docs/build/html/topics/impala_iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Impala
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://doris.apache.org/docs/dev/lakehouse/datalake-analytics/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Doris
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_17" >
<label class="md-nav__link" for="__nav_3_2_17" id="__nav_3_2_17_label" tabindex="0">
<span class="md-ellipsis">
Integrations
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_17_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2_17">
<span class="md-nav__icon md-icon"></span>
Integrations
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../latest/aws/" class="md-nav__link">
<span class="md-ellipsis">
AWS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/dell/" class="md-nav__link">
<span class="md-ellipsis">
Dell
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/jdbc/" class="md-nav__link">
<span class="md-ellipsis">
JDBC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/nessie/" class="md-nav__link">
<span class="md-ellipsis">
Nessie
</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_3_2_18" >
<label class="md-nav__link" for="__nav_3_2_18" id="__nav_3_2_18_label" tabindex="0">
<span class="md-ellipsis">
API
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_18_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2_18">
<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="../../../latest/java-api-quickstart/" class="md-nav__link">
<span class="md-ellipsis">
Java Quickstart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/api/" class="md-nav__link">
<span class="md-ellipsis">
Java API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../latest/custom-catalog/" class="md-nav__link">
<span class="md-ellipsis">
Java Custom Catalog
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../../javadoc/latest" class="md-nav__link">
<span class="md-ellipsis">
Javadoc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://py.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
PyIceberg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://rust.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
IcebergRust
</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_3_3" >
<label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="0">
<span class="md-ellipsis">
1.5.2
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3">
<span class="md-nav__icon md-icon"></span>
1.5.2
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_2" >
<label class="md-nav__link" for="__nav_3_3_2" id="__nav_3_3_2_label" tabindex="0">
<span class="md-ellipsis">
Tables
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_2">
<span class="md-nav__icon md-icon"></span>
Tables
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../branching/" class="md-nav__link">
<span class="md-ellipsis">
Branching and Tagging
</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="../../evolution/" class="md-nav__link">
<span class="md-ellipsis">
Evolution
</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">
<a href="../../partitioning/" class="md-nav__link">
<span class="md-ellipsis">
Partitioning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../performance/" class="md-nav__link">
<span class="md-ellipsis">
Performance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../reliability/" class="md-nav__link">
<span class="md-ellipsis">
Reliability
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../schemas/" class="md-nav__link">
<span class="md-ellipsis">
Schemas
</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_3_3_3" >
<label class="md-nav__link" for="__nav_3_3_3" id="__nav_3_3_3_label" tabindex="0">
<span class="md-ellipsis">
Views
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_3">
<span class="md-nav__icon md-icon"></span>
Views
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../view-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</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_3_3_4" >
<label class="md-nav__link" for="__nav_3_3_4" id="__nav_3_3_4_label" tabindex="0">
<span class="md-ellipsis">
Spark
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_4">
<span class="md-nav__icon md-icon"></span>
Spark
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../spark-getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../spark-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../spark-ddl/" class="md-nav__link">
<span class="md-ellipsis">
DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../spark-procedures/" class="md-nav__link">
<span class="md-ellipsis">
Procedures
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../spark-queries/" class="md-nav__link">
<span class="md-ellipsis">
Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../spark-structured-streaming/" class="md-nav__link">
<span class="md-ellipsis">
Structured Streaming
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../spark-writes/" class="md-nav__link">
<span class="md-ellipsis">
Writes
</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_3_3_5" >
<label class="md-nav__link" for="__nav_3_3_5" id="__nav_3_3_5_label" tabindex="0">
<span class="md-ellipsis">
Flink
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_5">
<span class="md-nav__icon md-icon"></span>
Flink
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../flink/" class="md-nav__link">
<span class="md-ellipsis">
Flink Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../flink-connector/" class="md-nav__link">
<span class="md-ellipsis">
Flink Connector
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../flink-ddl/" class="md-nav__link">
<span class="md-ellipsis">
Flink DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../flink-queries/" class="md-nav__link">
<span class="md-ellipsis">
Flink Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../flink-writes/" class="md-nav__link">
<span class="md-ellipsis">
Flink Writes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../flink-actions/" class="md-nav__link">
<span class="md-ellipsis">
Flink Actions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../flink-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Flink Configuration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../hive/" class="md-nav__link">
<span class="md-ellipsis">
Hive
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://trino.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Trino
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://clickhouse.com/docs/en/engines/table-engines/integrations/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Clickhouse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://prestodb.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Presto
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.dremio.com/data-formats/apache-iceberg/" class="md-nav__link">
<span class="md-ellipsis">
Dremio
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.starrocks.io/en-us/latest/data_source/catalog/iceberg_catalog" class="md-nav__link">
<span class="md-ellipsis">
Starrocks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon Athena
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-cluster.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon EMR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.snowflake.com/en/user-guide/tables-iceberg" class="md-nav__link">
<span class="md-ellipsis">
Snowflake
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://impala.apache.org/docs/build/html/topics/impala_iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Impala
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://doris.apache.org/docs/dev/lakehouse/datalake-analytics/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Doris
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_17" >
<label class="md-nav__link" for="__nav_3_3_17" id="__nav_3_3_17_label" tabindex="0">
<span class="md-ellipsis">
Integrations
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_17_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_17">
<span class="md-nav__icon md-icon"></span>
Integrations
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../aws/" class="md-nav__link">
<span class="md-ellipsis">
AWS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../dell/" class="md-nav__link">
<span class="md-ellipsis">
Dell
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../jdbc/" class="md-nav__link">
<span class="md-ellipsis">
JDBC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../nessie/" class="md-nav__link">
<span class="md-ellipsis">
Nessie
</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_3_3_18" >
<label class="md-nav__link" for="__nav_3_3_18" id="__nav_3_3_18_label" tabindex="0">
<span class="md-ellipsis">
API
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_18_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3_18">
<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="../../java-api-quickstart/" class="md-nav__link">
<span class="md-ellipsis">
Java Quickstart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../api/" class="md-nav__link">
<span class="md-ellipsis">
Java API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../custom-catalog/" class="md-nav__link">
<span class="md-ellipsis">
Java Custom Catalog
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../../javadoc/1.5.2/" class="md-nav__link">
<span class="md-ellipsis">
Javadoc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://py.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
PyIceberg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://rust.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
IcebergRust
</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_3_4" >
<label class="md-nav__link" for="__nav_3_4" id="__nav_3_4_label" tabindex="0">
<span class="md-ellipsis">
1.5.1
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_4">
<span class="md-nav__icon md-icon"></span>
1.5.1
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.5.1/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_2" >
<label class="md-nav__link" for="__nav_3_4_2" id="__nav_3_4_2_label" tabindex="0">
<span class="md-ellipsis">
Tables
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_4_2">
<span class="md-nav__icon md-icon"></span>
Tables
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.5.1/branching/" class="md-nav__link">
<span class="md-ellipsis">
Branching and Tagging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/evolution/" class="md-nav__link">
<span class="md-ellipsis">
Evolution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/maintenance/" class="md-nav__link">
<span class="md-ellipsis">
Maintenance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/partitioning/" class="md-nav__link">
<span class="md-ellipsis">
Partitioning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/performance/" class="md-nav__link">
<span class="md-ellipsis">
Performance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/reliability/" class="md-nav__link">
<span class="md-ellipsis">
Reliability
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/schemas/" class="md-nav__link">
<span class="md-ellipsis">
Schemas
</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_3_4_3" >
<label class="md-nav__link" for="__nav_3_4_3" id="__nav_3_4_3_label" tabindex="0">
<span class="md-ellipsis">
Views
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_4_3">
<span class="md-nav__icon md-icon"></span>
Views
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.5.1/view-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</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_3_4_4" >
<label class="md-nav__link" for="__nav_3_4_4" id="__nav_3_4_4_label" tabindex="0">
<span class="md-ellipsis">
Spark
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_4_4">
<span class="md-nav__icon md-icon"></span>
Spark
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.5.1/spark-getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/spark-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/spark-ddl/" class="md-nav__link">
<span class="md-ellipsis">
DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/spark-procedures/" class="md-nav__link">
<span class="md-ellipsis">
Procedures
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/spark-queries/" class="md-nav__link">
<span class="md-ellipsis">
Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/spark-structured-streaming/" class="md-nav__link">
<span class="md-ellipsis">
Structured Streaming
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/spark-writes/" class="md-nav__link">
<span class="md-ellipsis">
Writes
</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_3_4_5" >
<label class="md-nav__link" for="__nav_3_4_5" id="__nav_3_4_5_label" tabindex="0">
<span class="md-ellipsis">
Flink
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_4_5">
<span class="md-nav__icon md-icon"></span>
Flink
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.5.1/flink/" class="md-nav__link">
<span class="md-ellipsis">
Flink Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/flink-connector/" class="md-nav__link">
<span class="md-ellipsis">
Flink Connector
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/flink-ddl/" class="md-nav__link">
<span class="md-ellipsis">
Flink DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/flink-queries/" class="md-nav__link">
<span class="md-ellipsis">
Flink Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/flink-writes/" class="md-nav__link">
<span class="md-ellipsis">
Flink Writes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/flink-actions/" class="md-nav__link">
<span class="md-ellipsis">
Flink Actions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/flink-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Flink Configuration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/hive/" class="md-nav__link">
<span class="md-ellipsis">
Hive
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://trino.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Trino
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://clickhouse.com/docs/en/engines/table-engines/integrations/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Clickhouse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://prestodb.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Presto
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.dremio.com/data-formats/apache-iceberg/" class="md-nav__link">
<span class="md-ellipsis">
Dremio
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.starrocks.io/en-us/latest/data_source/catalog/iceberg_catalog" class="md-nav__link">
<span class="md-ellipsis">
Starrocks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon Athena
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-cluster.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon EMR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.snowflake.com/en/user-guide/tables-iceberg" class="md-nav__link">
<span class="md-ellipsis">
Snowflake
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://impala.apache.org/docs/build/html/topics/impala_iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Impala
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://doris.apache.org/docs/dev/lakehouse/datalake-analytics/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Doris
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_17" >
<label class="md-nav__link" for="__nav_3_4_17" id="__nav_3_4_17_label" tabindex="0">
<span class="md-ellipsis">
Integrations
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_17_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_4_17">
<span class="md-nav__icon md-icon"></span>
Integrations
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.5.1/aws/" class="md-nav__link">
<span class="md-ellipsis">
AWS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/dell/" class="md-nav__link">
<span class="md-ellipsis">
Dell
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/jdbc/" class="md-nav__link">
<span class="md-ellipsis">
JDBC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/nessie/" class="md-nav__link">
<span class="md-ellipsis">
Nessie
</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_3_4_18" >
<label class="md-nav__link" for="__nav_3_4_18" id="__nav_3_4_18_label" tabindex="0">
<span class="md-ellipsis">
API
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_18_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_4_18">
<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="../../../1.5.1/java-api-quickstart/" class="md-nav__link">
<span class="md-ellipsis">
Java Quickstart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/api/" class="md-nav__link">
<span class="md-ellipsis">
Java API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.1/custom-catalog/" class="md-nav__link">
<span class="md-ellipsis">
Java Custom Catalog
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../../javadoc/1.5.1/" class="md-nav__link">
<span class="md-ellipsis">
Javadoc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://py.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
PyIceberg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://rust.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
IcebergRust
</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_3_5" >
<label class="md-nav__link" for="__nav_3_5" id="__nav_3_5_label" tabindex="0">
<span class="md-ellipsis">
1.5.0
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_5">
<span class="md-nav__icon md-icon"></span>
1.5.0
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.5.0/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_5_2" >
<label class="md-nav__link" for="__nav_3_5_2" id="__nav_3_5_2_label" tabindex="0">
<span class="md-ellipsis">
Tables
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_5_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_5_2">
<span class="md-nav__icon md-icon"></span>
Tables
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.5.0/branching/" class="md-nav__link">
<span class="md-ellipsis">
Branching and Tagging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/evolution/" class="md-nav__link">
<span class="md-ellipsis">
Evolution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/maintenance/" class="md-nav__link">
<span class="md-ellipsis">
Maintenance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/partitioning/" class="md-nav__link">
<span class="md-ellipsis">
Partitioning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/performance/" class="md-nav__link">
<span class="md-ellipsis">
Performance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/reliability/" class="md-nav__link">
<span class="md-ellipsis">
Reliability
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/schemas/" class="md-nav__link">
<span class="md-ellipsis">
Schemas
</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_3_5_3" >
<label class="md-nav__link" for="__nav_3_5_3" id="__nav_3_5_3_label" tabindex="0">
<span class="md-ellipsis">
Views
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_5_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_5_3">
<span class="md-nav__icon md-icon"></span>
Views
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.5.0/view-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</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_3_5_4" >
<label class="md-nav__link" for="__nav_3_5_4" id="__nav_3_5_4_label" tabindex="0">
<span class="md-ellipsis">
Spark
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_5_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_5_4">
<span class="md-nav__icon md-icon"></span>
Spark
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.5.0/spark-getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/spark-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/spark-ddl/" class="md-nav__link">
<span class="md-ellipsis">
DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/spark-procedures/" class="md-nav__link">
<span class="md-ellipsis">
Procedures
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/spark-queries/" class="md-nav__link">
<span class="md-ellipsis">
Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/spark-structured-streaming/" class="md-nav__link">
<span class="md-ellipsis">
Structured Streaming
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/spark-writes/" class="md-nav__link">
<span class="md-ellipsis">
Writes
</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_3_5_5" >
<label class="md-nav__link" for="__nav_3_5_5" id="__nav_3_5_5_label" tabindex="0">
<span class="md-ellipsis">
Flink
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_5_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_5_5">
<span class="md-nav__icon md-icon"></span>
Flink
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.5.0/flink/" class="md-nav__link">
<span class="md-ellipsis">
Flink Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/flink-connector/" class="md-nav__link">
<span class="md-ellipsis">
Flink Connector
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/flink-ddl/" class="md-nav__link">
<span class="md-ellipsis">
Flink DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/flink-queries/" class="md-nav__link">
<span class="md-ellipsis">
Flink Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/flink-writes/" class="md-nav__link">
<span class="md-ellipsis">
Flink Writes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/flink-actions/" class="md-nav__link">
<span class="md-ellipsis">
Flink Actions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/flink-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Flink Configuration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/hive/" class="md-nav__link">
<span class="md-ellipsis">
Hive
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://trino.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Trino
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://clickhouse.com/docs/en/engines/table-engines/integrations/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Clickhouse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://prestodb.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Presto
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.dremio.com/data-formats/apache-iceberg/" class="md-nav__link">
<span class="md-ellipsis">
Dremio
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.starrocks.io/en-us/latest/data_source/catalog/iceberg_catalog" class="md-nav__link">
<span class="md-ellipsis">
Starrocks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon Athena
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-cluster.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon EMR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.snowflake.com/en/user-guide/tables-iceberg" class="md-nav__link">
<span class="md-ellipsis">
Snowflake
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://impala.apache.org/docs/build/html/topics/impala_iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Impala
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://doris.apache.org/docs/dev/lakehouse/datalake-analytics/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Doris
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_5_17" >
<label class="md-nav__link" for="__nav_3_5_17" id="__nav_3_5_17_label" tabindex="0">
<span class="md-ellipsis">
Integrations
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_5_17_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_5_17">
<span class="md-nav__icon md-icon"></span>
Integrations
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.5.0/aws/" class="md-nav__link">
<span class="md-ellipsis">
AWS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/dell/" class="md-nav__link">
<span class="md-ellipsis">
Dell
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/jdbc/" class="md-nav__link">
<span class="md-ellipsis">
JDBC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/nessie/" class="md-nav__link">
<span class="md-ellipsis">
Nessie
</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_3_5_18" >
<label class="md-nav__link" for="__nav_3_5_18" id="__nav_3_5_18_label" tabindex="0">
<span class="md-ellipsis">
API
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_5_18_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_5_18">
<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="../../../1.5.0/java-api-quickstart/" class="md-nav__link">
<span class="md-ellipsis">
Java Quickstart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/api/" class="md-nav__link">
<span class="md-ellipsis">
Java API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.5.0/custom-catalog/" class="md-nav__link">
<span class="md-ellipsis">
Java Custom Catalog
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../../javadoc/1.5.0/" class="md-nav__link">
<span class="md-ellipsis">
Javadoc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://py.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
PyIceberg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://rust.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
IcebergRust
</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_3_6" >
<label class="md-nav__link" for="__nav_3_6" id="__nav_3_6_label" tabindex="0">
<span class="md-ellipsis">
1.4.3
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6">
<span class="md-nav__icon md-icon"></span>
1.4.3
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.3/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_6_2" >
<label class="md-nav__link" for="__nav_3_6_2" id="__nav_3_6_2_label" tabindex="0">
<span class="md-ellipsis">
Tables
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_6_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6_2">
<span class="md-nav__icon md-icon"></span>
Tables
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.3/branching/" class="md-nav__link">
<span class="md-ellipsis">
Branching and Tagging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/evolution/" class="md-nav__link">
<span class="md-ellipsis">
Evolution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/maintenance/" class="md-nav__link">
<span class="md-ellipsis">
Maintenance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/metrics-reporting/" class="md-nav__link">
<span class="md-ellipsis">
Metrics Reporting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/partitioning/" class="md-nav__link">
<span class="md-ellipsis">
Partitioning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/performance/" class="md-nav__link">
<span class="md-ellipsis">
Performance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/reliability/" class="md-nav__link">
<span class="md-ellipsis">
Reliability
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/schemas/" class="md-nav__link">
<span class="md-ellipsis">
Schemas
</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_3_6_3" >
<label class="md-nav__link" for="__nav_3_6_3" id="__nav_3_6_3_label" tabindex="0">
<span class="md-ellipsis">
Spark
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_6_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6_3">
<span class="md-nav__icon md-icon"></span>
Spark
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.3/spark-getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/spark-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/spark-ddl/" class="md-nav__link">
<span class="md-ellipsis">
DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/spark-procedures/" class="md-nav__link">
<span class="md-ellipsis">
Procedures
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/spark-queries/" class="md-nav__link">
<span class="md-ellipsis">
Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/spark-structured-streaming/" class="md-nav__link">
<span class="md-ellipsis">
Structured Streaming
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/spark-writes/" class="md-nav__link">
<span class="md-ellipsis">
Writes
</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_3_6_4" >
<label class="md-nav__link" for="__nav_3_6_4" id="__nav_3_6_4_label" tabindex="0">
<span class="md-ellipsis">
Flink
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_6_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6_4">
<span class="md-nav__icon md-icon"></span>
Flink
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.3/flink/" class="md-nav__link">
<span class="md-ellipsis">
Flink Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/flink-connector/" class="md-nav__link">
<span class="md-ellipsis">
Flink Connector
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/flink-ddl/" class="md-nav__link">
<span class="md-ellipsis">
Flink DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/flink-queries/" class="md-nav__link">
<span class="md-ellipsis">
Flink Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/flink-writes/" class="md-nav__link">
<span class="md-ellipsis">
Flink Writes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/flink-actions/" class="md-nav__link">
<span class="md-ellipsis">
Flink Actions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/flink-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Flink Configuration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/hive/" class="md-nav__link">
<span class="md-ellipsis">
Hive
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://trino.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Trino
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://clickhouse.com/docs/en/engines/table-engines/integrations/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Clickhouse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://prestodb.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Presto
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.dremio.com/data-formats/apache-iceberg/" class="md-nav__link">
<span class="md-ellipsis">
Dremio
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.starrocks.io/en-us/latest/data_source/catalog/iceberg_catalog" class="md-nav__link">
<span class="md-ellipsis">
Starrocks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon Athena
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-cluster.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon EMR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://impala.apache.org/docs/build/html/topics/impala_iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Impala
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://doris.apache.org/docs/dev/lakehouse/datalake-analytics/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Doris
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_6_15" >
<label class="md-nav__link" for="__nav_3_6_15" id="__nav_3_6_15_label" tabindex="0">
<span class="md-ellipsis">
Integrations
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_6_15_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6_15">
<span class="md-nav__icon md-icon"></span>
Integrations
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.3/aws/" class="md-nav__link">
<span class="md-ellipsis">
AWS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/dell/" class="md-nav__link">
<span class="md-ellipsis">
Dell
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/jdbc/" class="md-nav__link">
<span class="md-ellipsis">
JDBC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/nessie/" class="md-nav__link">
<span class="md-ellipsis">
Nessie
</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_3_6_16" >
<label class="md-nav__link" for="__nav_3_6_16" id="__nav_3_6_16_label" tabindex="0">
<span class="md-ellipsis">
API
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_6_16_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6_16">
<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="../../../1.4.3/java-api-quickstart/" class="md-nav__link">
<span class="md-ellipsis">
Java Quickstart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/api/" class="md-nav__link">
<span class="md-ellipsis">
Java API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/custom-catalog/" class="md-nav__link">
<span class="md-ellipsis">
Java Custom Catalog
</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_3_6_17" >
<label class="md-nav__link" for="__nav_3_6_17" id="__nav_3_6_17_label" tabindex="0">
<span class="md-ellipsis">
Migration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_6_17_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6_17">
<span class="md-nav__icon md-icon"></span>
Migration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.3/table-migration/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/hive-migration/" class="md-nav__link">
<span class="md-ellipsis">
Hive Migration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.3/delta-lake-migration/" class="md-nav__link">
<span class="md-ellipsis">
Delta Lake Migration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../../javadoc/1.4.3" class="md-nav__link">
<span class="md-ellipsis">
Javadoc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://py.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
PyIceberg
</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_3_7" >
<label class="md-nav__link" for="__nav_3_7" id="__nav_3_7_label" tabindex="0">
<span class="md-ellipsis">
1.4.2
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_7">
<span class="md-nav__icon md-icon"></span>
1.4.2
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.2/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_7_2" >
<label class="md-nav__link" for="__nav_3_7_2" id="__nav_3_7_2_label" tabindex="0">
<span class="md-ellipsis">
Tables
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_7_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_7_2">
<span class="md-nav__icon md-icon"></span>
Tables
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.2/branching/" class="md-nav__link">
<span class="md-ellipsis">
Branching and Tagging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/evolution/" class="md-nav__link">
<span class="md-ellipsis">
Evolution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/maintenance/" class="md-nav__link">
<span class="md-ellipsis">
Maintenance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/metrics-reporting/" class="md-nav__link">
<span class="md-ellipsis">
Metrics Reporting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/partitioning/" class="md-nav__link">
<span class="md-ellipsis">
Partitioning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/performance/" class="md-nav__link">
<span class="md-ellipsis">
Performance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/reliability/" class="md-nav__link">
<span class="md-ellipsis">
Reliability
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/schemas/" class="md-nav__link">
<span class="md-ellipsis">
Schemas
</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_3_7_3" >
<label class="md-nav__link" for="__nav_3_7_3" id="__nav_3_7_3_label" tabindex="0">
<span class="md-ellipsis">
Spark
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_7_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_7_3">
<span class="md-nav__icon md-icon"></span>
Spark
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.2/spark-getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/spark-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/spark-ddl/" class="md-nav__link">
<span class="md-ellipsis">
DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/spark-procedures/" class="md-nav__link">
<span class="md-ellipsis">
Procedures
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/spark-queries/" class="md-nav__link">
<span class="md-ellipsis">
Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/spark-structured-streaming/" class="md-nav__link">
<span class="md-ellipsis">
Structured Streaming
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/spark-writes/" class="md-nav__link">
<span class="md-ellipsis">
Writes
</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_3_7_4" >
<label class="md-nav__link" for="__nav_3_7_4" id="__nav_3_7_4_label" tabindex="0">
<span class="md-ellipsis">
Flink
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_7_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_7_4">
<span class="md-nav__icon md-icon"></span>
Flink
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.2/flink/" class="md-nav__link">
<span class="md-ellipsis">
Flink Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/flink-connector/" class="md-nav__link">
<span class="md-ellipsis">
Flink Connector
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/flink-ddl/" class="md-nav__link">
<span class="md-ellipsis">
Flink DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/flink-queries/" class="md-nav__link">
<span class="md-ellipsis">
Flink Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/flink-writes/" class="md-nav__link">
<span class="md-ellipsis">
Flink Writes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/flink-actions/" class="md-nav__link">
<span class="md-ellipsis">
Flink Actions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/flink-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Flink Configuration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/hive/" class="md-nav__link">
<span class="md-ellipsis">
Hive
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://trino.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Trino
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://clickhouse.com/docs/en/engines/table-engines/integrations/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Clickhouse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://prestodb.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Presto
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.dremio.com/data-formats/apache-iceberg/" class="md-nav__link">
<span class="md-ellipsis">
Dremio
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.starrocks.io/en-us/latest/data_source/catalog/iceberg_catalog" class="md-nav__link">
<span class="md-ellipsis">
Starrocks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon Athena
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-cluster.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon EMR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://impala.apache.org/docs/build/html/topics/impala_iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Impala
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://doris.apache.org/docs/dev/lakehouse/datalake-analytics/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Doris
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_7_15" >
<label class="md-nav__link" for="__nav_3_7_15" id="__nav_3_7_15_label" tabindex="0">
<span class="md-ellipsis">
Integrations
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_7_15_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_7_15">
<span class="md-nav__icon md-icon"></span>
Integrations
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.2/aws/" class="md-nav__link">
<span class="md-ellipsis">
AWS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/dell/" class="md-nav__link">
<span class="md-ellipsis">
Dell
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/jdbc/" class="md-nav__link">
<span class="md-ellipsis">
JDBC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/nessie/" class="md-nav__link">
<span class="md-ellipsis">
Nessie
</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_3_7_16" >
<label class="md-nav__link" for="__nav_3_7_16" id="__nav_3_7_16_label" tabindex="0">
<span class="md-ellipsis">
API
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_7_16_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_7_16">
<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="../../../1.4.2/java-api-quickstart/" class="md-nav__link">
<span class="md-ellipsis">
Java Quickstart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/api/" class="md-nav__link">
<span class="md-ellipsis">
Java API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/custom-catalog/" class="md-nav__link">
<span class="md-ellipsis">
Java Custom Catalog
</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_3_7_17" >
<label class="md-nav__link" for="__nav_3_7_17" id="__nav_3_7_17_label" tabindex="0">
<span class="md-ellipsis">
Migration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_7_17_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_7_17">
<span class="md-nav__icon md-icon"></span>
Migration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.2/table-migration/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/hive-migration/" class="md-nav__link">
<span class="md-ellipsis">
Hive Migration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.2/delta-lake-migration/" class="md-nav__link">
<span class="md-ellipsis">
Delta Lake Migration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../../javadoc/1.4.2" class="md-nav__link">
<span class="md-ellipsis">
Javadoc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://py.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
PyIceberg
</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_3_8" >
<label class="md-nav__link" for="__nav_3_8" id="__nav_3_8_label" tabindex="0">
<span class="md-ellipsis">
1.4.1
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_8">
<span class="md-nav__icon md-icon"></span>
1.4.1
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.1/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_8_2" >
<label class="md-nav__link" for="__nav_3_8_2" id="__nav_3_8_2_label" tabindex="0">
<span class="md-ellipsis">
Tables
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_8_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_8_2">
<span class="md-nav__icon md-icon"></span>
Tables
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.1/branching/" class="md-nav__link">
<span class="md-ellipsis">
Branching and Tagging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/evolution/" class="md-nav__link">
<span class="md-ellipsis">
Evolution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/maintenance/" class="md-nav__link">
<span class="md-ellipsis">
Maintenance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/metrics-reporting/" class="md-nav__link">
<span class="md-ellipsis">
Metrics Reporting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/partitioning/" class="md-nav__link">
<span class="md-ellipsis">
Partitioning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/performance/" class="md-nav__link">
<span class="md-ellipsis">
Performance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/reliability/" class="md-nav__link">
<span class="md-ellipsis">
Reliability
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/schemas/" class="md-nav__link">
<span class="md-ellipsis">
Schemas
</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_3_8_3" >
<label class="md-nav__link" for="__nav_3_8_3" id="__nav_3_8_3_label" tabindex="0">
<span class="md-ellipsis">
Spark
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_8_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_8_3">
<span class="md-nav__icon md-icon"></span>
Spark
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.1/spark-getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/spark-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/spark-ddl/" class="md-nav__link">
<span class="md-ellipsis">
DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/spark-procedures/" class="md-nav__link">
<span class="md-ellipsis">
Procedures
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/spark-queries/" class="md-nav__link">
<span class="md-ellipsis">
Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/spark-structured-streaming/" class="md-nav__link">
<span class="md-ellipsis">
Structured Streaming
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/spark-writes/" class="md-nav__link">
<span class="md-ellipsis">
Writes
</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_3_8_4" >
<label class="md-nav__link" for="__nav_3_8_4" id="__nav_3_8_4_label" tabindex="0">
<span class="md-ellipsis">
Flink
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_8_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_8_4">
<span class="md-nav__icon md-icon"></span>
Flink
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.1/flink/" class="md-nav__link">
<span class="md-ellipsis">
Flink Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/flink-connector/" class="md-nav__link">
<span class="md-ellipsis">
Flink Connector
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/flink-ddl/" class="md-nav__link">
<span class="md-ellipsis">
Flink DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/flink-queries/" class="md-nav__link">
<span class="md-ellipsis">
Flink Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/flink-writes/" class="md-nav__link">
<span class="md-ellipsis">
Flink Writes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/flink-actions/" class="md-nav__link">
<span class="md-ellipsis">
Flink Actions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/flink-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Flink Configuration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/hive/" class="md-nav__link">
<span class="md-ellipsis">
Hive
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://trino.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Trino
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://clickhouse.com/docs/en/engines/table-engines/integrations/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Clickhouse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://prestodb.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Presto
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.dremio.com/data-formats/apache-iceberg/" class="md-nav__link">
<span class="md-ellipsis">
Dremio
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.starrocks.io/en-us/latest/data_source/catalog/iceberg_catalog" class="md-nav__link">
<span class="md-ellipsis">
Starrocks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon Athena
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-cluster.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon EMR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://impala.apache.org/docs/build/html/topics/impala_iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Impala
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://doris.apache.org/docs/dev/lakehouse/datalake-analytics/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Doris
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_8_15" >
<label class="md-nav__link" for="__nav_3_8_15" id="__nav_3_8_15_label" tabindex="0">
<span class="md-ellipsis">
Integrations
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_8_15_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_8_15">
<span class="md-nav__icon md-icon"></span>
Integrations
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.1/aws/" class="md-nav__link">
<span class="md-ellipsis">
AWS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/dell/" class="md-nav__link">
<span class="md-ellipsis">
Dell
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/jdbc/" class="md-nav__link">
<span class="md-ellipsis">
JDBC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/nessie/" class="md-nav__link">
<span class="md-ellipsis">
Nessie
</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_3_8_16" >
<label class="md-nav__link" for="__nav_3_8_16" id="__nav_3_8_16_label" tabindex="0">
<span class="md-ellipsis">
API
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_8_16_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_8_16">
<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="../../../1.4.1/java-api-quickstart/" class="md-nav__link">
<span class="md-ellipsis">
Java Quickstart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/api/" class="md-nav__link">
<span class="md-ellipsis">
Java API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/custom-catalog/" class="md-nav__link">
<span class="md-ellipsis">
Java Custom Catalog
</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_3_8_17" >
<label class="md-nav__link" for="__nav_3_8_17" id="__nav_3_8_17_label" tabindex="0">
<span class="md-ellipsis">
Migration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_8_17_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_8_17">
<span class="md-nav__icon md-icon"></span>
Migration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.1/table-migration/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/hive-migration/" class="md-nav__link">
<span class="md-ellipsis">
Hive Migration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.1/delta-lake-migration/" class="md-nav__link">
<span class="md-ellipsis">
Delta Lake Migration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../../javadoc/1.4.1/" class="md-nav__link">
<span class="md-ellipsis">
Javadoc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://py.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
PyIceberg
</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_3_9" >
<label class="md-nav__link" for="__nav_3_9" id="__nav_3_9_label" tabindex="0">
<span class="md-ellipsis">
1.4.0
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_9">
<span class="md-nav__icon md-icon"></span>
1.4.0
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.0/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_9_2" >
<label class="md-nav__link" for="__nav_3_9_2" id="__nav_3_9_2_label" tabindex="0">
<span class="md-ellipsis">
Tables
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_9_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_9_2">
<span class="md-nav__icon md-icon"></span>
Tables
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.0/branching/" class="md-nav__link">
<span class="md-ellipsis">
Branching and Tagging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/evolution/" class="md-nav__link">
<span class="md-ellipsis">
Evolution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/maintenance/" class="md-nav__link">
<span class="md-ellipsis">
Maintenance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/metrics-reporting/" class="md-nav__link">
<span class="md-ellipsis">
Metrics Reporting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/partitioning/" class="md-nav__link">
<span class="md-ellipsis">
Partitioning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/performance/" class="md-nav__link">
<span class="md-ellipsis">
Performance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/reliability/" class="md-nav__link">
<span class="md-ellipsis">
Reliability
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/schemas/" class="md-nav__link">
<span class="md-ellipsis">
Schemas
</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_3_9_3" >
<label class="md-nav__link" for="__nav_3_9_3" id="__nav_3_9_3_label" tabindex="0">
<span class="md-ellipsis">
Spark
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_9_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_9_3">
<span class="md-nav__icon md-icon"></span>
Spark
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.0/spark-getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/spark-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/spark-ddl/" class="md-nav__link">
<span class="md-ellipsis">
DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/spark-procedures/" class="md-nav__link">
<span class="md-ellipsis">
Procedures
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/spark-queries/" class="md-nav__link">
<span class="md-ellipsis">
Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/spark-structured-streaming/" class="md-nav__link">
<span class="md-ellipsis">
Structured Streaming
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/spark-writes/" class="md-nav__link">
<span class="md-ellipsis">
Writes
</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_3_9_4" >
<label class="md-nav__link" for="__nav_3_9_4" id="__nav_3_9_4_label" tabindex="0">
<span class="md-ellipsis">
Flink
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_9_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_9_4">
<span class="md-nav__icon md-icon"></span>
Flink
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.0/flink/" class="md-nav__link">
<span class="md-ellipsis">
Flink Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/flink-connector/" class="md-nav__link">
<span class="md-ellipsis">
Flink Connector
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/flink-ddl/" class="md-nav__link">
<span class="md-ellipsis">
Flink DDL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/flink-queries/" class="md-nav__link">
<span class="md-ellipsis">
Flink Queries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/flink-writes/" class="md-nav__link">
<span class="md-ellipsis">
Flink Writes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/flink-actions/" class="md-nav__link">
<span class="md-ellipsis">
Flink Actions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/flink-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Flink Configuration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/hive/" class="md-nav__link">
<span class="md-ellipsis">
Hive
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://trino.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Trino
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://clickhouse.com/docs/en/engines/table-engines/integrations/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Clickhouse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://prestodb.io/docs/current/connector/iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Presto
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.dremio.com/data-formats/apache-iceberg/" class="md-nav__link">
<span class="md-ellipsis">
Dremio
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.starrocks.io/en-us/latest/data_source/catalog/iceberg_catalog" class="md-nav__link">
<span class="md-ellipsis">
Starrocks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon Athena
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-cluster.html" class="md-nav__link">
<span class="md-ellipsis">
Amazon EMR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://impala.apache.org/docs/build/html/topics/impala_iceberg.html" class="md-nav__link">
<span class="md-ellipsis">
Impala
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://doris.apache.org/docs/dev/lakehouse/datalake-analytics/iceberg" class="md-nav__link">
<span class="md-ellipsis">
Doris
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_9_15" >
<label class="md-nav__link" for="__nav_3_9_15" id="__nav_3_9_15_label" tabindex="0">
<span class="md-ellipsis">
Integrations
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_9_15_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_9_15">
<span class="md-nav__icon md-icon"></span>
Integrations
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.0/aws/" class="md-nav__link">
<span class="md-ellipsis">
AWS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/dell/" class="md-nav__link">
<span class="md-ellipsis">
Dell
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/jdbc/" class="md-nav__link">
<span class="md-ellipsis">
JDBC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/nessie/" class="md-nav__link">
<span class="md-ellipsis">
Nessie
</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_3_9_16" >
<label class="md-nav__link" for="__nav_3_9_16" id="__nav_3_9_16_label" tabindex="0">
<span class="md-ellipsis">
API
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_9_16_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_9_16">
<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="../../../1.4.0/java-api-quickstart/" class="md-nav__link">
<span class="md-ellipsis">
Java Quickstart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/api/" class="md-nav__link">
<span class="md-ellipsis">
Java API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/custom-catalog/" class="md-nav__link">
<span class="md-ellipsis">
Java Custom Catalog
</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_3_9_17" >
<label class="md-nav__link" for="__nav_3_9_17" id="__nav_3_9_17_label" tabindex="0">
<span class="md-ellipsis">
Migration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_9_17_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_9_17">
<span class="md-nav__icon md-icon"></span>
Migration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../1.4.0/table-migration/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/hive-migration/" class="md-nav__link">
<span class="md-ellipsis">
Hive Migration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../1.4.0/delta-lake-migration/" class="md-nav__link">
<span class="md-ellipsis">
Delta Lake Migration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../../javadoc/1.4.0/" class="md-nav__link">
<span class="md-ellipsis">
Javadoc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://py.iceberg.apache.org/" class="md-nav__link">
<span class="md-ellipsis">
PyIceberg
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../../releases/" class="md-nav__link">
<span class="md-ellipsis">
Releases
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../blogs/" class="md-nav__link">
<span class="md-ellipsis">
Blogs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../talks/" class="md-nav__link">
<span class="md-ellipsis">
Talks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../vendors/" class="md-nav__link">
<span class="md-ellipsis">
Vendors
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" >
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
<span class="md-ellipsis">
Project
</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="false">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Project
</label>
<ul class="md-nav__list" data-md-scrollfix>
<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">
<a href="../../../../spec/" class="md-nav__link">
<span class="md-ellipsis">
Spec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../view-spec/" class="md-nav__link">
<span class="md-ellipsis">
View spec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../puffin-spec/" class="md-nav__link">
<span class="md-ellipsis">
Puffin spec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../gcm-stream-spec/" class="md-nav__link">
<span class="md-ellipsis">
AES GCM Stream spec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../../multi-engine-support/" class="md-nav__link">
<span class="md-ellipsis">
Multi-engine support
</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="../../../../terms/" class="md-nav__link">
<span class="md-ellipsis">
Terms
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_9" >
<label class="md-nav__link" for="__nav_8_9" id="__nav_8_9_label" tabindex="0">
<span class="md-ellipsis">
ASF
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_9">
<span class="md-nav__icon md-icon"></span>
ASF
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="https://www.apache.org/foundation/thanks.html" class="md-nav__link">
<span class="md-ellipsis">
Sponsorship
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://www.apache.org/events/current-event.html" class="md-nav__link">
<span class="md-ellipsis">
Events
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://privacy.apache.org/policies/privacy-policy-public.html" class="md-nav__link">
<span class="md-ellipsis">
Privacy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://www.apache.org/licenses/" class="md-nav__link">
<span class="md-ellipsis">
License
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://www.apache.org/security/" class="md-nav__link">
<span class="md-ellipsis">
Security
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://www.apache.org/foundation/thanks.html" class="md-nav__link">
<span class="md-ellipsis">
Sponsors
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" >
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
<span class="md-ellipsis">
Concepts
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
Concepts
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../../concepts/catalog/" class="md-nav__link">
<span class="md-ellipsis">
Catalogs
</span>
</a>
</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="#enabling-aws-integration" class="md-nav__link">
<span class="md-ellipsis">
Enabling AWS Integration
</span>
</a>
<nav class="md-nav" aria-label="Enabling AWS Integration">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#spark" class="md-nav__link">
<span class="md-ellipsis">
Spark
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#flink" class="md-nav__link">
<span class="md-ellipsis">
Flink
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hive" class="md-nav__link">
<span class="md-ellipsis">
Hive
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#catalogs" class="md-nav__link">
<span class="md-ellipsis">
Catalogs
</span>
</a>
<nav class="md-nav" aria-label="Catalogs">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#glue-catalog" class="md-nav__link">
<span class="md-ellipsis">
Glue Catalog
</span>
</a>
<nav class="md-nav" aria-label="Glue Catalog">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#glue-catalog-id" class="md-nav__link">
<span class="md-ellipsis">
Glue Catalog ID
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#skip-archive" class="md-nav__link">
<span class="md-ellipsis">
Skip Archive
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#skip-name-validation" class="md-nav__link">
<span class="md-ellipsis">
Skip Name Validation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#optimistic-locking" class="md-nav__link">
<span class="md-ellipsis">
Optimistic Locking
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#warehouse-location" class="md-nav__link">
<span class="md-ellipsis">
Warehouse Location
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#table-location" class="md-nav__link">
<span class="md-ellipsis">
Table Location
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dynamodb-catalog" class="md-nav__link">
<span class="md-ellipsis">
DynamoDB Catalog
</span>
</a>
<nav class="md-nav" aria-label="DynamoDB Catalog">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#configurations" class="md-nav__link">
<span class="md-ellipsis">
Configurations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#internal-table-design" class="md-nav__link">
<span class="md-ellipsis">
Internal Table Design
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#rds-jdbc-catalog" class="md-nav__link">
<span class="md-ellipsis">
RDS JDBC Catalog
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#which-catalog-to-choose" class="md-nav__link">
<span class="md-ellipsis">
Which catalog to choose?
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#dynamodb-lock-manager" class="md-nav__link">
<span class="md-ellipsis">
DynamoDb Lock Manager
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#s3-fileio" class="md-nav__link">
<span class="md-ellipsis">
S3 FileIO
</span>
</a>
<nav class="md-nav" aria-label="S3 FileIO">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#progressive-multipart-upload" class="md-nav__link">
<span class="md-ellipsis">
Progressive Multipart Upload
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#s3-server-side-encryption" class="md-nav__link">
<span class="md-ellipsis">
S3 Server Side Encryption
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#s3-access-control-list" class="md-nav__link">
<span class="md-ellipsis">
S3 Access Control List
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#object-store-file-layout" class="md-nav__link">
<span class="md-ellipsis">
Object Store File Layout
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#s3-strong-consistency" class="md-nav__link">
<span class="md-ellipsis">
S3 Strong Consistency
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hadoop-s3a-filesystem" class="md-nav__link">
<span class="md-ellipsis">
Hadoop S3A FileSystem
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#s3-write-checksum-verification" class="md-nav__link">
<span class="md-ellipsis">
S3 Write Checksum Verification
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#s3-tags" class="md-nav__link">
<span class="md-ellipsis">
S3 Tags
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#s3-access-points" class="md-nav__link">
<span class="md-ellipsis">
S3 Access Points
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#s3-access-grants" class="md-nav__link">
<span class="md-ellipsis">
S3 Access Grants
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#s3-acceleration" class="md-nav__link">
<span class="md-ellipsis">
S3 Acceleration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#s3-dual-stack" class="md-nav__link">
<span class="md-ellipsis">
S3 Dual-stack
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#aws-client-customization" class="md-nav__link">
<span class="md-ellipsis">
AWS Client Customization
</span>
</a>
<nav class="md-nav" aria-label="AWS Client Customization">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#cross-account-and-cross-region-access" class="md-nav__link">
<span class="md-ellipsis">
Cross-Account and Cross-Region Access
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#http-client-configurations" class="md-nav__link">
<span class="md-ellipsis">
HTTP Client Configurations
</span>
</a>
<nav class="md-nav" aria-label="HTTP Client Configurations">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#url-connection-http-client-configurations" class="md-nav__link">
<span class="md-ellipsis">
URL Connection HTTP Client Configurations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#apache-http-client-configurations" class="md-nav__link">
<span class="md-ellipsis">
Apache HTTP Client Configurations
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#run-iceberg-on-aws" class="md-nav__link">
<span class="md-ellipsis">
Run Iceberg on AWS
</span>
</a>
<nav class="md-nav" aria-label="Run Iceberg on AWS">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#amazon-athena" class="md-nav__link">
<span class="md-ellipsis">
Amazon Athena
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#amazon-emr" class="md-nav__link">
<span class="md-ellipsis">
Amazon EMR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#aws-glue" class="md-nav__link">
<span class="md-ellipsis">
AWS Glue
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#aws-eks" class="md-nav__link">
<span class="md-ellipsis">
AWS EKS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#amazon-kinesis" class="md-nav__link">
<span class="md-ellipsis">
Amazon Kinesis
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-->
<h1 id="iceberg-aws-integrations">Iceberg AWS Integrations<a class="headerlink" href="#iceberg-aws-integrations" title="Permanent link">🔗</a></h1>
<p>Iceberg provides integration with different AWS services through the <code>iceberg-aws</code> module.
This section describes how to use Iceberg with AWS.</p>
<h2 id="enabling-aws-integration">Enabling AWS Integration<a class="headerlink" href="#enabling-aws-integration" title="Permanent link">🔗</a></h2>
<p>The <code>iceberg-aws</code> module is bundled with Spark and Flink engine runtimes for all versions from <code>0.11.0</code> onwards.
However, the AWS clients are not bundled so that you can use the same client version as your application.
You will need to provide the AWS v2 SDK because that is what Iceberg depends on.
You can choose to use the <a href="https://mvnrepository.com/artifact/software.amazon.awssdk/bundle">AWS SDK bundle</a>,
or individual AWS client packages (Glue, S3, DynamoDB, KMS, STS) if you would like to have a minimal dependency footprint.</p>
<p>All the default AWS clients use the <a href="https://mvnrepository.com/artifact/software.amazon.awssdk/apache-client">Apache HTTP Client</a>
for HTTP connection management.
This dependency is not part of the AWS SDK bundle and needs to be added separately.
To choose a different HTTP client library such as <a href="https://mvnrepository.com/artifact/software.amazon.awssdk/url-connection-client">URL Connection HTTP Client</a>,
see the section <a href="#aws-client-customization">client customization</a> for more details.</p>
<p>All the AWS module features can be loaded through custom catalog properties,
you can go to the documentations of each engine to see how to load a custom catalog.
Here are some examples.</p>
<h3 id="spark">Spark<a class="headerlink" href="#spark" title="Permanent link">🔗</a></h3>
<p>For example, to use AWS features with Spark 3.4 (with scala 2.12) and AWS clients (which is packaged in the <code>iceberg-aws-bundle</code>), you can start the Spark SQL shell with:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="c1"># start Spark SQL client shell</span>
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>spark-sql<span class="w"> </span>--packages<span class="w"> </span>org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.5.2,org.apache.iceberg:iceberg-aws-bundle:1.5.2<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span>--conf<span class="w"> </span>spark.sql.defaultCatalog<span class="o">=</span>my_catalog<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="w"> </span>--conf<span class="w"> </span>spark.sql.catalog.my_catalog<span class="o">=</span>org.apache.iceberg.spark.SparkCatalog<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="w"> </span>--conf<span class="w"> </span>spark.sql.catalog.my_catalog.warehouse<span class="o">=</span>s3://my-bucket/my/key/prefix<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="w"> </span>--conf<span class="w"> </span>spark.sql.catalog.my_catalog.type<span class="o">=</span>glue<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="w"> </span>--conf<span class="w"> </span>spark.sql.catalog.my_catalog.io-impl<span class="o">=</span>org.apache.iceberg.aws.s3.S3FileIO
</code></pre></div>
<p>As you can see, In the shell command, we use <code>--packages</code> to specify the additional <code>iceberg-aws-bundle</code> that contains all relevant AWS dependencies.</p>
<h3 id="flink">Flink<a class="headerlink" href="#flink" title="Permanent link">🔗</a></h3>
<p>To use AWS module with Flink, you can download the necessary dependencies and specify them when starting the Flink SQL client:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="c1"># download Iceberg dependency</span>
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="nv">ICEBERG_VERSION</span><span class="o">=</span><span class="m">1</span>.5.2
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="nv">MAVEN_URL</span><span class="o">=</span>https://repo1.maven.org/maven2
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="nv">ICEBERG_MAVEN_URL</span><span class="o">=</span><span class="nv">$MAVEN_URL</span>/org/apache/iceberg
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a>
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a>wget<span class="w"> </span><span class="nv">$ICEBERG_MAVEN_URL</span>/iceberg-flink-runtime/<span class="nv">$ICEBERG_VERSION</span>/iceberg-flink-runtime-<span class="nv">$ICEBERG_VERSION</span>.jar
<a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a>
<a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a>wget<span class="w"> </span><span class="nv">$ICEBERG_MAVEN_URL</span>/iceberg-aws-bundle/<span class="nv">$ICEBERG_VERSION</span>/iceberg-aws-bundle-<span class="nv">$ICEBERG_VERSION</span>.jar
<a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a>
<a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a><span class="c1"># start Flink SQL client shell</span>
<a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a>/path/to/bin/sql-client.sh<span class="w"> </span>embedded<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a><span class="w"> </span>-j<span class="w"> </span>iceberg-flink-runtime-<span class="nv">$ICEBERG_VERSION</span>.jar<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a><span class="w"> </span>-j<span class="w"> </span>iceberg-aws-bundle-<span class="nv">$ICEBERG_VERSION</span>.jar<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a><span class="w"> </span>shell
</code></pre></div>
<p>With those dependencies, you can create a Flink catalog like the following:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">CREATE</span><span class="w"> </span><span class="k">CATALOG</span><span class="w"> </span><span class="n">my_catalog</span><span class="w"> </span><span class="k">WITH</span><span class="w"> </span><span class="p">(</span>
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="s1">&#39;type&#39;</span><span class="o">=</span><span class="s1">&#39;iceberg&#39;</span><span class="p">,</span>
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="s1">&#39;warehouse&#39;</span><span class="o">=</span><span class="s1">&#39;s3://my-bucket/my/key/prefix&#39;</span><span class="p">,</span>
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span><span class="s1">&#39;type&#39;</span><span class="o">=</span><span class="s1">&#39;glue&#39;</span><span class="p">,</span>
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="w"> </span><span class="s1">&#39;io-impl&#39;</span><span class="o">=</span><span class="s1">&#39;org.apache.iceberg.aws.s3.S3FileIO&#39;</span>
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="p">);</span>
</code></pre></div>
<p>You can also specify the catalog configurations in <code>sql-client-defaults.yaml</code> to preload it:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="nt">catalogs</span><span class="p">:</span><span class="w"> </span>
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">my_catalog</span>
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">iceberg</span>
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="w"> </span><span class="nt">warehouse</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">s3://my-bucket/my/key/prefix</span>
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a><span class="w"> </span><span class="nt">catalog-impl</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">org.apache.iceberg.aws.glue.GlueCatalog</span>
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a><span class="w"> </span><span class="nt">io-impl</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">org.apache.iceberg.aws.s3.S3FileIO</span>
</code></pre></div>
<h3 id="hive">Hive<a class="headerlink" href="#hive" title="Permanent link">🔗</a></h3>
<p>To use AWS module with Hive, you can download the necessary dependencies similar to the Flink example,
and then add them to the Hive classpath or add the jars at runtime in CLI:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>add jar /my/path/to/iceberg-hive-runtime.jar;
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>add jar /my/path/to/aws/bundle.jar;
</code></pre></div>
<p>With those dependencies, you can register a Glue catalog and create external tables in Hive at runtime in CLI by:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="k">SET</span><span class="w"> </span><span class="n">iceberg</span><span class="p">.</span><span class="n">engine</span><span class="p">.</span><span class="n">hive</span><span class="p">.</span><span class="n">enabled</span><span class="o">=</span><span class="k">true</span><span class="p">;</span>
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="k">SET</span><span class="w"> </span><span class="n">hive</span><span class="p">.</span><span class="n">vectorized</span><span class="p">.</span><span class="n">execution</span><span class="p">.</span><span class="n">enabled</span><span class="o">=</span><span class="k">false</span><span class="p">;</span>
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="k">SET</span><span class="w"> </span><span class="n">iceberg</span><span class="p">.</span><span class="k">catalog</span><span class="p">.</span><span class="n">glue</span><span class="p">.</span><span class="k">type</span><span class="o">=</span><span class="n">glue</span><span class="p">;</span>
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="k">SET</span><span class="w"> </span><span class="n">iceberg</span><span class="p">.</span><span class="k">catalog</span><span class="p">.</span><span class="n">glue</span><span class="p">.</span><span class="n">warehouse</span><span class="o">=</span><span class="n">s3</span><span class="p">:</span><span class="o">//</span><span class="n">my</span><span class="o">-</span><span class="n">bucket</span><span class="o">/</span><span class="n">my</span><span class="o">/</span><span class="k">key</span><span class="o">/</span><span class="k">prefix</span><span class="p">;</span>
<a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a>
<a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a><span class="c1">-- suppose you have an Iceberg table database_a.table_a created by GlueCatalog</span>
<a id="__codelineno-5-7" name="__codelineno-5-7" href="#__codelineno-5-7"></a><span class="k">CREATE</span><span class="w"> </span><span class="k">EXTERNAL</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">database_a</span><span class="p">.</span><span class="n">table_a</span>
<a id="__codelineno-5-8" name="__codelineno-5-8" href="#__codelineno-5-8"></a><span class="n">STORED</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="s1">&#39;org.apache.iceberg.mr.hive.HiveIcebergStorageHandler&#39;</span>
<a id="__codelineno-5-9" name="__codelineno-5-9" href="#__codelineno-5-9"></a><span class="n">TBLPROPERTIES</span><span class="w"> </span><span class="p">(</span><span class="s1">&#39;iceberg.catalog&#39;</span><span class="o">=</span><span class="s1">&#39;glue&#39;</span><span class="p">);</span>
</code></pre></div>
<p>You can also preload the catalog by setting the configurations above in <code>hive-site.xml</code>.</p>
<h2 id="catalogs">Catalogs<a class="headerlink" href="#catalogs" title="Permanent link">🔗</a></h2>
<p>There are multiple different options that users can choose to build an Iceberg catalog with AWS.</p>
<h3 id="glue-catalog">Glue Catalog<a class="headerlink" href="#glue-catalog" title="Permanent link">🔗</a></h3>
<p>Iceberg enables the use of <a href="https://aws.amazon.com/glue">AWS Glue</a> as the <code>Catalog</code> implementation.
When used, an Iceberg namespace is stored as a <a href="https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-databases.html">Glue Database</a>,
an Iceberg table is stored as a <a href="https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html">Glue Table</a>,
and every Iceberg table version is stored as a <a href="https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-TableVersion">Glue TableVersion</a>.
You can start using Glue catalog by specifying the <code>catalog-impl</code> as <code>org.apache.iceberg.aws.glue.GlueCatalog</code>
or by setting <code>type</code> as <code>glue</code>,
just like what is shown in the <a href="#enabling-aws-integration">enabling AWS integration</a> section above.
More details about loading the catalog can be found in individual engine pages, such as <a href="../spark-configuration/#loading-a-custom-catalog">Spark</a> and <a href="../flink/#creating-catalogs-and-using-catalogs">Flink</a>.</p>
<h4 id="glue-catalog-id">Glue Catalog ID<a class="headerlink" href="#glue-catalog-id" title="Permanent link">🔗</a></h4>
<p>There is a unique Glue metastore in each AWS account and each AWS region.
By default, <code>GlueCatalog</code> chooses the Glue metastore to use based on the user's default AWS client credential and region setup.
You can specify the Glue catalog ID through <code>glue.id</code> catalog property to point to a Glue catalog in a different AWS account.
The Glue catalog ID is your numeric AWS account ID.
If the Glue catalog is in a different region, you should configure your AWS client to point to the correct region,
see more details in <a href="#aws-client-customization">AWS client customization</a>.</p>
<h4 id="skip-archive">Skip Archive<a class="headerlink" href="#skip-archive" title="Permanent link">🔗</a></h4>
<p>AWS Glue has the ability to archive older table versions and a user can roll back the table to any historical version if needed.
By default, the Iceberg Glue Catalog will skip the archival of older table versions.
If a user wishes to archive older table versions, they can set <code>glue.skip-archive</code> to false.
Do note for streaming ingestion into Iceberg tables, setting <code>glue.skip-archive</code> to false will quickly create a lot of Glue table versions.
For more details, please read <a href="https://docs.aws.amazon.com/general/latest/gr/glue.html">Glue Quotas</a> and the <a href="https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateTable.html">UpdateTable API</a>.</p>
<h4 id="skip-name-validation">Skip Name Validation<a class="headerlink" href="#skip-name-validation" title="Permanent link">🔗</a></h4>
<p>Allow user to skip name validation for table name and namespaces.
It is recommended to stick to <a href="https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html">Glue best practices</a>
to make sure operations are Hive compatible.
This is only added for users that have existing conventions using non-standard characters. When database name
and table name validation are skipped, there is no guarantee that downstream systems would all support the names.</p>
<h4 id="optimistic-locking">Optimistic Locking<a class="headerlink" href="#optimistic-locking" title="Permanent link">🔗</a></h4>
<p>By default, Iceberg uses Glue's optimistic locking for concurrent updates to a table.
With optimistic locking, each table has a version id.
If users retrieve the table metadata, Iceberg records the version id of that table.
Users can update the table as long as the version ID on the server side remains unchanged.
Version mismatch occurs if someone else modified the table before you did, causing an update failure.
Iceberg then refreshes metadata and checks if there is a conflict.
If there is no commit conflict, the operation will be retried.
Optimistic locking guarantees atomic transaction of Iceberg tables in Glue.
It also prevents others from accidentally overwriting your changes.</p>
<div class="admonition info">
<p class="admonition-title">Info</p>
<p>Please use AWS SDK version &gt;= 2.17.131 to leverage Glue's Optimistic Locking.
If the AWS SDK version is below 2.17.131, only in-memory lock is used. To ensure atomic transaction, you need to set up a <a href="#dynamodb-lock-manager">DynamoDb Lock Manager</a>.</p>
</div>
<h4 id="warehouse-location">Warehouse Location<a class="headerlink" href="#warehouse-location" title="Permanent link">🔗</a></h4>
<p>Similar to all other catalog implementations, <code>warehouse</code> is a required catalog property to determine the root path of the data warehouse in storage.
By default, Glue only allows a warehouse location in S3 because of the use of <code>S3FileIO</code>.
To store data in a different local or cloud store, Glue catalog can switch to use <code>HadoopFileIO</code> or any custom FileIO by setting the <code>io-impl</code> catalog property.
Details about this feature can be found in the <a href="../custom-catalog/#custom-file-io-implementation">custom FileIO</a> section.</p>
<h4 id="table-location">Table Location<a class="headerlink" href="#table-location" title="Permanent link">🔗</a></h4>
<p>By default, the root location for a table <code>my_table</code> of namespace <code>my_ns</code> is at <code>my-warehouse-location/my-ns.db/my-table</code>.
This default root location can be changed at both namespace and table level.</p>
<p>To use a different path prefix for all tables under a namespace, use AWS console or any AWS Glue client SDK you like to update the <code>locationUri</code> attribute of the corresponding Glue database.
For example, you can update the <code>locationUri</code> of <code>my_ns</code> to <code>s3://my-ns-bucket</code>,
then any newly created table will have a default root location under the new prefix.
For instance, a new table <code>my_table_2</code> will have its root location at <code>s3://my-ns-bucket/my_table_2</code>.</p>
<p>To use a completely different root path for a specific table, set the <code>location</code> table property to the desired root path value you want.
For example, in Spark SQL you can do:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">my_catalog</span><span class="p">.</span><span class="n">my_ns</span><span class="p">.</span><span class="n">my_table</span><span class="w"> </span><span class="p">(</span>
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="nb">bigint</span><span class="p">,</span>
<a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="w"> </span><span class="k">data</span><span class="w"> </span><span class="n">string</span><span class="p">,</span>
<a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a><span class="w"> </span><span class="n">category</span><span class="w"> </span><span class="n">string</span><span class="p">)</span>
<a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a><span class="k">USING</span><span class="w"> </span><span class="n">iceberg</span>
<a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a><span class="k">OPTIONS</span><span class="w"> </span><span class="p">(</span><span class="s1">&#39;location&#39;</span><span class="o">=</span><span class="s1">&#39;s3://my-special-table-bucket&#39;</span><span class="p">)</span>
<a id="__codelineno-6-7" name="__codelineno-6-7" href="#__codelineno-6-7"></a><span class="n">PARTITIONED</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="p">(</span><span class="n">category</span><span class="p">);</span>
</code></pre></div>
<p>For engines like Spark that support the <code>LOCATION</code> keyword, the above SQL statement is equivalent to:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">my_catalog</span><span class="p">.</span><span class="n">my_ns</span><span class="p">.</span><span class="n">my_table</span><span class="w"> </span><span class="p">(</span>
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="nb">bigint</span><span class="p">,</span>
<a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="w"> </span><span class="k">data</span><span class="w"> </span><span class="n">string</span><span class="p">,</span>
<a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a><span class="w"> </span><span class="n">category</span><span class="w"> </span><span class="n">string</span><span class="p">)</span>
<a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a><span class="k">USING</span><span class="w"> </span><span class="n">iceberg</span>
<a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a><span class="k">LOCATION</span><span class="w"> </span><span class="s1">&#39;s3://my-special-table-bucket&#39;</span>
<a id="__codelineno-7-7" name="__codelineno-7-7" href="#__codelineno-7-7"></a><span class="n">PARTITIONED</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="p">(</span><span class="n">category</span><span class="p">);</span>
</code></pre></div>
<h3 id="dynamodb-catalog">DynamoDB Catalog<a class="headerlink" href="#dynamodb-catalog" title="Permanent link">🔗</a></h3>
<p>Iceberg supports using a <a href="https://aws.amazon.com/dynamodb">DynamoDB</a> table to record and manage database and table information.</p>
<h4 id="configurations">Configurations<a class="headerlink" href="#configurations" title="Permanent link">🔗</a></h4>
<p>The DynamoDB catalog supports the following configurations:</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Default</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>dynamodb.table-name</td>
<td>iceberg</td>
<td>name of the DynamoDB table used by DynamoDbCatalog</td>
</tr>
</tbody>
</table>
<h4 id="internal-table-design">Internal Table Design<a class="headerlink" href="#internal-table-design" title="Permanent link">🔗</a></h4>
<p>The DynamoDB table is designed with the following columns:</p>
<table>
<thead>
<tr>
<th>Column</th>
<th>Key</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>identifier</td>
<td>partition key</td>
<td>string</td>
<td>table identifier such as <code>db1.table1</code>, or string <code>NAMESPACE</code> for namespaces</td>
</tr>
<tr>
<td>namespace</td>
<td>sort key</td>
<td>string</td>
<td>namespace name. A <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html">global secondary index (GSI)</a> is created with namespace as partition key, identifier as sort key, no other projected columns</td>
</tr>
<tr>
<td>v</td>
<td></td>
<td>string</td>
<td>row version, used for optimistic locking</td>
</tr>
<tr>
<td>updated_at</td>
<td></td>
<td>number</td>
<td>timestamp (millis) of the last update</td>
</tr>
<tr>
<td>created_at</td>
<td></td>
<td>number</td>
<td>timestamp (millis) of the table creation</td>
</tr>
<tr>
<td>p.&lt;property_key&gt;</td>
<td></td>
<td>string</td>
<td>Iceberg-defined table properties including <code>table_type</code>, <code>metadata_location</code> and <code>previous_metadata_location</code> or namespace properties</td>
</tr>
</tbody>
</table>
<p>This design has the following benefits:</p>
<ol>
<li>it avoids potential <a href="https://aws.amazon.com/premiumsupport/knowledge-center/dynamodb-table-throttled/">hot partition issue</a> if there are heavy write traffic to the tables within the same namespace because the partition key is at the table level</li>
<li>namespace operations are clustered in a single partition to avoid affecting table commit operations</li>
<li>a sort key to partition key reverse GSI is used for list table operation, and all other operations are single row ops or single partition query. No full table scan is needed for any operation in the catalog.</li>
<li>a string UUID version field <code>v</code> is used instead of <code>updated_at</code> to avoid 2 processes committing at the same millisecond</li>
<li>multi-row transaction is used for <code>catalog.renameTable</code> to ensure idempotency</li>
<li>properties are flattened as top level columns so that user can add custom GSI on any property field to customize the catalog. For example, users can store owner information as table property <code>owner</code>, and search tables by owner by adding a GSI on the <code>p.owner</code> column.</li>
</ol>
<h3 id="rds-jdbc-catalog">RDS JDBC Catalog<a class="headerlink" href="#rds-jdbc-catalog" title="Permanent link">🔗</a></h3>
<p>Iceberg also supports the JDBC catalog which uses a table in a relational database to manage Iceberg tables.
You can configure to use the JDBC catalog with relational database services like <a href="https://aws.amazon.com/rds">AWS RDS</a>.
Read <a href="../jdbc/#jdbc-catalog">the JDBC integration page</a> for guides and examples about using the JDBC catalog.
Read <a href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.Connecting.Java.html">this AWS documentation</a> for more details about configuring the JDBC catalog with IAM authentication. </p>
<h3 id="which-catalog-to-choose">Which catalog to choose?<a class="headerlink" href="#which-catalog-to-choose" title="Permanent link">🔗</a></h3>
<p>With all the available options, we offer the following guidelines when choosing the right catalog to use for your application:</p>
<ol>
<li>if your organization has an existing Glue metastore or plans to use the AWS analytics ecosystem including Glue, <a href="https://aws.amazon.com/athena">Athena</a>, <a href="https://aws.amazon.com/emr">EMR</a>, <a href="https://aws.amazon.com/redshift">Redshift</a> and <a href="https://aws.amazon.com/lake-formation">LakeFormation</a>, Glue catalog provides the easiest integration.</li>
<li>if your application requires frequent updates to table or high read and write throughput (e.g. streaming write), Glue and DynamoDB catalog provides the best performance through optimistic locking.</li>
<li>if you would like to enforce access control for tables in a catalog, Glue tables can be managed as an <a href="https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html">IAM resource</a>, whereas DynamoDB catalog tables can only be managed through <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/specifying-conditions.html">item-level permission</a> which is much more complicated.</li>
<li>if you would like to query tables based on table property information without the need to scan the entire catalog, DynamoDB catalog allows you to build secondary indexes for any arbitrary property field and provide efficient query performance.</li>
<li>if you would like to have the benefit of DynamoDB catalog while also connect to Glue, you can enable <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.Tutorial.html">DynamoDB stream with Lambda trigger</a> to asynchronously update your Glue metastore with table information in the DynamoDB catalog. </li>
<li>if your organization already maintains an existing relational database in RDS or uses <a href="https://aws.amazon.com/rds/aurora/serverless/">serverless Aurora</a> to manage tables, the JDBC catalog provides the easiest integration.</li>
</ol>
<h2 id="dynamodb-lock-manager">DynamoDb Lock Manager<a class="headerlink" href="#dynamodb-lock-manager" title="Permanent link">🔗</a></h2>
<p><a href="https://aws.amazon.com/dynamodb">Amazon DynamoDB</a> can be used by <code>HadoopCatalog</code> or <code>HadoopTables</code> so that for every commit,
the catalog first obtains a lock using a helper DynamoDB table and then try to safely modify the Iceberg table.
This is necessary for a file system-based catalog to ensure atomic transaction in storages like S3 that do not provide file write mutual exclusion.</p>
<p>This feature requires the following lock related catalog properties:</p>
<ol>
<li>Set <code>lock-impl</code> as <code>org.apache.iceberg.aws.dynamodb.DynamoDbLockManager</code>.</li>
<li>Set <code>lock.table</code> as the DynamoDB table name you would like to use. If the lock table with the given name does not exist in DynamoDB, a new table is created with billing mode set as <a href="https://aws.amazon.com/blogs/aws/amazon-dynamodb-on-demand-no-capacity-planning-and-pay-per-request-pricing">pay-per-request</a>.</li>
</ol>
<p>Other lock related catalog properties can also be used to adjust locking behaviors such as heartbeat interval.
For more details, please refer to <a href="../configuration/#lock-catalog-properties">Lock catalog properties</a>.</p>
<h2 id="s3-fileio">S3 FileIO<a class="headerlink" href="#s3-fileio" title="Permanent link">🔗</a></h2>
<p>Iceberg allows users to write data to S3 through <code>S3FileIO</code>.
<code>GlueCatalog</code> by default uses this <code>FileIO</code>, and other catalogs can load this <code>FileIO</code> using the <code>io-impl</code> catalog property.</p>
<h3 id="progressive-multipart-upload">Progressive Multipart Upload<a class="headerlink" href="#progressive-multipart-upload" title="Permanent link">🔗</a></h3>
<p><code>S3FileIO</code> implements a customized progressive multipart upload algorithm to upload data.
Data files are uploaded by parts in parallel as soon as each part is ready,
and each file part is deleted as soon as its upload process completes.
This provides maximized upload speed and minimized local disk usage during uploads.
Here are the configurations that users can tune related to this feature:</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Default</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>s3.multipart.num-threads</td>
<td>the available number of processors in the system</td>
<td>number of threads to use for uploading parts to S3 (shared across all output streams)</td>
</tr>
<tr>
<td>s3.multipart.part-size-bytes</td>
<td>32MB</td>
<td>the size of a single part for multipart upload requests</td>
</tr>
<tr>
<td>s3.multipart.threshold</td>
<td>1.5</td>
<td>the threshold expressed as a factor times the multipart size at which to switch from uploading using a single put object request to uploading using multipart upload</td>
</tr>
<tr>
<td>s3.staging-dir</td>
<td><code>java.io.tmpdir</code> property value</td>
<td>the directory to hold temporary files</td>
</tr>
</tbody>
</table>
<h3 id="s3-server-side-encryption">S3 Server Side Encryption<a class="headerlink" href="#s3-server-side-encryption" title="Permanent link">🔗</a></h3>
<p><code>S3FileIO</code> supports all 3 S3 server side encryption modes:</p>
<ul>
<li><a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html">SSE-S3</a>: When you use Server-Side Encryption with Amazon S3-Managed Keys (SSE-S3), each object is encrypted with a unique key. As an additional safeguard, it encrypts the key itself with a master key that it regularly rotates. Amazon S3 server-side encryption uses one of the strongest block ciphers available, 256-bit Advanced Encryption Standard (AES-256), to encrypt your data.</li>
<li><a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html">SSE-KMS</a>: Server-Side Encryption with Customer Master Keys (CMKs) Stored in AWS Key Management Service (SSE-KMS) is similar to SSE-S3, but with some additional benefits and charges for using this service. There are separate permissions for the use of a CMK that provides added protection against unauthorized access of your objects in Amazon S3. SSE-KMS also provides you with an audit trail that shows when your CMK was used and by whom. Additionally, you can create and manage customer managed CMKs or use AWS managed CMKs that are unique to you, your service, and your Region.</li>
<li><a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html">SSE-C</a>: With Server-Side Encryption with Customer-Provided Keys (SSE-C), you manage the encryption keys and Amazon S3 manages the encryption, as it writes to disks, and decryption when you access your objects.</li>
</ul>
<p>To enable server side encryption, use the following configuration properties:</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Default</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>s3.sse.type</td>
<td><code>none</code></td>
<td><code>none</code>, <code>s3</code>, <code>kms</code> or <code>custom</code></td>
</tr>
<tr>
<td>s3.sse.key</td>
<td><code>aws/s3</code> for <code>kms</code> type, null otherwise</td>
<td>A KMS Key ID or ARN for <code>kms</code> type, or a custom base-64 AES256 symmetric key for <code>custom</code> type.</td>
</tr>
<tr>
<td>s3.sse.md5</td>
<td>null</td>
<td>If SSE type is <code>custom</code>, this value must be set as the base-64 MD5 digest of the symmetric key to ensure integrity.</td>
</tr>
</tbody>
</table>
<h3 id="s3-access-control-list">S3 Access Control List<a class="headerlink" href="#s3-access-control-list" title="Permanent link">🔗</a></h3>
<p><code>S3FileIO</code> supports S3 access control list (ACL) for detailed access control.
User can choose the ACL level by setting the <code>s3.acl</code> property.
For more details, please read <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">S3 ACL Documentation</a>.</p>
<h3 id="object-store-file-layout">Object Store File Layout<a class="headerlink" href="#object-store-file-layout" title="Permanent link">🔗</a></h3>
<p>S3 and many other cloud storage services <a href="https://aws.amazon.com/premiumsupport/knowledge-center/s3-request-limit-avoid-throttling/">throttle requests based on object prefix</a>.
Data stored in S3 with a traditional Hive storage layout can face S3 request throttling as objects are stored under the same file path prefix.</p>
<p>Iceberg by default uses the Hive storage layout but can be switched to use the <code>ObjectStoreLocationProvider</code>.
With <code>ObjectStoreLocationProvider</code>, a deterministic hash is generated for each stored file, with the hash appended
directly after the <code>write.data.path</code>. This ensures files written to s3 are equally distributed across multiple <a href="https://aws.amazon.com/premiumsupport/knowledge-center/s3-object-key-naming-pattern/">prefixes</a> in the S3 bucket. Resulting in minimized throttling and maximized throughput for S3-related IO operations. When using <code>ObjectStoreLocationProvider</code> having a shared and short <code>write.data.path</code> across your Iceberg tables will improve performance.</p>
<p>For more information on how S3 scales API QPS, check out the 2018 re:Invent session on <a href="https://youtu.be/rHeTn9pHNKo?t=3219">Best Practices for Amazon S3 and Amazon S3 Glacier</a>. At <a href="https://youtu.be/rHeTn9pHNKo?t=3219">53:39</a> it covers how S3 scales/partitions &amp; at <a href="https://youtu.be/rHeTn9pHNKo?t=3290">54:50</a> it discusses the 30-60 minute wait time before new partitions are created.</p>
<p>To use the <code>ObjectStorageLocationProvider</code> add <code>'write.object-storage.enabled'=true</code> in the table's properties.
Below is an example Spark SQL command to create a table using the <code>ObjectStorageLocationProvider</code>:
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">my_catalog</span><span class="p">.</span><span class="n">my_ns</span><span class="p">.</span><span class="n">my_table</span><span class="w"> </span><span class="p">(</span>
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="nb">bigint</span><span class="p">,</span>
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="w"> </span><span class="k">data</span><span class="w"> </span><span class="n">string</span><span class="p">,</span>
<a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a><span class="w"> </span><span class="n">category</span><span class="w"> </span><span class="n">string</span><span class="p">)</span>
<a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a><span class="k">USING</span><span class="w"> </span><span class="n">iceberg</span>
<a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a><span class="k">OPTIONS</span><span class="w"> </span><span class="p">(</span>
<a id="__codelineno-8-7" name="__codelineno-8-7" href="#__codelineno-8-7"></a><span class="w"> </span><span class="s1">&#39;write.object-storage.enabled&#39;</span><span class="o">=</span><span class="k">true</span><span class="p">,</span><span class="w"> </span>
<a id="__codelineno-8-8" name="__codelineno-8-8" href="#__codelineno-8-8"></a><span class="w"> </span><span class="s1">&#39;write.data.path&#39;</span><span class="o">=</span><span class="s1">&#39;s3://my-table-data-bucket&#39;</span><span class="p">)</span>
<a id="__codelineno-8-9" name="__codelineno-8-9" href="#__codelineno-8-9"></a><span class="n">PARTITIONED</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="p">(</span><span class="n">category</span><span class="p">);</span>
</code></pre></div></p>
<p>We can then insert a single row into this new table
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">my_catalog</span><span class="p">.</span><span class="n">my_ns</span><span class="p">.</span><span class="n">my_table</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="ss">&quot;Pizza&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">&quot;orders&quot;</span><span class="p">);</span>
</code></pre></div></p>
<p>Which will write the data to S3 with a hash (<code>2d3905f8</code>) appended directly after the <code>write.object-storage.path</code>, ensuring reads to the table are spread evenly across <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html">S3 bucket prefixes</a>, and improving performance.
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>s3://my-table-data-bucket/2d3905f8/my_ns.db/my_table/category=orders/00000-0-5affc076-96a4-48f2-9cd2-d5efbc9f0c94-00001.parquet
</code></pre></div></p>
<p>Note, the path resolution logic for <code>ObjectStoreLocationProvider</code> is <code>write.data.path</code> then <code>&lt;tableLocation&gt;/data</code>.
However, for the older versions up to 0.12.0, the logic is as follows:
- before 0.12.0, <code>write.object-storage.path</code> must be set.
- at 0.12.0, <code>write.object-storage.path</code> then <code>write.folder-storage.path</code> then <code>&lt;tableLocation&gt;/data</code>.</p>
<p>For more details, please refer to the <a href="../custom-catalog/#custom-location-provider-implementation">LocationProvider Configuration</a> section. </p>
<h3 id="s3-strong-consistency">S3 Strong Consistency<a class="headerlink" href="#s3-strong-consistency" title="Permanent link">🔗</a></h3>
<p>In November 2020, S3 announced <a href="https://aws.amazon.com/s3/consistency/">strong consistency</a> for all read operations, and Iceberg is updated to fully leverage this feature.
There is no redundant consistency wait and check which might negatively impact performance during IO operations.</p>
<h3 id="hadoop-s3a-filesystem">Hadoop S3A FileSystem<a class="headerlink" href="#hadoop-s3a-filesystem" title="Permanent link">🔗</a></h3>
<p>Before <code>S3FileIO</code> was introduced, many Iceberg users choose to use <code>HadoopFileIO</code> to write data to S3 through the <a href="https://github.com/apache/hadoop/blob/trunk/hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/S3AFileSystem.java">S3A FileSystem</a>.
As introduced in the previous sections, <code>S3FileIO</code> adopts the latest AWS clients and S3 features for optimized security and performance
and is thus recommended for S3 use cases rather than the S3A FileSystem.</p>
<p><code>S3FileIO</code> writes data with <code>s3://</code> URI scheme, but it is also compatible with schemes written by the S3A FileSystem.
This means for any table manifests containing <code>s3a://</code> or <code>s3n://</code> file paths, <code>S3FileIO</code> is still able to read them.
This feature allows people to easily switch from S3A to <code>S3FileIO</code>.</p>
<p>If for any reason you have to use S3A, here are the instructions:</p>
<ol>
<li>To store data using S3A, specify the <code>warehouse</code> catalog property to be an S3A path, e.g. <code>s3a://my-bucket/my-warehouse</code> </li>
<li>For <code>HiveCatalog</code>, to also store metadata using S3A, specify the Hadoop config property <code>hive.metastore.warehouse.dir</code> to be an S3A path.</li>
<li>Add <a href="https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-aws">hadoop-aws</a> as a runtime dependency of your compute engine.</li>
<li>Configure AWS settings based on <a href="https://hadoop.apache.org/docs/current/hadoop-aws/tools/hadoop-aws/index.html">hadoop-aws documentation</a> (make sure you check the version, S3A configuration varies a lot based on the version you use). </li>
</ol>
<h3 id="s3-write-checksum-verification">S3 Write Checksum Verification<a class="headerlink" href="#s3-write-checksum-verification" title="Permanent link">🔗</a></h3>
<p>To ensure integrity of uploaded objects, checksum validations for S3 writes can be turned on by setting catalog property <code>s3.checksum-enabled</code> to <code>true</code>.
This is turned off by default.</p>
<h3 id="s3-tags">S3 Tags<a class="headerlink" href="#s3-tags" title="Permanent link">🔗</a></h3>
<p>Custom <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html">tags</a> can be added to S3 objects while writing and deleting.
For example, to write S3 tags with Spark 3.3, you can start the Spark SQL shell with:
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>spark-sql --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
<a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a> --conf spark.sql.catalog.my_catalog.warehouse=s3://my-bucket/my/key/prefix \
<a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a> --conf spark.sql.catalog.my_catalog.type=glue \
<a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a> --conf spark.sql.catalog.my_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
<a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a> --conf spark.sql.catalog.my_catalog.s3.write.tags.my_key1=my_val1 \
<a id="__codelineno-11-6" name="__codelineno-11-6" href="#__codelineno-11-6"></a> --conf spark.sql.catalog.my_catalog.s3.write.tags.my_key2=my_val2
</code></pre></div>
For the above example, the objects in S3 will be saved with tags: <code>my_key1=my_val1</code> and <code>my_key2=my_val2</code>. Do note that the specified write tags will be saved only while object creation.</p>
<p>When the catalog property <code>s3.delete-enabled</code> is set to <code>false</code>, the objects are not hard-deleted from S3.
This is expected to be used in combination with S3 delete tagging, so objects are tagged and removed using <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html">S3 lifecycle policy</a>.
The property is set to <code>true</code> by default.</p>
<p>With the <code>s3.delete.tags</code> config, objects are tagged with the configured key-value pairs before deletion.
Users can configure tag-based object lifecycle policy at bucket level to transition objects to different tiers.
For example, to add S3 delete tags with Spark 3.3, you can start the Spark SQL shell with: </p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>sh spark-sql --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
<a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a> --conf spark.sql.catalog.my_catalog.warehouse=s3://iceberg-warehouse/s3-tagging \
<a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a> --conf spark.sql.catalog.my_catalog.type=glue \
<a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a> --conf spark.sql.catalog.my_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
<a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a> --conf spark.sql.catalog.my_catalog.s3.delete.tags.my_key3=my_val3 \
<a id="__codelineno-12-6" name="__codelineno-12-6" href="#__codelineno-12-6"></a> --conf spark.sql.catalog.my_catalog.s3.delete-enabled=false
</code></pre></div>
<p>For the above example, the objects in S3 will be saved with tags: <code>my_key3=my_val3</code> before deletion.
Users can also use the catalog property <code>s3.delete.num-threads</code> to mention the number of threads to be used for adding delete tags to the S3 objects.</p>
<p>When the catalog property <code>s3.write.table-tag-enabled</code> and <code>s3.write.namespace-tag-enabled</code> is set to <code>true</code> then the objects in S3 will be saved with tags: <code>iceberg.table=&lt;table-name&gt;</code> and <code>iceberg.namespace=&lt;namespace-name&gt;</code>.
Users can define access and data retention policy per namespace or table based on these tags.
For example, to write table and namespace name as S3 tags with Spark 3.3, you can start the Spark SQL shell with:
<div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>sh spark-sql --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
<a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a> --conf spark.sql.catalog.my_catalog.warehouse=s3://iceberg-warehouse/s3-tagging \
<a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a> --conf spark.sql.catalog.my_catalog.type=glue \
<a id="__codelineno-13-4" name="__codelineno-13-4" href="#__codelineno-13-4"></a> --conf spark.sql.catalog.my_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
<a id="__codelineno-13-5" name="__codelineno-13-5" href="#__codelineno-13-5"></a> --conf spark.sql.catalog.my_catalog.s3.write.table-tag-enabled=true \
<a id="__codelineno-13-6" name="__codelineno-13-6" href="#__codelineno-13-6"></a> --conf spark.sql.catalog.my_catalog.s3.write.namespace-tag-enabled=true
</code></pre></div>
For more details on tag restrictions, please refer <a href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html">User-Defined Tag Restrictions</a>.</p>
<h3 id="s3-access-points">S3 Access Points<a class="headerlink" href="#s3-access-points" title="Permanent link">🔗</a></h3>
<p><a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html">Access Points</a> can be used to perform
S3 operations by specifying a mapping of bucket to access points. This is useful for multi-region access, cross-region access,
disaster recovery, etc.</p>
<p>For using cross-region access points, we need to additionally set <code>use-arn-region-enabled</code> catalog property to
<code>true</code> to enable <code>S3FileIO</code> to make cross-region calls, it's not required for same / multi-region access points.</p>
<p>For example, to use S3 access-point with Spark 3.3, you can start the Spark SQL shell with:
<div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>spark-sql --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
<a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a> --conf spark.sql.catalog.my_catalog.warehouse=s3://my-bucket2/my/key/prefix \
<a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a> --conf spark.sql.catalog.my_catalog.type=glue \
<a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a> --conf spark.sql.catalog.my_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
<a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a> --conf spark.sql.catalog.my_catalog.s3.use-arn-region-enabled=false \
<a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a> --conf spark.sql.catalog.test.s3.access-points.my-bucket1=arn:aws:s3::123456789012:accesspoint:mfzwi23gnjvgw.mrap \
<a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a> --conf spark.sql.catalog.test.s3.access-points.my-bucket2=arn:aws:s3::123456789012:accesspoint:mfzwi23gnjvgw.mrap
</code></pre></div>
For the above example, the objects in S3 on <code>my-bucket1</code> and <code>my-bucket2</code> buckets will use <code>arn:aws:s3::123456789012:accesspoint:mfzwi23gnjvgw.mrap</code>
access-point for all S3 operations.</p>
<p>For more details on using access-points, please refer <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-usage-examples.html">Using access points with compatible Amazon S3 operations</a>.</p>
<h3 id="s3-access-grants">S3 Access Grants<a class="headerlink" href="#s3-access-grants" title="Permanent link">🔗</a></h3>
<p><a href="https://aws.amazon.com/s3/features/access-grants/">S3 Access Grants</a> can be used to grant accesses to S3 data using IAM Principals.
In order to enable S3 Access Grants to work in Iceberg, you can set the <code>s3.access-grants.enabled</code> catalog property to <code>true</code> after
you add the <a href="https://github.com/aws/aws-s3-accessgrants-plugin-java-v2">S3 Access Grants Plugin jar</a> to your classpath. A link
to the Maven listing for this plugin can be found <a href="https://mvnrepository.com/artifact/software.amazon.s3.accessgrants/aws-s3-accessgrants-java-plugin">here</a>.</p>
<p>In addition, we allow the <a href="https://github.com/aws/aws-s3-accessgrants-plugin-java-v2">fallback-to-IAM configuration</a> which allows
you to fallback to using your IAM role (and its permission sets directly) to access your S3 data in the case the S3 Access Grants
is unable to authorize your S3 call. This can be done using the <code>s3.access-grants.fallback-to-iam</code> boolean catalog property. By default,
this property is set to <code>false</code>.</p>
<p>For example, to add the S3 Access Grants Integration with Spark 3.3, you can start the Spark SQL shell with:
<div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>spark-sql --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
<a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a> --conf spark.sql.catalog.my_catalog.warehouse=s3://my-bucket2/my/key/prefix \
<a id="__codelineno-15-3" name="__codelineno-15-3" href="#__codelineno-15-3"></a> --conf spark.sql.catalog.my_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog \
<a id="__codelineno-15-4" name="__codelineno-15-4" href="#__codelineno-15-4"></a> --conf spark.sql.catalog.my_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
<a id="__codelineno-15-5" name="__codelineno-15-5" href="#__codelineno-15-5"></a> --conf spark.sql.catalog.my_catalog.s3.access-grants.enabled=true \
<a id="__codelineno-15-6" name="__codelineno-15-6" href="#__codelineno-15-6"></a> --conf spark.sql.catalog.my_catalog.s3.access-grants.fallback-to-iam=true
</code></pre></div></p>
<p>For more details on using S3 Access Grants, please refer to <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html">Managing access with S3 Access Grants</a>.</p>
<h3 id="s3-acceleration">S3 Acceleration<a class="headerlink" href="#s3-acceleration" title="Permanent link">🔗</a></h3>
<p><a href="https://aws.amazon.com/s3/transfer-acceleration/">S3 Acceleration</a> can be used to speed up transfers to and from Amazon S3 by as much as 50-500% for long-distance transfer of larger objects.</p>
<p>To use S3 Acceleration, we need to set <code>s3.acceleration-enabled</code> catalog property to <code>true</code> to enable <code>S3FileIO</code> to make accelerated S3 calls.</p>
<p>For example, to use S3 Acceleration with Spark 3.3, you can start the Spark SQL shell with:
<div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>spark-sql --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
<a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a> --conf spark.sql.catalog.my_catalog.warehouse=s3://my-bucket2/my/key/prefix \
<a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a> --conf spark.sql.catalog.my_catalog.type=glue \
<a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a> --conf spark.sql.catalog.my_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
<a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a> --conf spark.sql.catalog.my_catalog.s3.acceleration-enabled=true
</code></pre></div></p>
<p>For more details on using S3 Acceleration, please refer to <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration.html">Configuring fast, secure file transfers using Amazon S3 Transfer Acceleration</a>.</p>
<h3 id="s3-dual-stack">S3 Dual-stack<a class="headerlink" href="#s3-dual-stack" title="Permanent link">🔗</a></h3>
<p><a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/dual-stack-endpoints.html">S3 Dual-stack</a> allows a client to access an S3 bucket through a dual-stack endpoint.
When clients request a dual-stack endpoint, the bucket URL resolves to an IPv6 address if possible, otherwise fallback to IPv4.</p>
<p>To use S3 Dual-stack, we need to set <code>s3.dualstack-enabled</code> catalog property to <code>true</code> to enable <code>S3FileIO</code> to make dual-stack S3 calls.</p>
<p>For example, to use S3 Dual-stack with Spark 3.3, you can start the Spark SQL shell with:
<div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>spark-sql --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
<a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a> --conf spark.sql.catalog.my_catalog.warehouse=s3://my-bucket2/my/key/prefix \
<a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a> --conf spark.sql.catalog.my_catalog.type=glue \
<a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a> --conf spark.sql.catalog.my_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
<a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a> --conf spark.sql.catalog.my_catalog.s3.dualstack-enabled=true
</code></pre></div></p>
<p>For more details on using S3 Dual-stack, please refer <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/dual-stack-endpoints.html#dual-stack-endpoints-cli">Using dual-stack endpoints from the AWS CLI and the AWS SDKs</a></p>
<h2 id="aws-client-customization">AWS Client Customization<a class="headerlink" href="#aws-client-customization" title="Permanent link">🔗</a></h2>
<p>Many organizations have customized their way of configuring AWS clients with their own credential provider, access proxy, retry strategy, etc.
Iceberg allows users to plug in their own implementation of <code>org.apache.iceberg.aws.AwsClientFactory</code> by setting the <code>client.factory</code> catalog property.</p>
<h3 id="cross-account-and-cross-region-access">Cross-Account and Cross-Region Access<a class="headerlink" href="#cross-account-and-cross-region-access" title="Permanent link">🔗</a></h3>
<p>It is a common use case for organizations to have a centralized AWS account for Glue metastore and S3 buckets, and use different AWS accounts and regions for different teams to access those resources.
In this case, a <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html">cross-account IAM role</a> is needed to access those centralized resources.
Iceberg provides an AWS client factory <code>AssumeRoleAwsClientFactory</code> to support this common use case.
This also serves as an example for users who would like to implement their own AWS client factory.</p>
<p>This client factory has the following configurable catalog properties:</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Default</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>client.assume-role.arn</td>
<td>null, requires user input</td>
<td>ARN of the role to assume, e.g. arn:aws:iam::123456789:role/myRoleToAssume</td>
</tr>
<tr>
<td>client.assume-role.region</td>
<td>null, requires user input</td>
<td>All AWS clients except the STS client will use the given region instead of the default region chain</td>
</tr>
<tr>
<td>client.assume-role.external-id</td>
<td>null</td>
<td>An optional <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html">external ID</a></td>
</tr>
<tr>
<td>client.assume-role.timeout-sec</td>
<td>1 hour</td>
<td>Timeout of each assume role session. At the end of the timeout, a new set of role session credentials will be fetched through an STS client.</td>
</tr>
</tbody>
</table>
<p>By using this client factory, an STS client is initialized with the default credential and region to assume the specified role.
The Glue, S3 and DynamoDB clients are then initialized with the assume-role credential and region to access resources.
Here is an example to start Spark shell with this client factory:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>spark-sql<span class="w"> </span>--packages<span class="w"> </span>org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.5.2,org.apache.iceberg:iceberg-aws-bundle:1.5.2<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a><span class="w"> </span>--conf<span class="w"> </span>spark.sql.catalog.my_catalog<span class="o">=</span>org.apache.iceberg.spark.SparkCatalog<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-18-3" name="__codelineno-18-3" href="#__codelineno-18-3"></a><span class="w"> </span>--conf<span class="w"> </span>spark.sql.catalog.my_catalog.warehouse<span class="o">=</span>s3://my-bucket/my/key/prefix<span class="w"> </span><span class="se">\ </span><span class="w"> </span>
<a id="__codelineno-18-4" name="__codelineno-18-4" href="#__codelineno-18-4"></a><span class="w"> </span>--conf<span class="w"> </span>spark.sql.catalog.my_catalog.type<span class="o">=</span>glue<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-18-5" name="__codelineno-18-5" href="#__codelineno-18-5"></a><span class="w"> </span>--conf<span class="w"> </span>spark.sql.catalog.my_catalog.client.factory<span class="o">=</span>org.apache.iceberg.aws.AssumeRoleAwsClientFactory<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-18-6" name="__codelineno-18-6" href="#__codelineno-18-6"></a><span class="w"> </span>--conf<span class="w"> </span>spark.sql.catalog.my_catalog.client.assume-role.arn<span class="o">=</span>arn:aws:iam::123456789:role/myRoleToAssume<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-18-7" name="__codelineno-18-7" href="#__codelineno-18-7"></a><span class="w"> </span>--conf<span class="w"> </span>spark.sql.catalog.my_catalog.client.assume-role.region<span class="o">=</span>ap-northeast-1
</code></pre></div>
<h3 id="http-client-configurations">HTTP Client Configurations<a class="headerlink" href="#http-client-configurations" title="Permanent link">🔗</a></h3>
<p>AWS clients support two types of HTTP Client, <a href="https://mvnrepository.com/artifact/software.amazon.awssdk/url-connection-client">URL Connection HTTP Client</a>
and <a href="https://mvnrepository.com/artifact/software.amazon.awssdk/apache-client">Apache HTTP Client</a>.
By default, AWS clients use <strong>Apache</strong> HTTP Client to communicate with the service.
This HTTP client supports various functionalities and customized settings, such as expect-continue handshake and TCP KeepAlive, at the cost of extra dependency and additional startup latency.
In contrast, URL Connection HTTP Client optimizes for minimum dependencies and startup latency but supports less functionality than other implementations.</p>
<p>For more details of configuration, see sections <a href="#url-connection-http-client-configurations">URL Connection HTTP Client Configurations</a> and <a href="#apache-http-client-configurations">Apache HTTP Client Configurations</a>.</p>
<p>Configure the following property to set the type of HTTP client:</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Default</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>http-client.type</td>
<td>apache</td>
<td>Types of HTTP Client. <br/> <code>urlconnection</code>: URL Connection HTTP Client <br/> <code>apache</code>: Apache HTTP Client</td>
</tr>
</tbody>
</table>
<h4 id="url-connection-http-client-configurations">URL Connection HTTP Client Configurations<a class="headerlink" href="#url-connection-http-client-configurations" title="Permanent link">🔗</a></h4>
<p>URL Connection HTTP Client has the following configurable properties:</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Default</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>http-client.urlconnection.socket-timeout-ms</td>
<td>null</td>
<td>An optional <a href="https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.Builder.html#socketTimeout(java.time.Duration)">socket timeout</a> in milliseconds</td>
</tr>
<tr>
<td>http-client.urlconnection.connection-timeout-ms</td>
<td>null</td>
<td>An optional <a href="https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.Builder.html#connectionTimeout(java.time.Duration)">connection timeout</a> in milliseconds</td>
</tr>
</tbody>
</table>
<p>Users can use catalog properties to override the defaults. For example, to configure the socket timeout for URL Connection HTTP Client when starting a spark shell, one can add:
<div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a>--conf<span class="w"> </span>spark.sql.catalog.my_catalog.http-client.urlconnection.socket-timeout-ms<span class="o">=</span><span class="m">80</span>
</code></pre></div></p>
<h4 id="apache-http-client-configurations">Apache HTTP Client Configurations<a class="headerlink" href="#apache-http-client-configurations" title="Permanent link">🔗</a></h4>
<p>Apache HTTP Client has the following configurable properties:</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Default</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>http-client.apache.socket-timeout-ms</td>
<td>null</td>
<td>An optional <a href="https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html#socketTimeout(java.time.Duration)">socket timeout</a> in milliseconds</td>
</tr>
<tr>
<td>http-client.apache.connection-timeout-ms</td>
<td>null</td>
<td>An optional <a href="https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html#connectionTimeout(java.time.Duration)">connection timeout</a> in milliseconds</td>
</tr>
<tr>
<td>http-client.apache.connection-acquisition-timeout-ms</td>
<td>null</td>
<td>An optional <a href="https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html#connectionAcquisitionTimeout(java.time.Duration)">connection acquisition timeout</a> in milliseconds</td>
</tr>
<tr>
<td>http-client.apache.connection-max-idle-time-ms</td>
<td>null</td>
<td>An optional <a href="https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html#connectionMaxIdleTime(java.time.Duration)">connection max idle timeout</a> in milliseconds</td>
</tr>
<tr>
<td>http-client.apache.connection-time-to-live-ms</td>
<td>null</td>
<td>An optional <a href="https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html#connectionTimeToLive(java.time.Duration)">connection time to live</a> in milliseconds</td>
</tr>
<tr>
<td>http-client.apache.expect-continue-enabled</td>
<td>null, disabled by default</td>
<td>An optional <code>true/false</code> setting that controls whether <a href="https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html#expectContinueEnabled(java.lang.Boolean)">expect continue</a> is enabled</td>
</tr>
<tr>
<td>http-client.apache.max-connections</td>
<td>null</td>
<td>An optional <a href="https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html#maxConnections(java.lang.Integer)">max connections</a> in integer</td>
</tr>
<tr>
<td>http-client.apache.tcp-keep-alive-enabled</td>
<td>null, disabled by default</td>
<td>An optional <code>true/false</code> setting that controls whether <a href="https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html#tcpKeepAlive(java.lang.Boolean)">tcp keep alive</a> is enabled</td>
</tr>
<tr>
<td>http-client.apache.use-idle-connection-reaper-enabled</td>
<td>null, enabled by default</td>
<td>An optional <code>true/false</code> setting that controls whether <a href="https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html#useIdleConnectionReaper(java.lang.Boolean)">use idle connection reaper</a> is used</td>
</tr>
</tbody>
</table>
<p>Users can use catalog properties to override the defaults. For example, to configure the max connections for Apache HTTP Client when starting a spark shell, one can add:
<div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>--conf<span class="w"> </span>spark.sql.catalog.my_catalog.http-client.apache.max-connections<span class="o">=</span><span class="m">5</span>
</code></pre></div></p>
<h2 id="run-iceberg-on-aws">Run Iceberg on AWS<a class="headerlink" href="#run-iceberg-on-aws" title="Permanent link">🔗</a></h2>
<h3 id="amazon-athena">Amazon Athena<a class="headerlink" href="#amazon-athena" title="Permanent link">🔗</a></h3>
<p><a href="https://aws.amazon.com/athena/">Amazon Athena</a> provides a serverless query engine that could be used to perform read, write, update and optimization tasks against Iceberg tables.
More details could be found <a href="https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html">here</a>.</p>
<h3 id="amazon-emr">Amazon EMR<a class="headerlink" href="#amazon-emr" title="Permanent link">🔗</a></h3>
<p><a href="https://aws.amazon.com/emr/">Amazon EMR</a> can provision clusters with <a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark.html">Spark</a> (EMR 6 for Spark 3, EMR 5 for Spark 2),
<a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive.html">Hive</a>, <a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-flink.html">Flink</a>,
<a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-presto.html">Trino</a> that can run Iceberg.</p>
<p>Starting with EMR version 6.5.0, EMR clusters can be configured to have the necessary Apache Iceberg dependencies installed without requiring bootstrap actions.
Please refer to the <a href="https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-cluster.html">official documentation</a> on how to create a cluster with Iceberg installed.</p>
<p>For versions before 6.5.0, you can use a <a href="https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-bootstrap.html">bootstrap action</a> similar to the following to pre-install all necessary dependencies:
<div class="highlight"><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a><span class="ch">#!/bin/bash</span>
<a id="__codelineno-21-2" name="__codelineno-21-2" href="#__codelineno-21-2"></a>
<a id="__codelineno-21-3" name="__codelineno-21-3" href="#__codelineno-21-3"></a><span class="nv">ICEBERG_VERSION</span><span class="o">=</span><span class="m">1</span>.5.2
<a id="__codelineno-21-4" name="__codelineno-21-4" href="#__codelineno-21-4"></a><span class="nv">MAVEN_URL</span><span class="o">=</span>https://repo1.maven.org/maven2
<a id="__codelineno-21-5" name="__codelineno-21-5" href="#__codelineno-21-5"></a><span class="nv">ICEBERG_MAVEN_URL</span><span class="o">=</span><span class="nv">$MAVEN_URL</span>/org/apache/iceberg
<a id="__codelineno-21-6" name="__codelineno-21-6" href="#__codelineno-21-6"></a><span class="c1"># NOTE: this is just an example shared class path between Spark and Flink,</span>
<a id="__codelineno-21-7" name="__codelineno-21-7" href="#__codelineno-21-7"></a><span class="c1"># please choose a proper class path for production.</span>
<a id="__codelineno-21-8" name="__codelineno-21-8" href="#__codelineno-21-8"></a><span class="nv">LIB_PATH</span><span class="o">=</span>/usr/share/aws/aws-java-sdk/
<a id="__codelineno-21-9" name="__codelineno-21-9" href="#__codelineno-21-9"></a>
<a id="__codelineno-21-10" name="__codelineno-21-10" href="#__codelineno-21-10"></a>
<a id="__codelineno-21-11" name="__codelineno-21-11" href="#__codelineno-21-11"></a><span class="nv">ICEBERG_PACKAGES</span><span class="o">=(</span>
<a id="__codelineno-21-12" name="__codelineno-21-12" href="#__codelineno-21-12"></a><span class="w"> </span><span class="s2">&quot;iceberg-spark-runtime-3.3_2.12&quot;</span>
<a id="__codelineno-21-13" name="__codelineno-21-13" href="#__codelineno-21-13"></a><span class="w"> </span><span class="s2">&quot;iceberg-flink-runtime&quot;</span>
<a id="__codelineno-21-14" name="__codelineno-21-14" href="#__codelineno-21-14"></a><span class="w"> </span><span class="s2">&quot;iceberg-aws-bundle&quot;</span>
<a id="__codelineno-21-15" name="__codelineno-21-15" href="#__codelineno-21-15"></a><span class="o">)</span>
<a id="__codelineno-21-16" name="__codelineno-21-16" href="#__codelineno-21-16"></a>
<a id="__codelineno-21-17" name="__codelineno-21-17" href="#__codelineno-21-17"></a>install_dependencies<span class="w"> </span><span class="o">()</span><span class="w"> </span><span class="o">{</span>
<a id="__codelineno-21-18" name="__codelineno-21-18" href="#__codelineno-21-18"></a><span class="w"> </span><span class="nv">install_path</span><span class="o">=</span><span class="nv">$1</span>
<a id="__codelineno-21-19" name="__codelineno-21-19" href="#__codelineno-21-19"></a><span class="w"> </span><span class="nv">download_url</span><span class="o">=</span><span class="nv">$2</span>
<a id="__codelineno-21-20" name="__codelineno-21-20" href="#__codelineno-21-20"></a><span class="w"> </span><span class="nv">version</span><span class="o">=</span><span class="nv">$3</span>
<a id="__codelineno-21-21" name="__codelineno-21-21" href="#__codelineno-21-21"></a><span class="w"> </span><span class="nb">shift</span>
<a id="__codelineno-21-22" name="__codelineno-21-22" href="#__codelineno-21-22"></a><span class="w"> </span><span class="nv">pkgs</span><span class="o">=(</span><span class="s2">&quot;</span><span class="nv">$@</span><span class="s2">&quot;</span><span class="o">)</span>
<a id="__codelineno-21-23" name="__codelineno-21-23" href="#__codelineno-21-23"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span>pkg<span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">pkgs</span><span class="p">[@]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">;</span><span class="w"> </span><span class="k">do</span>
<a id="__codelineno-21-24" name="__codelineno-21-24" href="#__codelineno-21-24"></a><span class="w"> </span>sudo<span class="w"> </span>wget<span class="w"> </span>-P<span class="w"> </span><span class="nv">$install_path</span><span class="w"> </span><span class="nv">$download_url</span>/<span class="nv">$pkg</span>/<span class="nv">$version</span>/<span class="nv">$pkg</span>-<span class="nv">$version</span>.jar
<a id="__codelineno-21-25" name="__codelineno-21-25" href="#__codelineno-21-25"></a><span class="w"> </span><span class="k">done</span>
<a id="__codelineno-21-26" name="__codelineno-21-26" href="#__codelineno-21-26"></a><span class="o">}</span>
<a id="__codelineno-21-27" name="__codelineno-21-27" href="#__codelineno-21-27"></a>
<a id="__codelineno-21-28" name="__codelineno-21-28" href="#__codelineno-21-28"></a>install_dependencies<span class="w"> </span><span class="nv">$LIB_PATH</span><span class="w"> </span><span class="nv">$ICEBERG_MAVEN_URL</span><span class="w"> </span><span class="nv">$ICEBERG_VERSION</span><span class="w"> </span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">ICEBERG_PACKAGES</span><span class="p">[@]</span><span class="si">}</span><span class="s2">&quot;</span>
</code></pre></div></p>
<h3 id="aws-glue">AWS Glue<a class="headerlink" href="#aws-glue" title="Permanent link">🔗</a></h3>
<p><a href="https://aws.amazon.com/glue/">AWS Glue</a> provides a serverless data integration service
that could be used to perform read, write and update tasks against Iceberg tables.
More details could be found <a href="https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-iceberg.html">here</a>.</p>
<h3 id="aws-eks">AWS EKS<a class="headerlink" href="#aws-eks" title="Permanent link">🔗</a></h3>
<p><a href="https://aws.amazon.com/eks/">AWS Elastic Kubernetes Service (EKS)</a> can be used to start any Spark, Flink, Hive, Presto or Trino clusters to work with Iceberg.
Search the <a href="../../blogs.md">Iceberg blogs</a> page for tutorials around running Iceberg with Docker and Kubernetes.</p>
<h3 id="amazon-kinesis">Amazon Kinesis<a class="headerlink" href="#amazon-kinesis" title="Permanent link">🔗</a></h3>
<p><a href="https://aws.amazon.com/about-aws/whats-new/2019/11/you-can-now-run-fully-managed-apache-flink-applications-with-apache-kafka/">Amazon Kinesis Data Analytics</a> provides a platform
to run fully managed Apache Flink applications. You can include Iceberg in your application Jar and run it in the platform.</p>
</article>
</div>
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
<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 8v12Z"/></svg>
Back to top
</button>
</main>
<footer id="footer" class="footer">
<div class="container-fluid footer-top">
<div class="d-flex justify-content-center pt-3 pb-3" >
<div class="col-lg-2 col-md-2 footer-links">
<h4>Features</h4>
<ul>
<li>
<a href="/docs/latest/evolution/#schema-evolution"
>Schema Evolution</a
>
</li>
<li>
<a href="/docs/latest/partitioning/">Hidden Partitioning</a>
</li>
<li>
<a href="/docs/latest/evolution/#partition-evolution"
>Partition Evolution</a
>
</li>
<li>
<a href="/docs/latest/reliability/">Serializable Isolation</a>
</li>
<li>
<a href="/docs/latest/branching/">Branching and Tagging</a>
</li>
<li>
<a href="/docs/latest/reliability/#concurrent-write-operations"
>Optimistic Concurrency</a
>
</li>
<li>
<a href="/docs/latest/performance/#data-filtering"
>Advanced Filtering</a
>
</li>
<li><a href="/docs/latest/">Compute Engine Integrations</a></li>
<li>
<a href="/concepts/catalog/#decoupling-using-the-rest-catalog"
>REST Catalog</a
>
</li>
<li><a href="/docs/latest/api/">Multiple language APIs</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-2 footer-links">
<h4>Get Started</h4>
<ul>
<li><a href="/spark-quickstart">Spark Quickstart</a></li>
<li><a href="/hive-quickstart">Hive Quickstart</a></li>
<li><a href="/spec/">Open Table Spec</a></li>
<li><a href="/docs/latest">Docs</a></li>
<li><a href="/blogs/">Blogs</a></li>
<li><a href="/talks/">Talks</a></li>
</ul>
<br />
</div>
<div class="col-lg-2 col-md-2 footer-links">
<h4>Community</h4>
<ul>
<li><a href="/community/#slack">Support</a></li>
<li><a href="/community/#mailing-lists">Mailing Lists</a></li>
<li>
<a href="/community/#iceberg-community-events">Iceberg Events</a>
</li>
<li><a href="/community/#issues">Issues</a></li>
<li><a href="/community/#contribute">Contribute</a></li>
<li><a href="/community/#community-guidelines">Guidelines</a></li>
<!-- li><a href="/logos-and-assets.html">Solr Logos and Assets</a></li -->
</ul>
</div>
<div class="col-lg-2 col-md-2 footer-links">
<h4>ASF</h4>
<ul>
<li>
<a href="https://www.apache.org/">Apache Software Foundation</a>
</li>
<li>
<a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
<li>
<a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a
>
</li>
<li><a href="https://www.apache.org/security/">Security</a></li>
<li><a href="https://www.apache.org/licenses/">License</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-2 mt-3 footer-icons">
<a href="https://iceberg.apache.org"><img
src="/assets/images/asf-estd-1999-logo.png"
alt="apache software foundation logo"
/></a>
<div class="d-flex justify-content-center">
<div class="social-links d-flex ">
<div class="md-social">
<a href="https://iceberg.apache.org/community/" target="_blank" rel="noopener" title="iceberg.apache.org" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.5.2 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 2024 Fonticons, Inc.--><path d="M88.2 309.1c9.8-18.3 6.8-40.8-7.5-55.8C59.4 230.9 48 204 48 176c0-63.5 63.8-128 160-128s160 64.5 160 128-63.8 128-160 128c-13.1 0-25.8-1.3-37.8-3.6-10.4-2-21.2-.6-30.7 4.2-4.1 2.1-8.3 4.1-12.6 6-16 7.2-32.9 13.5-49.9 18 2.8-4.6 5.4-9.1 7.9-13.6 1.1-1.9 2.2-3.9 3.2-5.9zM0 176c0 41.8 17.2 80.1 45.9 110.3-.9 1.7-1.9 3.5-2.8 5.1-10.3 18.4-22.3 36.5-36.6 52.1-6.6 7-8.3 17.2-4.6 25.9C5.8 378.3 14.4 384 24 384c43 0 86.5-13.3 122.7-29.7 4.8-2.2 9.6-4.5 14.2-6.8 15.1 3 30.9 4.5 47.1 4.5 114.9 0 208-78.8 208-176S322.9 0 208 0 0 78.8 0 176zm432 304c16.2 0 31.9-1.6 47.1-4.5 4.6 2.3 9.4 4.6 14.2 6.8C529.5 498.7 573 512 616 512c9.6 0 18.2-5.7 22-14.5 3.8-8.8 2-19-4.6-25.9-14.2-15.6-26.2-33.7-36.6-52.1-.9-1.7-1.9-3.4-2.8-5.1 28.8-30.3 46-68.6 46-110.4 0-94.4-87.9-171.5-198.2-175.8 4.1 15.2 6.2 31.2 6.2 47.8v.6c87.2 6.7 144 67.5 144 127.4 0 28-11.4 54.9-32.7 77.2-14.3 15-17.3 37.6-7.5 55.8 1.1 2 2.2 4 3.2 5.9 2.5 4.5 5.2 9 7.9 13.6-17-4.5-33.9-10.7-49.9-18-4.3-1.9-8.5-3.9-12.6-6-9.5-4.8-20.3-6.2-30.7-4.2-12.1 2.4-24.7 3.6-37.8 3.6-61.7 0-110-26.5-136.8-62.3-16 5.4-32.8 9.4-50 11.8C279 439.8 350 480 432 480z"/></svg>
</a>
<a href="https://github.com/apache/iceberg" target="_blank" rel="noopener" title="github.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.2 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 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://www.youtube.com/@ApacheIceberg" target="_blank" rel="noopener" title="www.youtube.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.5.2 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 2024 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"/></svg>
</a>
<a href="https://join.slack.com/t/apache-iceberg/shared_invite/zt-287g3akar-K9Oe_En5j1UL7Y_Ikpai3A" target="_blank" rel="noopener" title="join.slack.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 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 2024 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z"/></svg>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid ">
<div class="d-flex justify-content-center ">
<div class="col-md-8">
<p class="copyright-text m-4">
Apache Iceberg, Iceberg, Apache, the Apache feather logo, and the
Apache Iceberg project logo are either registered trademarks or
trademarks of The Apache Software Foundation. Copyright © 2024 The
Apache Software Foundation, Licensed under the
<span
><a href="https://www.apache.org/licenses/">Apache License, Version 2.0</a
>.</span
>
</p>
</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">{"base": "../../../..", "features": ["navigation.tabs", "navigation.tabs.sticky", "navigation.path", "navigation.top", "navigation.tracking", "toc.follow", "offline", "search.suggest", "search.highlight", "content.tabs.link", "content.code.copy", "content.code.annotate"], "search": "../../../../assets/javascripts/workers/search.b8dbb3d2.min.js", "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"}}</script>
<script src="../../../../assets/javascripts/bundle.ebd0bdb7.min.js"></script>
<script src="../../../../assets/javascript/extra.js"></script>
<script src="../../../../assets/external/unpkg.com/mermaid@10/dist/mermaid.min.js"></script>
</body>
</html>