blob: 29547a45f25e9fdba355c548034fd971706974ea [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>ReplacePartitions</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../jquery/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
<script type="text/javascript" src="../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../jquery/jquery-3.6.0.min.js"></script>
<script type="text/javascript" src="../../../jquery/jquery-ui.min.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="ReplacePartitions";
}
}
catch(err) {
}
//-->
var data = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.iceberg</a></div>
<h2 title="Interface ReplacePartitions" class="title">Interface ReplacePartitions</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Superinterfaces:</dt>
<dd><code><a href="PendingUpdate.html" title="interface in org.apache.iceberg">PendingUpdate</a>&lt;<a href="Snapshot.html" title="interface in org.apache.iceberg">Snapshot</a>&gt;</code>, <code><a href="SnapshotUpdate.html" title="interface in org.apache.iceberg">SnapshotUpdate</a>&lt;<a href="ReplacePartitions.html" title="interface in org.apache.iceberg">ReplacePartitions</a>&gt;</code></dd>
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="BaseReplacePartitions.html" title="class in org.apache.iceberg">BaseReplacePartitions</a></code></dd>
</dl>
<hr>
<pre>public interface <span class="typeNameLabel">ReplacePartitions</span>
extends <a href="SnapshotUpdate.html" title="interface in org.apache.iceberg">SnapshotUpdate</a>&lt;<a href="ReplacePartitions.html" title="interface in org.apache.iceberg">ReplacePartitions</a>&gt;</pre>
<div class="block">API for overwriting files in a table by partition.
<p>This is provided to implement SQL compatible with Hive table operations but is not
recommended. Instead, use the <a href="OverwriteFiles.html" title="interface in org.apache.iceberg"><code>overwrite API</code></a> to explicitly overwrite data.
<p>The default validation mode is idempotent, meaning the overwrite is correct and should be
committed out regardless of other concurrent changes to the table. Alternatively, this API can be
configured to validate that no new data or deletes have been applied since a snapshot ID
associated when this operation began. This can be done by calling <a href="#validateNoConflictingDeletes()"><code>validateNoConflictingDeletes()</code></a>, <a href="#validateNoConflictingData()"><code>validateNoConflictingData()</code></a>, to ensure that no
conflicting delete files or data files respectively have been written since the snapshot passed
to <a href="#validateFromSnapshot(long)"><code>validateFromSnapshot(long)</code></a>.
<p>This API accumulates file additions and produces a new <a href="Snapshot.html" title="interface in org.apache.iceberg"><code>Snapshot</code></a> of the table by
replacing all files in partitions with new data with the new additions. This operation is used to
implement dynamic partition replacement.
<p>When committing, these changes will be applied to the latest table snapshot. Commit conflicts
will be resolved by applying the changes to the new latest snapshot and reattempting the commit.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="ReplacePartitions.html" title="interface in org.apache.iceberg">ReplacePartitions</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addFile(org.apache.iceberg.DataFile)">addFile</a></span>&#8203;(<a href="DataFile.html" title="interface in org.apache.iceberg">DataFile</a>&nbsp;file)</code></th>
<td class="colLast">
<div class="block">Add a <a href="DataFile.html" title="interface in org.apache.iceberg"><code>DataFile</code></a> to the table.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="ReplacePartitions.html" title="interface in org.apache.iceberg">ReplacePartitions</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#validateAppendOnly()">validateAppendOnly</a></span>()</code></th>
<td class="colLast">
<div class="block">Validate that no partitions will be replaced and the operation is append-only.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="ReplacePartitions.html" title="interface in org.apache.iceberg">ReplacePartitions</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#validateFromSnapshot(long)">validateFromSnapshot</a></span>&#8203;(long&nbsp;snapshotId)</code></th>
<td class="colLast">
<div class="block">Set the snapshot ID used in validations for this operation.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="ReplacePartitions.html" title="interface in org.apache.iceberg">ReplacePartitions</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#validateNoConflictingData()">validateNoConflictingData</a></span>()</code></th>
<td class="colLast">
<div class="block">Enables validation that data added concurrently does not conflict with this commit's operation.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code><a href="ReplacePartitions.html" title="interface in org.apache.iceberg">ReplacePartitions</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#validateNoConflictingDeletes()">validateNoConflictingDeletes</a></span>()</code></th>
<td class="colLast">
<div class="block">Enables validation that deletes that happened concurrently do not conflict with this commit's
operation.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.apache.iceberg.PendingUpdate">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.iceberg.<a href="PendingUpdate.html" title="interface in org.apache.iceberg">PendingUpdate</a></h3>
<code><a href="PendingUpdate.html#apply()">apply</a>, <a href="PendingUpdate.html#commit()">commit</a>, <a href="PendingUpdate.html#updateEvent()">updateEvent</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.apache.iceberg.SnapshotUpdate">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.iceberg.<a href="SnapshotUpdate.html" title="interface in org.apache.iceberg">SnapshotUpdate</a></h3>
<code><a href="SnapshotUpdate.html#deleteWith(java.util.function.Consumer)">deleteWith</a>, <a href="SnapshotUpdate.html#scanManifestsWith(java.util.concurrent.ExecutorService)">scanManifestsWith</a>, <a href="SnapshotUpdate.html#set(java.lang.String,java.lang.String)">set</a>, <a href="SnapshotUpdate.html#stageOnly()">stageOnly</a>, <a href="SnapshotUpdate.html#toBranch(java.lang.String)">toBranch</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="addFile(org.apache.iceberg.DataFile)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addFile</h4>
<pre class="methodSignature"><a href="ReplacePartitions.html" title="interface in org.apache.iceberg">ReplacePartitions</a>&nbsp;addFile&#8203;(<a href="DataFile.html" title="interface in org.apache.iceberg">DataFile</a>&nbsp;file)</pre>
<div class="block">Add a <a href="DataFile.html" title="interface in org.apache.iceberg"><code>DataFile</code></a> to the table.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>file</code> - a data file</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this for method chaining</dd>
</dl>
</li>
</ul>
<a id="validateAppendOnly()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>validateAppendOnly</h4>
<pre class="methodSignature"><a href="ReplacePartitions.html" title="interface in org.apache.iceberg">ReplacePartitions</a>&nbsp;validateAppendOnly()</pre>
<div class="block">Validate that no partitions will be replaced and the operation is append-only.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this for method chaining</dd>
</dl>
</li>
</ul>
<a id="validateFromSnapshot(long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>validateFromSnapshot</h4>
<pre class="methodSignature"><a href="ReplacePartitions.html" title="interface in org.apache.iceberg">ReplacePartitions</a>&nbsp;validateFromSnapshot&#8203;(long&nbsp;snapshotId)</pre>
<div class="block">Set the snapshot ID used in validations for this operation.
<p>All validations will check changes after this snapshot ID. If this is not called, validation
will occur from the beginning of the table's history.
<p>This method should be called before this operation is committed. If a concurrent operation
committed a data or delta file or removed a data file after the given snapshot ID that might
contain rows matching a partition marked for deletion, validation will detect this and fail.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>snapshotId</code> - a snapshot ID, it should be set to when this operation started to read the
table.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this for method chaining</dd>
</dl>
</li>
</ul>
<a id="validateNoConflictingDeletes()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>validateNoConflictingDeletes</h4>
<pre class="methodSignature"><a href="ReplacePartitions.html" title="interface in org.apache.iceberg">ReplacePartitions</a>&nbsp;validateNoConflictingDeletes()</pre>
<div class="block">Enables validation that deletes that happened concurrently do not conflict with this commit's
operation.
<p>Validating concurrent deletes is required during non-idempotent replace partition
operations. This will check if a concurrent operation deletes data in any of the partitions
being overwritten, as the replace partition must be aborted to avoid undeleting rows that were
removed concurrently.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this for method chaining</dd>
</dl>
</li>
</ul>
<a id="validateNoConflictingData()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>validateNoConflictingData</h4>
<pre class="methodSignature"><a href="ReplacePartitions.html" title="interface in org.apache.iceberg">ReplacePartitions</a>&nbsp;validateNoConflictingData()</pre>
<div class="block">Enables validation that data added concurrently does not conflict with this commit's operation.
<p>Validating concurrent data files is required during non-idempotent replace partition
operations. This will check if a concurrent operation inserts data in any of the partitions
being overwritten, as the replace partition must be aborted to avoid removing rows added
concurrently.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this for method chaining</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>