blob: facd6f37bff233e2676af9817453a7910e8938a1 [file] [log] [blame]
Ian Maxon858061a2022-05-12 19:11:28 -07001<!DOCTYPE html>
2<!--
3 | Generated by Apache Maven Doxia Site Renderer 1.8.1 from src/site/markdown/sqlpp/parquet.md at 2022-05-12
4 | Rendered using Apache Maven Fluido Skin 1.7
5-->
6<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7 <head>
8 <meta charset="UTF-8" />
9 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
10 <meta name="Date-Revision-yyyymmdd" content="20220512" />
11 <meta http-equiv="Content-Language" content="en" />
12 <title>AsterixDB &#x2013; Querying Parquet Files</title>
13 <link rel="stylesheet" href="../css/apache-maven-fluido-1.7.min.css" />
14 <link rel="stylesheet" href="../css/site.css" />
15 <link rel="stylesheet" href="../css/print.css" media="print" />
16 <script type="text/javascript" src="../js/apache-maven-fluido-1.7.min.js"></script>
17
18 </head>
19 <body class="topBarDisabled">
20 <div class="container-fluid">
21 <div id="banner">
22 <div class="pull-left"><a href=".././" id="bannerLeft"><img src="../images/asterixlogo.png" alt="AsterixDB"/></a></div>
23 <div class="pull-right"></div>
24 <div class="clear"><hr/></div>
25 </div>
26
27 <div id="breadcrumbs">
28 <ul class="breadcrumb">
29 <li id="publishDate">Last Published: 2022-05-12</li>
30 <li id="projectVersion" class="pull-right">Version: 0.9.8</li>
31 <li class="pull-right"><a href="../index.html" title="Documentation Home">Documentation Home</a></li>
32 </ul>
33 </div>
34 <div class="row-fluid">
35 <div id="leftColumn" class="span2">
36 <div class="well sidebar-nav">
37 <ul class="nav nav-list">
38 <li class="nav-header">Get Started - Installation</li>
39 <li><a href="../ncservice.html" title="Option 1: using NCService"><span class="none"></span>Option 1: using NCService</a></li>
40 <li><a href="../ansible.html" title="Option 2: using Ansible"><span class="none"></span>Option 2: using Ansible</a></li>
41 <li><a href="../aws.html" title="Option 3: using Amazon Web Services"><span class="none"></span>Option 3: using Amazon Web Services</a></li>
42 <li class="nav-header">AsterixDB Primer</li>
43 <li><a href="../sqlpp/primer-sqlpp.html" title="Using SQL++"><span class="none"></span>Using SQL++</a></li>
44 <li class="nav-header">Data Model</li>
45 <li><a href="../datamodel.html" title="The Asterix Data Model"><span class="none"></span>The Asterix Data Model</a></li>
46 <li class="nav-header">Queries</li>
47 <li><a href="../sqlpp/manual.html" title="The SQL++ Query Language"><span class="none"></span>The SQL++ Query Language</a></li>
48 <li><a href="../SQLPP.html" title="Raw SQL++ Grammar"><span class="none"></span>Raw SQL++ Grammar</a></li>
49 <li><a href="../sqlpp/builtins.html" title="Builtin Functions"><span class="none"></span>Builtin Functions</a></li>
50 <li class="nav-header">API/SDK</li>
51 <li><a href="../api.html" title="HTTP API"><span class="none"></span>HTTP API</a></li>
52 <li><a href="../csv.html" title="CSV Output"><span class="none"></span>CSV Output</a></li>
53 <li class="nav-header">Advanced Features</li>
54 <li><a href="../aql/externaldata.html" title="Accessing External Data"><span class="none"></span>Accessing External Data</a></li>
55 <li><a href="../feeds.html" title="Data Ingestion with Feeds"><span class="none"></span>Data Ingestion with Feeds</a></li>
56 <li><a href="../udf.html" title="User Defined Functions"><span class="none"></span>User Defined Functions</a></li>
57 <li><a href="../sqlpp/filters.html" title="Filter-Based LSM Index Acceleration"><span class="none"></span>Filter-Based LSM Index Acceleration</a></li>
58 <li><a href="../sqlpp/fulltext.html" title="Support of Full-text Queries"><span class="none"></span>Support of Full-text Queries</a></li>
59 <li><a href="../sqlpp/similarity.html" title="Support of Similarity Queries"><span class="none"></span>Support of Similarity Queries</a></li>
60 <li><a href="../geo/quickstart.html" title="GIS Support Overview"><span class="none"></span>GIS Support Overview</a></li>
61 <li><a href="../geo/functions.html" title="GIS Functions"><span class="none"></span>GIS Functions</a></li>
62 <li><a href="../interval_join.html" title="Support of Interval Joins"><span class="none"></span>Support of Interval Joins</a></li>
63 <li><a href="../spatial_join.html" title="Support of Spatial Joins"><span class="none"></span>Support of Spatial Joins</a></li>
64 <li><a href="../sqlpp/arrayindex.html" title="Support of Array Indexes"><span class="none"></span>Support of Array Indexes</a></li>
65 <li class="nav-header">Deprecated</li>
66 <li><a href="../aql/primer.html" title="AsterixDB Primer: Using AQL"><span class="none"></span>AsterixDB Primer: Using AQL</a></li>
67 <li><a href="../aql/manual.html" title="Queries: The Asterix Query Language (AQL)"><span class="none"></span>Queries: The Asterix Query Language (AQL)</a></li>
68 <li><a href="../aql/builtins.html" title="Queries: Builtin Functions (AQL)"><span class="none"></span>Queries: Builtin Functions (AQL)</a></li>
69</ul>
70 <hr />
71 <div id="poweredBy">
72 <div class="clear"></div>
73 <div class="clear"></div>
74 <div class="clear"></div>
75 <div class="clear"></div>
76<a href=".././" title="AsterixDB" class="builtBy"><img class="builtBy" alt="AsterixDB" src="../images/asterixlogo.png" /></a>
77 </div>
78 </div>
79 </div>
80 <div id="bodyColumn" class="span10" >
81<!--
82 ! Licensed to the Apache Software Foundation (ASF) under one
83 ! or more contributor license agreements. See the NOTICE file
84 ! distributed with this work for additional information
85 ! regarding copyright ownership. The ASF licenses this file
86 ! to you under the Apache License, Version 2.0 (the
87 ! "License"); you may not use this file except in compliance
88 ! with the License. You may obtain a copy of the License at
89 !
90 ! http://www.apache.org/licenses/LICENSE-2.0
91 !
92 ! Unless required by applicable law or agreed to in writing,
93 ! software distributed under the License is distributed on an
94 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
95 ! KIND, either express or implied. See the License for the
96 ! specific language governing permissions and limitations
97 ! under the License.
98 !-->
99<h1>Querying Parquet Files</h1>
100<div class="section">
101<h2><a name="Table_of_Contents"></a><a name="toc" id="toc">Table of Contents</a></h2>
102<ul>
103
104<li><a href="#Overview">Overview</a></li>
105<li><a href="#DDL">DDL</a></li>
106<li><a href="#QueryParquetFiles">Query Parquet Files</a></li>
107<li><a href="#TypeCompatibility">Type Compatibility</a></li>
108<li><a href="#ParquetTypeFlags">Parquet Type Flags</a></li>
109</ul></div>
110<div class="section">
111<h2><a name="Overview_.5BBack_to_TOC.5D"></a><a name="Overview" id="Overview">Overview</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
112<p><a class="externalLink" href="https://parquet.apache.org/">Apache Parquet</a> is a columnar file format for storing semi-structured data (like JSON). Apache AsterixDB supports running queries against Parquet files that are stored in Amazon S3 and Microsoft Azure Blob Storage as <a href="../aql/externaldata.html">External Datasets</a>.</p></div>
113<div class="section">
114<h2><a name="DDL_.5BBack_to_TOC.5D"></a><a name="DDL" id="DDL">DDL</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
115<p>To start, an end-user needs to create a type as follows:</p>
116
117<div>
118<div>
119<pre class="source">-- The type should not contain any declared fields
120CREATE TYPE ParquetType AS {
121}
122</pre></div></div>
123
124<p>Note that the created type does not have any declared fields. The reason is that Parquet files embed the schema within each file. Thus, no type is needed to be declared, and it is up to AsterixDB to read each file&#x2019;s schema. If the created type contains any declared type, AsterixDB will throw an error:</p>
125
126<div>
127<div>
128<pre class="source">Type 'ParquetType' contains declared fields, which is not supported for 'parquet' format
129</pre></div></div>
130
131<p>Next, the user can create an external dataset - using the declared type - as follows:</p>
132<div class="section">
133<h3><a name="Amazon_S3"></a>Amazon S3</h3>
134
135<div>
136<div>
137<pre class="source">CREATE EXTERNAL DATASET ParquetDataset(ParquetType) USING S3
138(
139 -- Replace &lt;ACCESS-KEY&gt; with your access key
140 (&quot;accessKeyId&quot;=&quot;&lt;ACCESS-KEY&gt;&quot;),
141
142 -- Replace &lt;SECRET-ACCESS-KEY&gt; with your access key
143 (&quot;secretAccessKey&quot; = &quot;&lt;SECRET-ACCESS-KEY&gt;&quot;),
144
145 -- S3 bucket
146 (&quot;container&quot;=&quot;parquetBucket&quot;),
147
148 -- Path to the parquet files within the bucket
149 (&quot;definition&quot;=&quot;path/to/parquet/files&quot;),
150
151 -- Specifying the format as parquet
152 (&quot;format&quot; = &quot;parquet&quot;)
153);
154</pre></div></div>
155</div>
156<div class="section">
157<h3><a name="Microsoft_Azure_Blob_Storage"></a>Microsoft Azure Blob Storage</h3>
158
159<div>
160<div>
161<pre class="source">CREATE EXTERNAL DATASET ParquetDataset(ParquetType) USING AZUREBLOB
162(
163 -- Replace &lt;ACCOUNT-NAME&gt; with your account name
164 (&quot;accountName&quot;=&quot;&lt;ACCOUNT-NAME&gt;&quot;),
165
166 -- Replace &lt;ACCOUNT-KEY&gt; with your account key
167 (&quot;accountKey&quot;=&quot;&lt;ACCOUNT-KEY&gt;&quot;),
168
169 -- Azure Blob container
170 (&quot;container&quot;=&quot;parquetContainer&quot;),
171
172 -- Path to the parquet files within the bucket
173 (&quot;definition&quot;=&quot;path/to/parquet/files&quot;),
174
175 -- Specifying the format as parquet
176 (&quot;format&quot; = &quot;parquet&quot;)
177);
178</pre></div></div>
179
180<p><i><b>Additional setting/properties could be set as detailed later in <a href="#ParquetTypeFlags">Parquet Type Flags</a></b></i></p></div></div>
181<div class="section">
182<h2><a name="Query_Parquet_Files_.5BBack_to_TOC.5D"></a><a name="QueryParquetFiles" id="QueryParquetFiles">Query Parquet Files</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
183<p>To query the data stored in Parquet files, one can simply write a query against the created External Dataset. For example:</p>
184
185<div>
186<div>
187<pre class="source">SELECT COUNT(*)
188FROM ParquetDataset;
189</pre></div></div>
190
191<p>Another example:</p>
192
193<div>
194<div>
195<pre class="source">SELECT pd.age, COUNT(*) cnt
196FROM ParquetDataset pd
197GROUP BY pd.age;
198</pre></div></div>
199</div>
200<div class="section">
201<h2><a name="Type_Compatibility_.5BBack_to_TOC.5D"></a><a name="TypeCompatibility" id="TypeCompatibility">Type Compatibility</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
202<p>AsterixDB supports Parquet&#x2019;s generic types such <tt>STRING</tt>, <tt>INT</tt> and <tt>DOUBLE</tt>. However, Parquet files could contain <a class="externalLink" href="https://github.com/apache/parquet-format/blob/master/LogicalTypes.md">additional types</a> such as <tt>DATE</tt> and <tt>DATETIME</tt> like types. The following table show the type mapping between Apache Parquet and AsterixDB:</p>
203
204<table border="0" class="table table-striped">
205 <thead>
206
207<tr class="a">
208
209<th>Parquet</th>
210
211<th>AsterixDB</th>
212
213<th>Value Examples</th>
214
215<th>Comment</th>
216 </tr>
217 </thead>
218 <tbody>
219
220<tr class="b">
221
222<td><tt>BOOLEAN</tt></td>
223
224<td><tt>BOOLEAN</tt></td>
225
226<td><tt>true</tt> / <tt>false</tt></td>
227
228<td>-</td>
229 </tr>
230
231<tr class="a">
232
233<td><tt>INT_8</tt></td>
234
235<td rowspan="8"><tt>BIGINT</tt></td>
236
237<td rowspan="8">
238 AsterixDB <tt>BIGINT</tt> Range:
239
240<ul>
241
242<li><b>Min</b>:-9,223,372,036,854,775,808</li>
243
244<li><b>Max</b>: 9,223,372,036,854,775,807</li>
245 </ul>
246 </td>
247
248<td rowspan="7">-</td>
249 </tr>
250
251<tr class="b">
252
253<td><tt>INT_16</tt></td>
254 </tr>
255
256<tr class="a">
257
258<td><tt>INT_32</tt></td>
259 </tr>
260
261<tr class="b">
262
263<td><tt>INT_64</tt></td>
264 </tr>
265
266<tr class="a">
267
268<td><tt>UNIT_8</tt></td>
269 </tr>
270
271<tr class="b">
272
273<td><tt>UINT_16</tt></td>
274 </tr>
275
276<tr class="a">
277
278<td><tt>UINT_32</tt></td>
279 </tr>
280
281<tr class="b">
282
283<td><tt>UINT_64</tt></td>
284
285<td>There is a possibility that a value overflows. A warning will be issued in case of an overflow and
286 <tt>MISSING</tt> would be returned.
287 </td>
288 </tr>
289
290<tr class="a">
291
292<td><tt>FLOAT</tt></td>
293
294<td rowspan="4"><tt>DOUBLE</tt></td>
295
296<td rowspan="4">
297 AsterixDB <tt>DOUBLE</tt> Range:
298
299<ul>
300
301<li><b>Min Positive Value</b>: 2^-1074</li>
302
303<li><b>Max Positive Value</b>: 2^1023</li>
304 </ul>
305 </td>
306
307<td rowspan="2">-</td>
308 </tr>
309
310<tr class="b">
311
312<td><tt>DOUBLE</tt></td>
313 </tr>
314
315<tr class="a">
316
317<td><tt>FIXED_LEN_BYTE_ARRAY (DECIMAL)</tt></td>
318
319<td rowspan="2">
320 Parquet <tt>DECIMAL</tt> values are converted to doubles, with the possibility of precision loss.
321 The flag <tt>decimal-to-double</tt> must be set upon creating the dataset.
322
323<ul>
324<li><i>See <a href="#ParquetTypeFlags">Parquet Type Flags</a></i></li></ul>
325 </td>
326 </tr>
327
328<tr class="b">
329
330<td><tt>BINARY (DECIMAL)</tt></td>
331 </tr>
332
333<tr class="a">
334
335<td><tt>BINARY (ENUM)</tt></td>
336
337<td><tt>&quot;Fruit&quot;</tt></td>
338
339<td>Parquet Enum values are parsed as Strings</td>
340 </tr>
341
342<tr class="b">
343
344<td><tt>BINARY (UTF8)</tt></td>
345
346<td><tt>STRING</tt></td>
347
348<td><tt>&quot;Hello World&quot;</tt></td>
349
350<td>-</td>
351 </tr>
352
353<tr class="a">
354
355<td><tt>FIXED_LEN_BYTE_ARRAY (UUID)</tt></td>
356
357<td><tt>UUID</tt></td>
358
359<td><tt>uuid(&quot;123e4567-e89b-12d3-a456-426614174000&quot;)</tt></td>
360
361<td>-</td>
362 </tr>
363
364<tr class="b">
365
366<td><tt>INT_32 (DATE)</tt></td>
367
368<td><tt>DATE</tt></td>
369
370<td><tt>date(&quot;2021-11-01&quot;)</tt></td>
371
372<td>-</td>
373 </tr>
374
375<tr class="a">
376
377<td><tt>INT_32 (TIME)</tt></td>
378
379<td><tt>TIME</tt></td>
380
381<td rowspan="2"><tt>time(&quot;00:00:00.000&quot;)</tt></td>
382
383<td>Time in milliseconds.</td>
384 </tr>
385
386<tr class="b">
387
388<td><tt>INT_64 (TIME)</tt></td>
389
390<td><tt>TIME</tt></td>
391
392<td>Time in micro/nano seconds.</td>
393 </tr>
394
395<tr class="a">
396
397<td><tt>INT_64 (TIMESTAMP)</tt></td>
398
399<td rowspan="2"><tt>DATETIME</tt></td>
400
401<td rowspan="2"><tt>datetime(&quot;2021-11-01T21:37:13.738&quot;)&quot;</tt></td>
402
403<td>Timestamp in milli/micro/nano seconds. Parquet also can store the timestamp values with the option
404 <tt>isAdjustedToUTC = true</tt>. To get the local timestamp value, the user can set the time zone ID
405 by setting the value using the option <tt>timezone</tt> to get the local <tt>DATETIME</tt> value.
406
407<ul>
408<li><i>See <a href="#ParquetTypeFlags">Parquet Type Flags</a></i></li></ul>
409 </td>
410 </tr>
411
412<tr class="b">
413
414<td><tt>INT96</tt></td>
415
416<td>A timestamp values that separate days and time to form a timestamp. INT96 is always in localtime.</td>
417 </tr>
418
419<tr class="a">
420
421<td><tt>BINARY (JSON)</tt></td>
422
423<td>any type</td>
424
425<td>
426
427<ul>
428
429<li><tt>{&quot;name&quot;: &quot;John&quot;}</tt></li>
430
431<li><tt>[1, 2, 3]</tt></li>
432 </ul>
433 </td>
434
435<td>
436 Parse JSON string into internal AsterixDB value.
437 The flag <tt>parse-json-string</tt> is set by default. To get the string value (i.e., not parsed as
438 AsterixDB value), unset the flag <tt>parse-json-string</tt>.
439
440<ul>
441<li><i>See <a href="#ParquetTypeFlags">Parquet Type Flags</a></i></li></ul>
442 </td>
443 </tr>
444
445<tr class="b">
446
447<td><tt>BINARY</tt></td>
448
449<td rowspan="2"><tt>BINARY</tt></td>
450
451<td><tt>hex(&quot;0101FF&quot;)</tt></td>
452
453<td>-</td>
454 </tr>
455
456<tr class="a">
457
458<td><tt>BSON</tt></td>
459
460<td>N/A</td>
461
462<td>BSON values will be returned as <tt>BINARY</tt></td>
463 </tr>
464
465<tr class="b">
466
467<td><tt>LIST</tt></td>
468
469<td><tt>ARRAY</tt></td>
470
471<td><tt>[1, 2, 3]</tt></td>
472
473<td>Parquet's <tt>LIST</tt> type is converted into <tt>ARRAY</tt></td>
474 </tr>
475
476<tr class="a">
477
478<td><tt>MAP</tt></td>
479
480<td><tt>ARRAY</tt> of <tt>OBJECT</tt></td>
481
482<td><tt>[{&quot;key&quot;:1, &quot;value&quot;:1}, {&quot;key&quot;:2, &quot;value&quot;:2}]</tt></td>
483
484<td>Parquet's <tt>MAP</tt> types are converted into an <tt>ARRAY</tt> of <tt>OBJECT</tt>. Each
485 <tt>OBJECT</tt> value consists of two fields: <tt>key</tt> and <tt>value</tt>
486 </td>
487 </tr>
488
489<tr class="b">
490
491<td><tt>FIXED_LEN_BYTE_ARRAY (INTERVAL)</tt></td>
492
493<td>-</td>
494
495<td>N/A</td>
496
497<td><tt>INTERVAL</tt> is not supported. A warning will be issued and <tt>MISSING</tt> value
498 will be returned.
499 </td>
500 </tr>
501 </tbody>
502</table>
503</div>
504<div class="section">
505<h2><a name="Parquet_Type_Flags_.5BBack_to_TOC.5D"></a><a name="ParquetTypeFlags" id="ParquetTypeFlags">Parquet Type Flags</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
506<p>The table in <a href="#TypeCompatibility">Type Compatibility</a> shows the type mapping between Parquet and AsterixDB. Some of the Parquet types are not parsed by default as those type are not natively supported in AsterixDB. However, the user can set a flag to convert some of those types into a supported AsterixDB type.</p>
507<div class="section">
508<div class="section">
509<div class="section">
510<h5><a name="DECIMAL_TYPE"></a>DECIMAL TYPE</h5>
511<p>The user can enable parsing <tt>DECIMAL</tt> Parquet values by enabling a certain flag as in the following example:</p>
512
513<div>
514<div>
515<pre class="source">CREATE EXTERNAL DATASET ParquetDataset(ParquetType) USING S3
516(
517 -- Credintials and path to Parquet files
518 ...
519
520 -- Enable converting decimal values to double
521 (&quot;decimal-to-double&quot; = &quot;true&quot;)
522);
523</pre></div></div>
524
525<p>This flag will enable parsing/converting <tt>DECIMAL</tt> values/types into <tt>DOUBLE</tt>. For example, if the flag <tt>decimal-to-double</tt> is not set and a Parquet file contains a <tt>DECIMAL</tt> value, the following error will be thrown when running a query that request a <tt>DECIMAL</tt> value:</p>
526
527<div>
528<div>
529<pre class="source">Parquet type &quot;optional fixed_len_byte_array(16) decimalType (DECIMAL(38,18))&quot; is not supported by default. To enable type conversion, recreate the external dataset with the option &quot;decimal-to-double&quot; enabled
530</pre></div></div>
531
532<p>and the returned value will be <tt>MISSING</tt>. If the flag <tt>decimal-to-double</tt> is set, the converted <tt>DOUBLE</tt> value will be returned.</p></div>
533<div class="section">
534<h5><a name="TEMPORAL_TYPES"></a>TEMPORAL TYPES</h5>
535<p>For the temporal types (namely <tt>DATETIME</tt>), their values could be stored in Parquet with the option <tt>isAdjustedToUTC = true</tt>. Hence, the user has to provide the timezone ID to adjust their values to the local value by setting the flag <tt>timezone</tt>. To do so, a user can set the timezone ID to &#x201c;<b>PST</b>&#x201d; upon creating a dataset as in the following example:</p>
536
537<div>
538<div>
539<pre class="source">CREATE EXTERNAL DATASET ParquetDataset(ParquetType) USING S3
540(
541 -- Credintials and path to Parquet files
542 ...
543
544 -- Converting UTC time to PST time
545 (&quot;timezone&quot; = &quot;PST&quot;)
546);
547</pre></div></div>
548
549<p>If the flag <tt>timezone</tt> is not set, a warning will appear when running a query:</p>
550
551<div>
552<div>
553<pre class="source">Parquet file(s) contain &quot;datetime&quot; values that are adjusted to UTC. Recreate the external dataset and set &quot;timezone&quot; to get the local &quot;datetime&quot; value.
554</pre></div></div>
555
556<p>and the UTC <tt>DATETIME</tt> will be returned.</p></div>
557<div class="section">
558<h5><a name="JSON_TYPE"></a>JSON TYPE</h5>
559<p>By default, we parse the JSON values into AsterixDB values, where a user can process those values using <tt>SQL++</tt> queries. However, one could disable the parsing of JSON string values (which stored as <tt>STRING</tt>) by unsetting the flag <tt>parseJsonString</tt> as in the following example:</p>
560
561<div>
562<div>
563<pre class="source">CREATE EXTERNAL DATASET ParquetDataset(ParquetType) USING S3
564(
565 -- Credintials and path to Parquet files
566 ...
567
568 -- Stop parsing JSON string values
569 (&quot;parse-json-string&quot; = &quot;false&quot;)
570);
571</pre></div></div>
572
573<p>And the returned value will be of type <tt>STRING</tt>.</p></div>
574<div class="section">
575<h5><a name="INTERVAL_TYPE"></a>INTERVAL TYPE</h5>
576<p>Currently, AsterixDB do not support Parquet&#x2019;s <tt>INTERVAL</tt> type. When a query requests (or projects) an <tt>INTERVAL</tt> value, a warning will be issued and <tt>MISSING</tt> value will be returned instead.</p></div></div></div></div>
577 </div>
578 </div>
579 </div>
580 <hr/>
581 <footer>
582 <div class="container-fluid">
583 <div class="row-fluid">
584<div class="row-fluid">Apache AsterixDB, AsterixDB, Apache, the Apache
585 feather logo, and the Apache AsterixDB project logo are either
586 registered trademarks or trademarks of The Apache Software
587 Foundation in the United States and other countries.
588 All other marks mentioned may be trademarks or registered
589 trademarks of their respective owners.
590 </div>
591 </div>
592 </div>
593 </footer>
594 </body>
595</html>