blob: 0bb5810e2c171bf7e402db3fbd2f2e4d55bd4411 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TestSchemaSmoothing (Drill : 1.20.0 API)</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="TestSchemaSmoothing (Drill : 1.20.0 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/TestSchemaSmoothing.html">Use</a></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">
<li><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestScanLevelProjection.html" title="class in org.apache.drill.exec.physical.impl.scan.project"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/VectorSource.html" title="interface in org.apache.drill.exec.physical.impl.scan.project"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../../index.html?org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html" target="_top">Frames</a></li>
<li><a href="TestSchemaSmoothing.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></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>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.classes.inherited.from.class.org.apache.drill.test.DrillTest">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#fields.inherited.from.class.org.apache.drill.test.SubOperatorTest">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&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><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.drill.exec.physical.impl.scan.project</div>
<h2 title="Class TestSchemaSmoothing" class="title">Class TestSchemaSmoothing</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li><a href="../../../../../../../../org/apache/drill/test/BaseTest.html" title="class in org.apache.drill.test">org.apache.drill.test.BaseTest</a></li>
<li>
<ul class="inheritance">
<li><a href="../../../../../../../../org/apache/drill/test/DrillTest.html" title="class in org.apache.drill.test">org.apache.drill.test.DrillTest</a></li>
<li>
<ul class="inheritance">
<li><a href="../../../../../../../../org/apache/drill/test/SubOperatorTest.html" title="class in org.apache.drill.test">org.apache.drill.test.SubOperatorTest</a></li>
<li>
<ul class="inheritance">
<li>org.apache.drill.exec.physical.impl.scan.project.TestSchemaSmoothing</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">TestSchemaSmoothing</span>
extends <a href="../../../../../../../../org/apache/drill/test/SubOperatorTest.html" title="class in org.apache.drill.test">SubOperatorTest</a></pre>
<div class="block">Tests schema smoothing at the schema projection level.
This level handles reusing prior types when filling null
values. But, because no actual vectors are involved, it
does not handle the schema chosen for a table ahead of
time, only the schema as it is merged with prior schema to
detect missing columns.
<p>
Focuses on the <tt>SmoothingProjection</tt> class itself.
<p>
Note that, at present, schema smoothing does not work for entire
maps. That is, if file 1 has, say <tt>{a: {b: 10, c: "foo"}}</tt>
and file 2 has, say, <tt>{a: null}</tt>, then schema smoothing does
not currently know how to recreate the map. The same is true of
lists and unions. Handling such cases is complex and is probably
better handled via a system that allows the user to specify their
intent by providing a schema to apply to the two files.
<p>
Note that schema smoothing itself is an experimental work-around
to a fundamental limitation in Drill:
<ul>
<li>Drill cannot predict the future: each file (or batch)
may have a different schema.</li>
<li>Drill does not know about these differences until they
occur.</li>
<li>The scan operator is obligated to return the same schema
(and same vectors) from one file to the next, else a "hard"
schema change is sent down stream.</li>
</ul>
The problem is actually intractable. The schema smoother handles the
cases that can be handled, such as required --> nullable, a column
disappearing, etc. This whole mechanism should be scrapped if/when
Drill can work with schemas. Or, keep this to handle, as best we can,
odd schemas, but insist on a schema to resolve issues that this
mechanism cannot handle (and that, indeed, no algorithm could handle
because such an algorithm would require time-travel: looking into
the future to know what data will be scanned.)</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<ul class="blockList">
<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.drill.test.DrillTest">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.drill.test.<a href="../../../../../../../../org/apache/drill/test/DrillTest.html" title="class in org.apache.drill.test">DrillTest</a></h3>
<code><a href="../../../../../../../../org/apache/drill/test/DrillTest.MemWatcher.html" title="class in org.apache.drill.test">DrillTest.MemWatcher</a></code></li>
</ul>
</li>
</ul>
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.drill.test.SubOperatorTest">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;org.apache.drill.test.<a href="../../../../../../../../org/apache/drill/test/SubOperatorTest.html" title="class in org.apache.drill.test">SubOperatorTest</a></h3>
<code><a href="../../../../../../../../org/apache/drill/test/SubOperatorTest.html#dirTestWatcher">dirTestWatcher</a>, <a href="../../../../../../../../org/apache/drill/test/SubOperatorTest.html#fixture">fixture</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.drill.test.DrillTest">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;org.apache.drill.test.<a href="../../../../../../../../org/apache/drill/test/DrillTest.html" title="class in org.apache.drill.test">DrillTest</a></h3>
<code><a href="../../../../../../../../org/apache/drill/test/DrillTest.html#logOutcome">logOutcome</a>, <a href="../../../../../../../../org/apache/drill/test/DrillTest.html#objectMapper">objectMapper</a>, <a href="../../../../../../../../org/apache/drill/test/DrillTest.html#REPEAT_RULE">REPEAT_RULE</a>, <a href="../../../../../../../../org/apache/drill/test/DrillTest.html#thrownException">thrownException</a>, <a href="../../../../../../../../org/apache/drill/test/DrillTest.html#TIMEOUT">TIMEOUT</a></code></li>
</ul>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#TestSchemaSmoothing--">TestSchemaSmoothing</a></span>()</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<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="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testDifferentCase--">testDifferentCase</a></span>()</code>
<div class="block">The prior and table schemas are identical, but the cases of names differ.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testDifferentTypes--">testDifferentTypes</a></span>()</code>
<div class="block">Column names match, but types differ.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testDiscrete--">testDiscrete</a></span>()</code>
<div class="block">Sanity test for the simple, discrete case.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testDisjoint--">testDisjoint</a></span>()</code>
<div class="block">Case in which the table schema and prior are disjoint
sets.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testLongerPartitionLength--">testLongerPartitionLength</a></span>()</code>
<div class="block">If using the legacy wildcard expansion, we are able to use the same
schema even if the new partition path is longer than the previous.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testMissingNullableColumns--">testMissingNullableColumns</a></span>()</code>
<div class="block">Preserve the prior schema if table is a subset and missing columns
are nullable or repeated.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testReordering--">testReordering</a></span>()</code>
<div class="block">Preserve the prior schema if table is a subset.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testRequired--">testRequired</a></span>()</code>
<div class="block">Can't preserve the prior schema if it had required columns
where the new schema has no columns.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testSamePartitionLength--">testSamePartitionLength</a></span>()</code>
<div class="block">If using the legacy wildcard expansion, reuse schema if partition paths
are the same length.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testSameSchemas--">testSameSchemas</a></span>()</code>
<div class="block">The prior and table schemas are identical.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testShorterPartitionLength--">testShorterPartitionLength</a></span>()</code>
<div class="block">If using the legacy wildcard expansion, reuse schema if the new partition path
is shorter than the previous.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testSmaller--">testSmaller</a></span>()</code>
<div class="block">Case in which the table schema is a superset of the prior
schema.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testSmoothableSchemaBatches--">testSmoothableSchemaBatches</a></span>()</code>
<div class="block">Integrated test across multiple schemas at the batch level.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testSmoothingProjection--">testSmoothingProjection</a></span>()</code>
<div class="block">Low-level test of the smoothing projection, including the exceptions
it throws when things are not going its way.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html#testWildcardSmoothing--">testWildcardSmoothing</a></span>()</code>
<div class="block">A SELECT * query uses the schema of the table as the output schema.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.drill.test.SubOperatorTest">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;org.apache.drill.test.<a href="../../../../../../../../org/apache/drill/test/SubOperatorTest.html" title="class in org.apache.drill.test">SubOperatorTest</a></h3>
<code><a href="../../../../../../../../org/apache/drill/test/SubOperatorTest.html#classSetup--">classSetup</a>, <a href="../../../../../../../../org/apache/drill/test/SubOperatorTest.html#classTeardown--">classTeardown</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.drill.test.DrillTest">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;org.apache.drill.test.<a href="../../../../../../../../org/apache/drill/test/DrillTest.html" title="class in org.apache.drill.test">DrillTest</a></h3>
<code><a href="../../../../../../../../org/apache/drill/test/DrillTest.html#escapeJsonString-java.lang.String-">escapeJsonString</a>, <a href="../../../../../../../../org/apache/drill/test/DrillTest.html#finishDrillTest--">finishDrillTest</a>, <a href="../../../../../../../../org/apache/drill/test/DrillTest.html#initDrillTest--">initDrillTest</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="TestSchemaSmoothing--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>TestSchemaSmoothing</h4>
<pre>public&nbsp;TestSchemaSmoothing()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="testDiscrete--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testDiscrete</h4>
<pre>public&nbsp;void&nbsp;testDiscrete()</pre>
<div class="block">Sanity test for the simple, discrete case. The purpose of
discrete is just to run the basic lifecycle in a way that
is compatible with the schema-persistence version.</div>
</li>
</ul>
<a name="testSmoothingProjection--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testSmoothingProjection</h4>
<pre>public&nbsp;void&nbsp;testSmoothingProjection()</pre>
<div class="block">Low-level test of the smoothing projection, including the exceptions
it throws when things are not going its way.</div>
</li>
</ul>
<a name="testSmaller--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testSmaller</h4>
<pre>public&nbsp;void&nbsp;testSmaller()</pre>
<div class="block">Case in which the table schema is a superset of the prior
schema. Discard prior schema. Turn off auto expansion of
metadata for a simpler test.</div>
</li>
</ul>
<a name="testDisjoint--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testDisjoint</h4>
<pre>public&nbsp;void&nbsp;testDisjoint()</pre>
<div class="block">Case in which the table schema and prior are disjoint
sets. Discard the prior schema.</div>
</li>
</ul>
<a name="testDifferentTypes--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testDifferentTypes</h4>
<pre>public&nbsp;void&nbsp;testDifferentTypes()</pre>
<div class="block">Column names match, but types differ. Discard the prior schema.</div>
</li>
</ul>
<a name="testSameSchemas--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testSameSchemas</h4>
<pre>public&nbsp;void&nbsp;testSameSchemas()</pre>
<div class="block">The prior and table schemas are identical. Preserve the prior
schema (though, the output is no different than if we discarded
the prior schema...)</div>
</li>
</ul>
<a name="testDifferentCase--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testDifferentCase</h4>
<pre>public&nbsp;void&nbsp;testDifferentCase()</pre>
<div class="block">The prior and table schemas are identical, but the cases of names differ.
Preserve the case of the first schema.</div>
</li>
</ul>
<a name="testRequired--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testRequired</h4>
<pre>public&nbsp;void&nbsp;testRequired()</pre>
<div class="block">Can't preserve the prior schema if it had required columns
where the new schema has no columns.</div>
</li>
</ul>
<a name="testMissingNullableColumns--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testMissingNullableColumns</h4>
<pre>public&nbsp;void&nbsp;testMissingNullableColumns()</pre>
<div class="block">Preserve the prior schema if table is a subset and missing columns
are nullable or repeated.</div>
</li>
</ul>
<a name="testReordering--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testReordering</h4>
<pre>public&nbsp;void&nbsp;testReordering()</pre>
<div class="block">Preserve the prior schema if table is a subset. Map the table
columns to the output using the prior schema ordering.</div>
</li>
</ul>
<a name="testSamePartitionLength--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testSamePartitionLength</h4>
<pre>public&nbsp;void&nbsp;testSamePartitionLength()</pre>
<div class="block">If using the legacy wildcard expansion, reuse schema if partition paths
are the same length.</div>
</li>
</ul>
<a name="testShorterPartitionLength--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testShorterPartitionLength</h4>
<pre>public&nbsp;void&nbsp;testShorterPartitionLength()</pre>
<div class="block">If using the legacy wildcard expansion, reuse schema if the new partition path
is shorter than the previous. (Unneeded partitions will be set to null by the
scan projector.)</div>
</li>
</ul>
<a name="testLongerPartitionLength--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testLongerPartitionLength</h4>
<pre>public&nbsp;void&nbsp;testLongerPartitionLength()</pre>
<div class="block">If using the legacy wildcard expansion, we are able to use the same
schema even if the new partition path is longer than the previous.
Because all file names are provided up front.</div>
</li>
</ul>
<a name="testSmoothableSchemaBatches--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>testSmoothableSchemaBatches</h4>
<pre>public&nbsp;void&nbsp;testSmoothableSchemaBatches()</pre>
<div class="block">Integrated test across multiple schemas at the batch level.</div>
</li>
</ul>
<a name="testWildcardSmoothing--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>testWildcardSmoothing</h4>
<pre>public&nbsp;void&nbsp;testWildcardSmoothing()</pre>
<div class="block">A SELECT * query uses the schema of the table as the output schema.
This is trivial when the scanner has one table. But, if two or more
tables occur, then things get interesting. The first table sets the
schema. The second table then has:
<ul>
<li>The same schema, trivial case.</li>
<li>A subset of the first table. The type of the "missing" column
from the first table is used for a null column in the second table.</li>
<li>A superset or disjoint set of the first schema. This triggers a hard schema
change.</li>
</ul>
<p>
It is an open question whether previous columns should be preserved on
a hard reset. For now, the code implements, and this test verifies, that a
hard reset clears the "memory" of prior schemas.</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/TestSchemaSmoothing.html">Use</a></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">
<li><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/TestScanLevelProjection.html" title="class in org.apache.drill.exec.physical.impl.scan.project"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../../org/apache/drill/exec/physical/impl/scan/project/VectorSource.html" title="interface in org.apache.drill.exec.physical.impl.scan.project"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../../index.html?org/apache/drill/exec/physical/impl/scan/project/TestSchemaSmoothing.html" target="_top">Frames</a></li>
<li><a href="TestSchemaSmoothing.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../../../allclasses-noframe.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>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.classes.inherited.from.class.org.apache.drill.test.DrillTest">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#fields.inherited.from.class.org.apache.drill.test.SubOperatorTest">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&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><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>