blob: f9144f0137f69cb9e3588bbf28d407ad8a356e4a [file] [log] [blame]
Ian Maxon444ca1b2017-08-25 11:41:41 -07001<!DOCTYPE html>
2<!--
3 | Generated by Apache Maven Doxia at 2017-07-27
4 | Rendered using Apache Maven Fluido Skin 1.3.0
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="20170727" />
11 <meta http-equiv="Content-Language" content="en" />
12 <title>AsterixDB &#x2013; The Asterix Data Model (ADM)</title>
13 <link rel="stylesheet" href="./css/apache-maven-fluido-1.3.0.min.css" />
14 <link rel="stylesheet" href="./css/site.css" />
15 <link rel="stylesheet" href="./css/print.css" media="print" />
16
17
18 <script type="text/javascript" src="./js/apache-maven-fluido-1.3.0.min.js"></script>
19
20
21
22<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
23 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
24 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
25 })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
26
27 ga('create', 'UA-41536543-1', 'uci.edu');
28 ga('send', 'pageview');</script>
29
30 </head>
31 <body class="topBarDisabled">
32
33
34
35
36 <div class="container-fluid">
37 <div id="banner">
38 <div class="pull-left">
39 <a href="./" id="bannerLeft">
40 <img src="images/asterixlogo.png" alt="AsterixDB"/>
41 </a>
42 </div>
43 <div class="pull-right"> </div>
44 <div class="clear"><hr/></div>
45 </div>
46
47 <div id="breadcrumbs">
48 <ul class="breadcrumb">
49
50
51 <li id="publishDate">Last Published: 2017-07-27</li>
52
53
54
55 <li id="projectVersion" class="pull-right">Version: 0.9.2-SNAPSHOT</li>
56
57 <li class="divider pull-right">|</li>
58
59 <li class="pull-right"> <a href="index.html" title="Documentation Home">
60 Documentation Home</a>
61 </li>
62
63 </ul>
64 </div>
65
66
67 <div class="row-fluid">
68 <div id="leftColumn" class="span3">
69 <div class="well sidebar-nav">
70
71
72 <ul class="nav nav-list">
73 <li class="nav-header">Get Started - Installation</li>
74
75 <li>
76
77 <a href="ncservice.html" title="Option 1: using NCService">
78 <i class="none"></i>
79 Option 1: using NCService</a>
80 </li>
81
82 <li>
83
84 <a href="ansible.html" title="Option 2: using Ansible">
85 <i class="none"></i>
86 Option 2: using Ansible</a>
87 </li>
88
89 <li>
90
91 <a href="aws.html" title="Option 3: using Amazon Web Services">
92 <i class="none"></i>
93 Option 3: using Amazon Web Services</a>
94 </li>
95
96 <li>
97
98 <a href="yarn.html" title="Option 4: using YARN">
99 <i class="none"></i>
100 Option 4: using YARN</a>
101 </li>
102
103 <li>
104
105 <a href="install.html" title="Option 5: using Managix (deprecated)">
106 <i class="none"></i>
107 Option 5: using Managix (deprecated)</a>
108 </li>
109 <li class="nav-header">AsterixDB Primer</li>
110
111 <li>
112
113 <a href="sqlpp/primer-sqlpp.html" title="Option 1: using SQL++">
114 <i class="none"></i>
115 Option 1: using SQL++</a>
116 </li>
117
118 <li>
119
120 <a href="aql/primer.html" title="Option 2: using AQL">
121 <i class="none"></i>
122 Option 2: using AQL</a>
123 </li>
124 <li class="nav-header">Data Model</li>
125
126 <li class="active">
127
128 <a href="#"><i class="none"></i>The Asterix Data Model</a>
129 </li>
130 <li class="nav-header">Queries - SQL++</li>
131
132 <li>
133
134 <a href="sqlpp/manual.html" title="The SQL++ Query Language">
135 <i class="none"></i>
136 The SQL++ Query Language</a>
137 </li>
138
139 <li>
140
141 <a href="sqlpp/builtins.html" title="Builtin Functions">
142 <i class="none"></i>
143 Builtin Functions</a>
144 </li>
145 <li class="nav-header">Queries - AQL</li>
146
147 <li>
148
149 <a href="aql/manual.html" title="The Asterix Query Language (AQL)">
150 <i class="none"></i>
151 The Asterix Query Language (AQL)</a>
152 </li>
153
154 <li>
155
156 <a href="aql/builtins.html" title="Builtin Functions">
157 <i class="none"></i>
158 Builtin Functions</a>
159 </li>
160 <li class="nav-header">API/SDK</li>
161
162 <li>
163
164 <a href="api.html" title="HTTP API">
165 <i class="none"></i>
166 HTTP API</a>
167 </li>
168
169 <li>
170
171 <a href="csv.html" title="CSV Output">
172 <i class="none"></i>
173 CSV Output</a>
174 </li>
175 <li class="nav-header">Advanced Features</li>
176
177 <li>
178
179 <a href="aql/fulltext.html" title="Support of Full-text Queries">
180 <i class="none"></i>
181 Support of Full-text Queries</a>
182 </li>
183
184 <li>
185
186 <a href="aql/externaldata.html" title="Accessing External Data">
187 <i class="none"></i>
188 Accessing External Data</a>
189 </li>
190
191 <li>
192
193 <a href="feeds/tutorial.html" title="Support for Data Ingestion">
194 <i class="none"></i>
195 Support for Data Ingestion</a>
196 </li>
197
198 <li>
199
200 <a href="udf.html" title="User Defined Functions">
201 <i class="none"></i>
202 User Defined Functions</a>
203 </li>
204
205 <li>
206
207 <a href="aql/filters.html" title="Filter-Based LSM Index Acceleration">
208 <i class="none"></i>
209 Filter-Based LSM Index Acceleration</a>
210 </li>
211
212 <li>
213
214 <a href="aql/similarity.html" title="Support of Similarity Queries">
215 <i class="none"></i>
216 Support of Similarity Queries</a>
217 </li>
218 </ul>
219
220
221
222 <hr class="divider" />
223
224 <div id="poweredBy">
225 <div class="clear"></div>
226 <div class="clear"></div>
227 <div class="clear"></div>
228 <a href="./" title="AsterixDB" class="builtBy">
229 <img class="builtBy" alt="AsterixDB" src="images/asterixlogo.png" />
230 </a>
231 </div>
232 </div>
233 </div>
234
235
236 <div id="bodyColumn" class="span9" >
237
238 <!-- ! Licensed to the Apache Software Foundation (ASF) under one
239 ! or more contributor license agreements. See the NOTICE file
240 ! distributed with this work for additional information
241 ! regarding copyright ownership. The ASF licenses this file
242 ! to you under the Apache License, Version 2.0 (the
243 ! "License"); you may not use this file except in compliance
244 ! with the License. You may obtain a copy of the License at
245 !
246 ! http://www.apache.org/licenses/LICENSE-2.0
247 !
248 ! Unless required by applicable law or agreed to in writing,
249 ! software distributed under the License is distributed on an
250 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
251 ! KIND, either express or implied. See the License for the
252 ! specific language governing permissions and limitations
253 ! under the License.
254 ! --><h1>The Asterix Data Model (ADM)</h1>
255<div class="section">
256<h2><a name="Table_of_Contents"></a><a name="toc" id="toc">Table of Contents</a></h2>
257
258<ul>
259
260<li><a href="#PrimitiveTypes">Primitive Types</a>
261
262<ul>
263
264<li><a href="#PrimitiveTypesBoolean">Boolean</a></li>
265
266<li><a href="#PrimitiveTypesInt">Tinyint / Smallint / Integer (Int) / Bigint</a></li>
267
268<li><a href="#PrimitiveTypesFloat">Float</a></li>
269
270<li><a href="#PrimitiveTypesDouble">Double (Double Precision)</a></li>
271
272<li><a href="#PrimitiveTypesString">String</a></li>
273
274<li><a href="#PrimitiveTypesBinary">Binary</a></li>
275
276<li><a href="#PrimitiveTypesPoint">Point</a></li>
277
278<li><a href="#PrimitiveTypesLine">Line</a></li>
279
280<li><a href="#PrimitiveTypesRectangle">Rectangle</a></li>
281
282<li><a href="#PrimitiveTypesCircle">Circle</a></li>
283
284<li><a href="#PrimitiveTypesPolygon">Polygon</a></li>
285
286<li><a href="#PrimitiveTypesDate">Date</a></li>
287
288<li><a href="#PrimitiveTypesTime">Time</a></li>
289
290<li><a href="#PrimitiveTypesDateTime">Datetime (Timestamp)</a></li>
291
292<li><a href="#PrimitiveTypesDuration">Duration/Year_month_duration/Day_time_duration</a></li>
293
294<li><a href="#PrimitiveTypesInterval">Interval</a></li>
295
296<li><a href="#PrimitiveTypesUUID">UUID</a></li>
297 </ul></li>
298
299<li><a href="#IncompleteInformationTypesTypes">Incomplete Information Types</a>
300
301<ul>
302
303<li><a href="#IncompleteInformationTypesNull">Null</a></li>
304
305<li><a href="#IncompleteInformationTypesMissing">Missing</a></li>
306 </ul></li>
307
308<li><a href="#DerivedTypes">Derived Types</a>
309
310<ul>
311
312<li><a href="#DerivedTypesObject">Object</a></li>
313
314<li><a href="#DerivedTypesArray">Array</a></li>
315
316<li><a href="#DerivedTypesMultiset">Multiset</a></li>
317 </ul></li>
318</ul>
319<p>An instance of Asterix data model (ADM) can be a <i><i>primitive type</i></i> (<tt>boolean</tt>, <tt>tinyint</tt>, <tt>smallint</tt>, <tt>integer</tt>, <tt>bigint</tt>, <tt>string</tt>, <tt>float</tt>, <tt>double</tt>, <tt>date</tt>, <tt>time</tt>, <tt>datetime</tt>, etc.), a <i><i>special type</i></i> (<tt>null</tt> or <tt>missing</tt>), or a <i><i>derived type</i></i>.</p>
320<p>The type names are case-insensitive, e.g., both <tt>BIGINT</tt> and <tt>bigint</tt> are acceptable.</p></div>
321<div class="section">
322<h2><a name="Primitive_Types"></a><a name="PrimitiveTypes" id="PrimitiveTypes">Primitive Types</a></h2>
323<div class="section">
324<h3><a name="Boolean"></a><a name="PrimitiveTypesBoolean" id="PrimitiveTypesBoolean">Boolean</a></h3>
325<p><tt>boolean</tt> data type can have one of the two values: <i><i>true</i></i> or <i><i>false</i></i>.</p>
326
327<ul>
328
329<li>
330<p>Example:</p>
331
332<div class="source">
333<div class="source">
334<pre>{ &quot;true&quot;: true, &quot;false&quot;: false };
335</pre></div></div></li>
336</ul>
337
338<ul>
339
340<li>
341<p>The expected result is:</p>
342
343<div class="source">
344<div class="source">
345<pre>{ &quot;true&quot;: true, &quot;false&quot;: false }
346</pre></div></div></li>
347</ul></div>
348<div class="section">
349<h3><a name="Tinyint__Smallint__Integer_Int__Bigint"></a><a name="PrimitiveTypesInt" id="PrimitiveTypesInt">Tinyint / Smallint / Integer (Int) / Bigint</a></h3>
350<p>Integer types using 8, 16, 32, or 64 bits. The ranges of these types are:</p>
351
352<ul>
353
354<li><tt>tinyint</tt>: -127 to 127</li>
355
356<li><tt>smallint</tt>: -32767 to 32767</li>
357
358<li><tt>integer</tt>: -2147483647 to 2147483647</li>
359
360<li><tt>bigint</tt>: -9223372036854775808 to 9223372036854775807</li>
361</ul>
362<p><tt>int</tt> is an abbreviated alias for integer.</p>
363
364<ul>
365
366<li>
367<p>Example:</p>
368
369<div class="source">
370<div class="source">
371<pre>{ &quot;tinyint&quot;: tiny(&quot;125&quot;), &quot;smallint&quot;: smallint(&quot;32765&quot;), &quot;integer&quot;: 294967295, &quot;bigint&quot;: bigint(&quot;1700000000000000000&quot;)};
372</pre></div></div></li>
373</ul>
374
375<ul>
376
377<li>
378<p>The expected result is:</p>
379
380<div class="source">
381<div class="source">
382<pre>{ &quot;tinyint&quot;: 125, &quot;smallint&quot;: 32765, &quot;integer&quot;: 294967295, &quot;bigint&quot;: 17000000 }
383</pre></div></div></li>
384</ul></div>
385<div class="section">
386<h3><a name="Float"></a><a name="PrimitiveTypesFloat" id="PrimitiveTypesFloat">Float</a></h3>
387<p><tt>float</tt> represents approximate numeric data values using 4 bytes. The range of a float value can be from 2^(-149) to (2-2^(-23)&#xb7;2^(127) for both positive and negative. Beyond these ranges will get <tt>INF</tt> or <tt>-INF</tt>.</p>
388
389<ul>
390
391<li>
392<p>Example:</p>
393
394<div class="source">
395<div class="source">
396<pre>{ &quot;v1&quot;: float(&quot;NaN&quot;), &quot;v2&quot;: float(&quot;INF&quot;), &quot;v3&quot;: float(&quot;-INF&quot;), &quot;v4&quot;: float(&quot;-2013.5&quot;) };
397</pre></div></div></li>
398</ul>
399
400<ul>
401
402<li>
403<p>The expected result is:</p>
404
405<div class="source">
406<div class="source">
407<pre>{ &quot;v1&quot;: NaN, &quot;v2&quot;: Infinity, &quot;v3&quot;: -Infinity, &quot;v4&quot;: -2013.5 }
408</pre></div></div></li>
409</ul></div>
410<div class="section">
411<h3><a name="Double_double_precision"></a><a name="PrimitiveTypesDouble" id="PrimitiveTypesDouble">Double (double precision)</a></h3>
412<p><tt>double</tt> represents approximate numeric data values using 8 bytes. The range of a double value can be from (2^(-1022)) to (2-2^(-52))&#xb7;2^(1023) for both positive and negative. Beyond these ranges will get <tt>INF</tt> or <tt>-INF</tt>.</p>
413
414<ul>
415
416<li>
417<p>Example:</p>
418
419<div class="source">
420<div class="source">
421<pre>{ &quot;v1&quot;: double(&quot;NaN&quot;), &quot;v2&quot;: double(&quot;INF&quot;), &quot;v3&quot;: double(&quot;-INF&quot;), &quot;v4&quot;: &quot;-2013.593823748327284&quot; };
422</pre></div></div></li>
423</ul>
424
425<ul>
426
427<li>
428<p>The expected result is:</p>
429
430<div class="source">
431<div class="source">
432<pre>{ &quot;v1&quot;: NaN, &quot;v2&quot;: Infinity, &quot;v3&quot;: -Infinity, &quot;v4&quot;: -2013.5938237483274 }
433</pre></div></div></li>
434</ul>
435<p><tt>Double precision</tt> is an alias of <tt>double</tt>.</p></div>
436<div class="section">
437<h3><a name="String"></a><a name="PrimitiveTypesString" id="PrimitiveTypesString">String</a></h3>
438<p><tt>string</tt> represents a sequence of characters. The total length of the sequence can be up to 2,147,483,648.</p>
439
440<ul>
441
442<li>
443<p>Example:</p>
444
445<div class="source">
446<div class="source">
447<pre>{ &quot;v1&quot;: string(&quot;This is a string.&quot;), &quot;v2&quot;: string(&quot;\&quot;This is a quoted string\&quot;&quot;) };
448</pre></div></div></li>
449</ul>
450
451<ul>
452
453<li>
454<p>The expected result is:</p>
455
456<div class="source">
457<div class="source">
458<pre>{ &quot;v1&quot;: &quot;This is a string.&quot;, &quot;v2&quot;: &quot;\&quot;This is a quoted string\&quot;&quot; }
459</pre></div></div></li>
460</ul></div>
461<div class="section">
462<h3><a name="Binary"></a><a name="PrimitiveTypesBinary" id="PrimitiveTypesBinary">Binary</a></h3>
463<p><tt>binary</tt> represents a sequence of bytes. It can be constructed from a <tt>hex</tt> or a <tt>base64</tt> string sequence. The total length of the byte sequence can be up to 2,147,483,648.</p>
464
465<ul>
466
467<li>
468<p>Example:</p>
469
470<div class="source">
471<div class="source">
472<pre>{
473 &quot;hex1&quot; : hex(&quot;ABCDEF0123456789&quot;),
474 &quot;hex2&quot;: hex(&quot;abcdef0123456789&quot;),
475 &quot;base64_1&quot; : base64(&quot;0123456789qwertyui+/&quot;),
476 &quot;base64_2&quot; : base64('QXN0ZXJpeA==')
477};
478</pre></div></div></li>
479
480<li>
481<p>The default output format is in <tt>hex</tt> format. Thus, the expected result is:</p>
482
483<div class="source">
484<div class="source">
485<pre>{
486 &quot;hex1&quot;: hex(&quot;ABCDEF0123456789&quot;),
487 &quot;hex2&quot;: hex(&quot;ABCDEF0123456789&quot;),
488 &quot;base64_1&quot;: hex(&quot;D35DB7E39EBBF3DAB07ABB72BA2FBF&quot;),
489 &quot;base64_2&quot;: hex(&quot;41737465726978&quot;)
490}
491</pre></div></div></li>
492</ul></div>
493<div class="section">
494<h3><a name="Point"></a><a name="PrimitiveTypesPoint" id="PrimitiveTypesPoint">Point</a></h3>
495<p><tt>point</tt> is the fundamental two-dimensional building block for spatial types. It consists of two <tt>double</tt> coordinates x and y.</p>
496
497<ul>
498
499<li>
500<p>Example:</p>
501
502<div class="source">
503<div class="source">
504<pre>{ &quot;v1&quot;: point(&quot;80.10d, -10E5&quot;), &quot;v2&quot;: point(&quot;5.10E-10d, -10E5&quot;) };
505</pre></div></div></li>
506</ul>
507
508<ul>
509
510<li>
511<p>The expected result is:</p>
512
513<div class="source">
514<div class="source">
515<pre>{ &quot;v1&quot;: point(&quot;80.1,-1000000.0&quot;), &quot;v2&quot;: point(&quot;5.1E-10,-1000000.0&quot;) }
516</pre></div></div></li>
517</ul></div>
518<div class="section">
519<h3><a name="Line"></a><a name="PrimitiveTypesLine" id="PrimitiveTypesLine">Line</a></h3>
520<p><tt>line</tt> consists of two points that represent the start and the end points of a line segment.</p>
521
522<ul>
523
524<li>
525<p>Example:</p>
526
527<div class="source">
528<div class="source">
529<pre>{ &quot;v1&quot;: line(&quot;10.1234,11.1e-1 +10.2E-2,-11.22&quot;), &quot;v2&quot;: line(&quot;0.1234,-1.00e-10 +10.5E-2,-01.02&quot;) };
530</pre></div></div></li>
531</ul>
532
533<ul>
534
535<li>
536<p>The expected result is:</p>
537
538<div class="source">
539<div class="source">
540<pre>{ &quot;v1&quot;: line(&quot;10.1234,1.11 0.102,-11.22&quot;), &quot;v2&quot;: line(&quot;0.1234,-1.0E-10 0.105,-1.02&quot;) }
541</pre></div></div></li>
542</ul></div>
543<div class="section">
544<h3><a name="Rectangle"></a><a name="PrimitiveTypesRectangle" id="PrimitiveTypesRectangle">Rectangle</a></h3>
545<p><tt>rectangle</tt> consists of two points that represent the <i><i>bottom left</i></i> and <i><i>upper right</i></i> corners of a rectangle.</p>
546
547<ul>
548
549<li>
550<p>Example:</p>
551
552<div class="source">
553<div class="source">
554<pre>{ &quot;v1&quot;: rectangle(&quot;5.1,11.8 87.6,15.6548&quot;), &quot;v2&quot;: rectangle(&quot;0.1234,-1.00e-10 5.5487,0.48765&quot;) };
555</pre></div></div></li>
556</ul>
557
558<ul>
559
560<li>
561<p>The expected result is:</p>
562
563<div class="source">
564<div class="source">
565<pre>{ &quot;v1&quot;: rectangle(&quot;5.1,11.8 87.6,15.6548&quot;), &quot;v2&quot;: rectangle(&quot;0.1234,-1.0E-10 5.5487,0.48765&quot;) }
566</pre></div></div></li>
567</ul></div>
568<div class="section">
569<h3><a name="Circle"></a><a name="PrimitiveTypesCircle" id="PrimitiveTypesCircle">Circle</a></h3>
570<p><tt>circle</tt> consists of one point that represents the center of the circle and a radius of type <tt>double</tt>.</p>
571
572<ul>
573
574<li>
575<p>Example:</p>
576
577<div class="source">
578<div class="source">
579<pre>{ &quot;v1&quot;: circle(&quot;10.1234,11.1e-1 +10.2E-2&quot;), &quot;v2&quot;: circle(&quot;0.1234,-1.00e-10 +10.5E-2&quot;) };
580</pre></div></div></li>
581</ul>
582
583<ul>
584
585<li>
586<p>The expected result is:</p>
587
588<div class="source">
589<div class="source">
590<pre>{ &quot;v1&quot;: circle(&quot;10.1234,1.11 0.102&quot;), &quot;v2&quot;: circle(&quot;0.1234,-1.0E-10 0.105&quot;) }
591</pre></div></div></li>
592</ul></div>
593<div class="section">
594<h3><a name="Polygon"></a><a name="PrimitiveTypesPolygon" id="PrimitiveTypesPolygon">Polygon</a></h3>
595<p><tt>polygon</tt> consists of <i><i>n</i></i> points that represent the vertices of a <i><i>simple closed</i></i> polygon.</p>
596
597<ul>
598
599<li>
600<p>Example:</p>
601
602<div class="source">
603<div class="source">
604<pre>{
605 &quot;v1&quot;: polygon(&quot;-1.2,+1.3e2 -2.14E+5,2.15 -3.5e+2,03.6 -4.6E-3,+4.81&quot;),
606 &quot;v2&quot;: polygon(&quot;-1.0,+10.5e2 -02.15E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 +3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75&quot;)
607};
608</pre></div></div></li>
609</ul>
610
611<ul>
612
613<li>
614<p>The expected result is:</p>
615
616<div class="source">
617<div class="source">
618<pre>{
619 &quot;v1&quot;: polygon(&quot;-1.2,130.0 -214000.0,2.15 -350.0,3.6 -0.0046,4.81&quot;),
620 &quot;v2&quot;: polygon(&quot;-1.0,1050.0 -2.15E50,2.5 -1.0,3300.0 -250000.0,20.15 350.0,3.6 -0.0046,4.75 -2.0,100.0 -200000.0,20.1 30.5,3.25 -0.00433,4.75&quot;) }
621}
622</pre></div></div></li>
623</ul></div>
624<div class="section">
625<h3><a name="Date"></a><a name="PrimitiveTypesDate" id="PrimitiveTypesDate">Date</a></h3>
626<p><tt>date</tt> represents a time point along the Gregorian calendar system specified by the year, month and day. ASTERIX supports the date from <tt>-9999-01-01</tt> to <tt>9999-12-31</tt>.</p>
627<p>A date value can be represented in two formats, extended format and basic format.</p>
628
629<ul>
630
631<li>Extended format is represented as <tt>[-]yyyy-mm-dd</tt> for <tt>year-month-day</tt>. Each field should be padded if there are less digits than the format specified.</li>
632
633<li>Basic format is in the format of <tt>[-]yyyymmdd</tt>.</li>
634
635<li>
636<p>Example:</p>
637
638<div class="source">
639<div class="source">
640<pre>{ &quot;v1&quot;: date(&quot;2013-01-01&quot;), &quot;v2&quot;: date(&quot;-19700101&quot;) };
641</pre></div></div></li>
642</ul>
643
644<ul>
645
646<li>
647<p>The expected result is:</p>
648
649<div class="source">
650<div class="source">
651<pre>{ &quot;v1&quot;: date(&quot;2013-01-01&quot;), &quot;v2&quot;: date(&quot;-1970-01-01&quot;) }
652</pre></div></div></li>
653</ul></div>
654<div class="section">
655<h3><a name="Time"></a><a name="PrimitiveTypesTime" id="PrimitiveTypesTime">Time</a></h3>
656<p><tt>time</tt> type describes the time within the range of a day. It is represented by three fields: hour, minute and second. Millisecond field is optional as the fraction of the second field. Its extended format is as <tt>hh:mm:ss[.mmm]</tt> and the basic format is <tt>hhmmss[mmm]</tt>. The value domain is from <tt>00:00:00.000</tt> to <tt>23:59:59.999</tt>.</p>
657<p>Timezone field is optional for a time value. Timezone is represented as <tt>[+|-]hh:mm</tt> for extended format or <tt>[+|-]hhmm</tt> for basic format. Note that the sign designators cannot be omitted. <tt>Z</tt> can also be used to represent the UTC local time. If no timezone information is given, it is UTC by default.</p>
658
659<ul>
660
661<li>
662<p>Example:</p>
663
664<div class="source">
665<div class="source">
666<pre>{ &quot;v1&quot;: time(&quot;12:12:12.039Z&quot;), &quot;v2&quot;: time(&quot;000000000-0800&quot;) };
667</pre></div></div></li>
668</ul>
669
670<ul>
671
672<li>
673<p>The expected result is:</p>
674
675<div class="source">
676<div class="source">
677<pre>{ &quot;v1&quot;: time(&quot;12:12:12.039Z&quot;), &quot;v2&quot;: time(&quot;08:00:00.000Z&quot;) }
678</pre></div></div></li>
679</ul></div>
680<div class="section">
681<h3><a name="Datetime_Timestamp"></a><a name="PrimitiveTypesDateTime" id="PrimitiveTypesDateTime">Datetime (Timestamp)</a></h3>
682<p>A <tt>datetime</tt> value is a combination of an <tt>date</tt> and <tt>time</tt>, representing a fixed time point along the Gregorian calendar system. The value is among <tt>-9999-01-01 00:00:00.000</tt> and <tt>9999-12-31 23:59:59.999</tt>.</p>
683<p>A <tt>datetime</tt> value is represented as a combination of the representation of its <tt>date</tt> part and <tt>time</tt> part, separated by a separator <tt>T</tt>. Either extended or basic format can be used, and the two parts should be the same format.</p>
684<p>Millisecond field and timezone field are optional, as specified in the <tt>time</tt> type.</p>
685
686<ul>
687
688<li>
689<p>Example:</p>
690
691<div class="source">
692<div class="source">
693<pre>{ &quot;v1&quot;: datetime(&quot;2013-01-01T12:12:12.039Z&quot;), &quot;v2&quot;: datetime(&quot;-19700101T000000000-0800&quot;) };
694</pre></div></div></li>
695</ul>
696
697<ul>
698
699<li>
700<p>The expected result is:</p>
701
702<div class="source">
703<div class="source">
704<pre>{ &quot;v1&quot;: datetime(&quot;2013-01-01T12:12:12.039Z&quot;), &quot;v2&quot;: datetime(&quot;-1970-01-01T08:00:00.000Z&quot;) }
705</pre></div></div></li>
706</ul>
707<p><tt>timestamp</tt> is an alias of <tt>datetime</tt>.</p></div>
708<div class="section">
709<h3><a name="DurationYear_month_durationDay_time_duration"></a><a name="PrimitiveTypesDuration" id="PrimitiveTypesDuration">Duration/Year_month_duration/Day_time_duration</a></h3>
710<p><tt>duration</tt> represents a duration of time. A duration value is specified by integers on at least one of the following fields: year, month, day, hour, minute, second, and millisecond.</p>
711<p>A duration value is in the format of <tt>[-]PnYnMnDTnHnMn.mmmS</tt>. The millisecond part (as the fraction of the second field) is optional, and when no millisecond field is used, the decimal point should also be absent.</p>
712<p>Negative durations are also supported for the arithmetic operations between time instance types (<tt>date</tt>, <tt>time</tt> and <tt>datetime</tt>), and is used to roll the time back for the given duration. For example <tt>date(&quot;2012-01-01&quot;) + duration(&quot;-P3D&quot;)</tt> will return <tt>date(&quot;2011-12-29&quot;)</tt>.</p>
713<p>There are also two sub-duration types, namely <tt>year_month_duration</tt> and <tt>day_time_duration</tt>. <tt>year_month_duration</tt> represents only the years and months of a duration, while <tt>day_time_duration</tt> represents only the day to millisecond fields. Different from the <tt>duration</tt> type, both these two subtypes are totally ordered, so they can be used for comparison and index construction.</p>
714<p>Note that a canonical representation of the duration is always returned, regardless whether the duration is in the canonical representation or not from the user&#x2019;s input. More information about canonical representation can be found from <a class="externalLink" href="http://www.w3.org/TR/xpath-functions/#canonical-dayTimeDuration">XPath dayTimeDuration Canonical Representation</a> and <a class="externalLink" href="http://www.w3.org/TR/xpath-functions/#canonical-yearMonthDuration">yearMonthDuration Canonical Representation</a>.</p>
715
716<ul>
717
718<li>
719<p>Example:</p>
720
721<div class="source">
722<div class="source">
723<pre>{ &quot;v1&quot;: duration(&quot;P100Y12MT12M&quot;), &quot;v2&quot;: duration(&quot;-PT20.943S&quot;) };
724</pre></div></div></li>
725</ul>
726
727<ul>
728
729<li>
730<p>The expected result is:</p>
731
732<div class="source">
733<div class="source">
734<pre>{ &quot;v1&quot;: duration(&quot;P101YT12M&quot;), &quot;v2&quot;: duration(&quot;-PT20.943S&quot;) }
735</pre></div></div></li>
736</ul></div>
737<div class="section">
738<h3><a name="Interval"></a><a name="PrimitiveTypesInterval" id="PrimitiveTypesInterval">Interval</a></h3>
739<p><tt>interval</tt> represents inclusive-exclusive ranges of time. It is defined by two time point values with the same temporal type(<tt>date</tt>, <tt>time</tt> or <tt>datetime</tt>).</p>
740
741<ul>
742
743<li>
744<p>Example:</p>
745
746<div class="source">
747<div class="source">
748<pre>{
749 &quot;v1&quot;: interval(date(&quot;2013-01-01&quot;), date(&quot;20130505&quot;)),
750 &quot;v2&quot;: interval(time(&quot;00:01:01&quot;), time(&quot;213901049+0800&quot;)),
751 &quot;v3&quot;: interval(datetime(&quot;2013-01-01T00:01:01&quot;), datetime(&quot;20130505T213901049+0800&quot;))
752};
753</pre></div></div></li>
754</ul>
755
756<ul>
757
758<li>
759<p>The expected result is:</p>
760
761<div class="source">
762<div class="source">
763<pre>{
764 &quot;v1&quot;: interval(date(&quot;2013-01-01&quot;), date(&quot;2013-05-05&quot;)),
765 &quot;v2&quot;: interval(time(&quot;00:01:01.000Z&quot;), time(&quot;13:39:01.049Z&quot;)),
766 &quot;v3&quot;: interval(datetime(&quot;2013-01-01T00:01:01.000Z&quot;), datetime(&quot;2013-05-05T13:39:01.049Z&quot;))
767}
768</pre></div></div></li>
769</ul></div>
770<div class="section">
771<h3><a name="UUID"></a><a name="PrimitiveTypesUUID" id="PrimitiveTypesUUID">UUID</a></h3>
772<p><tt>uuid</tt> represents a UUID value, which stands for Universally unique identifier. It is defined by a canonical format using hexadecimal text with inserted hyphen characters. (E.g.: 5a28ce1e-6a74-4201-9e8f-683256e5706f). This type is generally used to store auto-generated primary key values.</p>
773
774<ul>
775
776<li>
777<p>Example:</p>
778
779<div class="source">
780<div class="source">
781<pre>return { &quot;v1&quot;:uuid(&quot;5c848e5c-6b6a-498f-8452-8847a2957421&quot;) }
782</pre></div></div></li>
783</ul>
784
785<ul>
786
787<li>
788<p>The expected result is:</p>
789
790<div class="source">
791<div class="source">
792<pre>{ &quot;v1&quot;: uuid(&quot;5c848e5c-6b6a-498f-8452-8847a2957421&quot;) }
793</pre></div></div></li>
794</ul></div></div>
795<div class="section">
796<h2><a name="Incomplete_Information_Types"></a><a name="IncompleteInformationTypes" id="IncompleteInformationTypes">Incomplete Information Types</a></h2>
797<div class="section">
798<h3><a name="Null"></a><a name="IncompleteInformationTypesNull" id="IncompleteInformationTypesNull">Null</a></h3>
799<p><tt>null</tt> is a special value that is often used to represent an unknown value. For example, a user might not be able to know the value of a field and let it be <tt>null</tt>.</p>
800
801<ul>
802
803<li>
804<p>Example:</p>
805
806<div class="source">
807<div class="source">
808<pre>{ &quot;field&quot;: null };
809</pre></div></div></li>
810</ul>
811
812<ul>
813
814<li>
815<p>The expected result is:</p>
816
817<div class="source">
818<div class="source">
819<pre>{ &quot;field&quot;: null }
820</pre></div></div></li>
821</ul></div>
822<div class="section">
823<h3><a name="Missing"></a><a name="IncompleteInformationTypesMissing" id="IncompleteInformationTypesMissing">Missing</a></h3>
824<p><tt>missing</tt> represents a missing name-value pair in an object. If the referenced field does not exist, an empty result value is returned by the query.</p>
825<p>As neither the data model nor the system enforces homogeneity for datasets or collections, items in a dataset or collection can be of heterogeneous types and so a field can be present in one object and <tt>missing</tt> in another.</p>
826
827<ul>
828
829<li>
830<p>Example:</p>
831
832<div class="source">
833<div class="source">
834<pre>{ &quot;field&quot;: missing };
835</pre></div></div></li>
836</ul>
837
838<ul>
839
840<li>
841<p>The expected result is:</p>
842
843<div class="source">
844<div class="source">
845<pre>{ }
846</pre></div></div></li>
847</ul>
848<p>Since a field with value <tt>missing</tt> means the field is absent, we get an empty object.</p></div></div>
849<div class="section">
850<h2><a name="Derived_Types"></a><a name="DerivedTypes" id="DerivedTypes">Derived Types</a></h2>
851<div class="section">
852<h3><a name="Object"></a><a name="DerivedTypesObject" id="DerivedTypesObject">Object</a></h3>
853<p>An <tt>object</tt> contains a set of &#xfb01;elds, where each &#xfb01;eld is described by its name and type. An object type may be defined as either open or closed. Open objects (instances of open object types) are permitted to contain &#xfb01;elds that are not part of the type de&#xfb01;nition, while closed objects do not permit their instances to carry extra fields. An example type definition for an object is:</p>
854
855<div class="source">
856<div class="source">
857<pre> create type SoldierType as open {
858 name: string?,
859 rank: string,
860 serialno: int
861 };
862</pre></div></div>
863<p>Syntactically, object constructors are surrounded by curly braces &#x201c;{&#x2026;}&#x201d;. Some examples of legitimate instances of the above type include:</p>
864
865<div class="source">
866<div class="source">
867<pre> { &quot;name&quot;: &quot;Joe Blow&quot;, &quot;rank&quot;: &quot;Sergeant&quot;, &quot;serialno&quot;: 1234567 }
868 { &quot;rank&quot;: &quot;Private&quot;, &quot;serialno&quot;: 9876543 }
869 { &quot;name&quot;: &quot;Sally Forth&quot;, &quot;rank&quot;: &quot;Major&quot;, &quot;serialno&quot;: 2345678, &quot;gender&quot;: &quot;F&quot; }
870</pre></div></div>
871<p>The first instance has all of the type&#x2019;s prescribed content. The second instance is missing the name field, which is fine because it is optional (due to the ?). The third instance has an extra field; that is fine because the type definition specifies that it is open (which is also true by default, if open is not specified). To more tightly control object content, specifying closed instead of open in the type definition for SoldierType would have made the third example instance an invalid instance of the type.</p></div>
872<div class="section">
873<h3><a name="Array"></a><a name="DerivedTypesArray" id="DerivedTypesArray">Array</a></h3>
874<p>An <tt>array</tt> is a container that holds a fixed number of values. Array constructors are denoted by brackets: &#x201c;[&#x2026;]&#x201d;.</p>
875<p>An example would be</p>
876
877<div class="source">
878<div class="source">
879<pre> [&quot;alice&quot;, 123, &quot;bob&quot;, null]
880</pre></div></div></div>
881<div class="section">
882<h3><a name="Multiset"></a><a name="DerivedTypesMultiset" id="DerivedTypesMultiset">Multiset</a></h3>
883<p>A <tt>multiset</tt> is a generalization of the concept of a set that, unlike a set, allows multiple instances of the multiset&#x2019;s elements. Multiset constructors are denoted by two opening curly braces followed by data and two closing curly braces, like &#x201c;{{&#x2026;}}&#x201d;.</p>
884<p>An example would be</p>
885
886<div class="source">
887<div class="source">
888<pre> {{&quot;hello&quot;, 9328, &quot;world&quot;, [1, 2, null]}}
889</pre></div></div></div></div>
890 </div>
891 </div>
892 </div>
893
894 <hr/>
895
896 <footer>
897 <div class="container-fluid">
898 <div class="row span12">Copyright &copy; 2017
899 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
900 All Rights Reserved.
901
902 </div>
903
904 <?xml version="1.0" encoding="UTF-8"?>
905<div class="row-fluid">Apache AsterixDB, AsterixDB, Apache, the Apache
906 feather logo, and the Apache AsterixDB project logo are either
907 registered trademarks or trademarks of The Apache Software
908 Foundation in the United States and other countries.
909 All other marks mentioned may be trademarks or registered
910 trademarks of their respective owners.</div>
911
912
913 </div>
914 </footer>
915 </body>
916</html>