Add 0.9.4 Change-Id:Ied2b685f015e0f35563ebd0510231a5d663494f2 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2984 Reviewed-by: Ian Maxon <ima...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/asterixdb-site/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb-site/commit/d00eca89 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb-site/tree/d00eca89 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb-site/diff/d00eca89 Branch: refs/heads/asf-site Commit: d00eca8943db0c3998464456a3b3f2f633b1c333 Parents: 9c40a66 Author: Ian Maxon <ian@maxons.email> Authored: Fri Oct 5 17:29:55 2018 -0700 Committer: Ian Maxon <ima...@apache.org> Committed: Fri Oct 5 17:32:22 2018 -0700 ---------------------------------------------------------------------- _config.yml | 14 +- content/about.html | 4 +- content/community.html | 4 +- content/dev-setup.html | 14 +- content/docs/0.9.4/api.html | 312 + content/docs/0.9.4/aql/externaldata.html | 577 ++ content/docs/0.9.4/aql/filters.html | 142 + content/docs/0.9.4/aql/fulltext.html | 208 + content/docs/0.9.4/aql/js-sdk.html | 873 +++ content/docs/0.9.4/aql/manual.html | 997 +++ content/docs/0.9.4/aql/primer.html | 863 +++ content/docs/0.9.4/aql/similarity.html | 310 + .../0.9.4/css/apache-maven-fluido-1.7.min.css | 17 + content/docs/0.9.4/css/print.css | 23 + content/docs/0.9.4/css/site.css | 1 + content/docs/0.9.4/csv.html | 294 + content/docs/0.9.4/data/chm.adm | 12 + content/docs/0.9.4/data/chu.adm | 4 + content/docs/0.9.4/data/fbm.adm | 15 + content/docs/0.9.4/data/fbu.adm | 10 + content/docs/0.9.4/data/gbm.adm | 15 + content/docs/0.9.4/data/gbu.adm | 10 + content/docs/0.9.4/data/lineitem.tbl | 6005 ++++++++++++++++++ content/docs/0.9.4/data/twm.adm | 12 + content/docs/0.9.4/data/twu.adm | 4 + content/docs/0.9.4/feeds/tutorial.html | 450 ++ .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 35283 bytes .../fonts/glyphicons-halflings-regular.svg | 229 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 55016 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 41793 bytes content/docs/0.9.4/images/AsterixCluster.png | Bin 0 -> 95355 bytes .../0.9.4/images/accessories-text-editor.png | Bin 0 -> 746 bytes content/docs/0.9.4/images/add.gif | Bin 0 -> 397 bytes .../0.9.4/images/apache-maven-project-2.png | Bin 0 -> 43073 bytes .../0.9.4/images/application-certificate.png | Bin 0 -> 923 bytes content/docs/0.9.4/images/asf_logo_wide.png | Bin 0 -> 14470 bytes content/docs/0.9.4/images/asterix_webui.png | Bin 0 -> 55418 bytes .../docs/0.9.4/images/asterixdb_interface.png | Bin 0 -> 60439 bytes content/docs/0.9.4/images/asterixlogo.png | Bin 0 -> 15334 bytes content/docs/0.9.4/images/contact-new.png | Bin 0 -> 736 bytes .../docs/0.9.4/images/document-properties.png | Bin 0 -> 577 bytes content/docs/0.9.4/images/drive-harddisk.png | Bin 0 -> 700 bytes content/docs/0.9.4/images/egg-logo.png | Bin 0 -> 8626 bytes content/docs/0.9.4/images/fix.gif | Bin 0 -> 366 bytes content/docs/0.9.4/images/hyrax_ts.png | Bin 0 -> 4949 bytes content/docs/0.9.4/images/icon_error_sml.gif | Bin 0 -> 633 bytes content/docs/0.9.4/images/icon_help_sml.gif | Bin 0 -> 1072 bytes content/docs/0.9.4/images/icon_info_sml.gif | Bin 0 -> 638 bytes content/docs/0.9.4/images/icon_success_sml.gif | Bin 0 -> 604 bytes content/docs/0.9.4/images/icon_warning_sml.gif | Bin 0 -> 625 bytes content/docs/0.9.4/images/image-x-generic.png | Bin 0 -> 662 bytes .../docs/0.9.4/images/internet-web-browser.png | Bin 0 -> 1017 bytes .../0.9.4/images/logos/build-by-maven-black.png | Bin 0 -> 2294 bytes .../0.9.4/images/logos/build-by-maven-white.png | Bin 0 -> 2260 bytes .../docs/0.9.4/images/logos/maven-feather.png | Bin 0 -> 3330 bytes content/docs/0.9.4/images/ncservice.png | Bin 0 -> 24205 bytes content/docs/0.9.4/images/network-server.png | Bin 0 -> 536 bytes content/docs/0.9.4/images/package-x-generic.png | Bin 0 -> 717 bytes .../docs/0.9.4/images/profiles/pre-release.png | Bin 0 -> 32607 bytes content/docs/0.9.4/images/profiles/retired.png | Bin 0 -> 22003 bytes content/docs/0.9.4/images/profiles/sandbox.png | Bin 0 -> 33010 bytes content/docs/0.9.4/images/remove.gif | Bin 0 -> 607 bytes content/docs/0.9.4/images/rss.png | Bin 0 -> 474 bytes content/docs/0.9.4/images/running_inst.png | Bin 0 -> 90641 bytes content/docs/0.9.4/images/update.gif | Bin 0 -> 1090 bytes content/docs/0.9.4/images/window-new.png | Bin 0 -> 583 bytes content/docs/0.9.4/images/yarn_clust.png | Bin 0 -> 61592 bytes .../0.9.4/img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes content/docs/0.9.4/img/glyphicons-halflings.png | Bin 0 -> 12799 bytes content/docs/0.9.4/index.html | 148 + .../0.9.4/js/apache-maven-fluido-1.7.min.js | 25 + content/docs/0.9.4/ncservice.html | 918 +++ content/docs/0.9.4/overview.html | 157 + content/docs/0.9.4/sqlpp/primer-sqlpp.html | 852 +++ content/docs/0.9.4/udf.html | 266 + content/download.html | 53 +- content/extension.html | 4 +- content/index.html | 22 +- content/pushing.html | 4 +- content/site.html | 4 +- content/tools.html | 4 +- dev-setup.md | 8 - docs/0.9.4/api.html | 312 + docs/0.9.4/aql/externaldata.html | 577 ++ docs/0.9.4/aql/filters.html | 142 + docs/0.9.4/aql/fulltext.html | 208 + docs/0.9.4/aql/js-sdk.html | 873 +++ docs/0.9.4/aql/manual.html | 997 +++ docs/0.9.4/aql/primer.html | 863 +++ docs/0.9.4/aql/similarity.html | 310 + docs/0.9.4/css/apache-maven-fluido-1.7.min.css | 17 + docs/0.9.4/css/print.css | 23 + docs/0.9.4/css/site.css | 1 + docs/0.9.4/csv.html | 294 + docs/0.9.4/data/chm.adm | 12 + docs/0.9.4/data/chu.adm | 4 + docs/0.9.4/data/fbm.adm | 15 + docs/0.9.4/data/fbu.adm | 10 + docs/0.9.4/data/gbm.adm | 15 + docs/0.9.4/data/gbu.adm | 10 + docs/0.9.4/data/lineitem.tbl | 6005 ++++++++++++++++++ docs/0.9.4/data/twm.adm | 12 + docs/0.9.4/data/twu.adm | 4 + docs/0.9.4/feeds/tutorial.html | 450 ++ .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 35283 bytes .../fonts/glyphicons-halflings-regular.svg | 229 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 55016 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 41793 bytes docs/0.9.4/images/AsterixCluster.png | Bin 0 -> 95355 bytes docs/0.9.4/images/accessories-text-editor.png | Bin 0 -> 746 bytes docs/0.9.4/images/add.gif | Bin 0 -> 397 bytes docs/0.9.4/images/apache-maven-project-2.png | Bin 0 -> 43073 bytes docs/0.9.4/images/application-certificate.png | Bin 0 -> 923 bytes docs/0.9.4/images/asf_logo_wide.png | Bin 0 -> 14470 bytes docs/0.9.4/images/asterix_webui.png | Bin 0 -> 55418 bytes docs/0.9.4/images/asterixdb_interface.png | Bin 0 -> 60439 bytes docs/0.9.4/images/asterixlogo.png | Bin 0 -> 15334 bytes docs/0.9.4/images/contact-new.png | Bin 0 -> 736 bytes docs/0.9.4/images/document-properties.png | Bin 0 -> 577 bytes docs/0.9.4/images/drive-harddisk.png | Bin 0 -> 700 bytes docs/0.9.4/images/egg-logo.png | Bin 0 -> 8626 bytes docs/0.9.4/images/fix.gif | Bin 0 -> 366 bytes docs/0.9.4/images/hyrax_ts.png | Bin 0 -> 4949 bytes docs/0.9.4/images/icon_error_sml.gif | Bin 0 -> 633 bytes docs/0.9.4/images/icon_help_sml.gif | Bin 0 -> 1072 bytes docs/0.9.4/images/icon_info_sml.gif | Bin 0 -> 638 bytes docs/0.9.4/images/icon_success_sml.gif | Bin 0 -> 604 bytes docs/0.9.4/images/icon_warning_sml.gif | Bin 0 -> 625 bytes docs/0.9.4/images/image-x-generic.png | Bin 0 -> 662 bytes docs/0.9.4/images/internet-web-browser.png | Bin 0 -> 1017 bytes .../0.9.4/images/logos/build-by-maven-black.png | Bin 0 -> 2294 bytes .../0.9.4/images/logos/build-by-maven-white.png | Bin 0 -> 2260 bytes docs/0.9.4/images/logos/maven-feather.png | Bin 0 -> 3330 bytes docs/0.9.4/images/ncservice.png | Bin 0 -> 24205 bytes docs/0.9.4/images/network-server.png | Bin 0 -> 536 bytes docs/0.9.4/images/package-x-generic.png | Bin 0 -> 717 bytes docs/0.9.4/images/profiles/pre-release.png | Bin 0 -> 32607 bytes docs/0.9.4/images/profiles/retired.png | Bin 0 -> 22003 bytes docs/0.9.4/images/profiles/sandbox.png | Bin 0 -> 33010 bytes docs/0.9.4/images/remove.gif | Bin 0 -> 607 bytes docs/0.9.4/images/rss.png | Bin 0 -> 474 bytes docs/0.9.4/images/running_inst.png | Bin 0 -> 90641 bytes docs/0.9.4/images/update.gif | Bin 0 -> 1090 bytes docs/0.9.4/images/window-new.png | Bin 0 -> 583 bytes docs/0.9.4/images/yarn_clust.png | Bin 0 -> 61592 bytes docs/0.9.4/img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes docs/0.9.4/img/glyphicons-halflings.png | Bin 0 -> 12799 bytes docs/0.9.4/index.html | 148 + docs/0.9.4/js/apache-maven-fluido-1.7.min.js | 25 + docs/0.9.4/ncservice.html | 918 +++ docs/0.9.4/overview.html | 157 + docs/0.9.4/sqlpp/primer-sqlpp.html | 852 +++ docs/0.9.4/udf.html | 266 + download.md | 51 - index.md | 2 +- 155 files changed, 27532 insertions(+), 154 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/asterixdb-site/blob/d00eca89/_config.yml ---------------------------------------------------------------------- diff --git a/_config.yml b/_config.yml index e46c7fb..e1eb181 100644 --- a/_config.yml +++ b/_config.yml @@ -1,17 +1,12 @@ url: "" name: "Apache AsterixDB" -STABLE_VERSION: 0.9.3 -UNSTABLE_VERSION: 0.9.4-SNAPSHOT -STABLE_DOWNLOAD_URL: "http://www.apache.org/dyn/closer.lua/asterixdb/asterixdb-0.9.3/asterix-installer-0.9.3-binary-assembly.zip" -UNSTABLE_DOWNLOAD_URL: "https://asterix-jenkins.ics.uci.edu/job/asterix-integration-tests/lastSuccessfulBuild/org.apache.asterix$asterix-installer/artifact/org.apache.asterix/asterix-installer/0.9.4-SNAPSHOT/asterix-installer-0.9.4-SNAPSHOT-binary-assembly.zip" -STABLE_YARN_URL: "http://www.apache.org/dyn/closer.lua/asterixdb/asterixdb-0.9.3/asterix-yarn-0.9.3-binary-assembly.zip" -UNSTABLE_YARN_URL: "https://asterix-jenkins.ics.uci.edu/job/asterix-integration-tests/lastSuccessfulBuild/org.apache.asterix$asterix-yarn/artifact/org.apache.asterix/asterix-yarn/0.9.4-SNAPSHOT/asterix-yarn-0.9.4-SNAPSHOT-binary-assembly.zip" -STABLE_NCSERVICE_URL: "http://www.apache.org/dyn/closer.lua/asterixdb/asterixdb-0.9.3/asterix-server-0.9.3-binary-assembly.zip" -UNSTABLE_NCSERVICE_URL: "https://asterix-jenkins.ics.uci.edu/job/asterix-integration-tests/lastSuccessfulBuild/org.apache.asterix$asterix-server/artifact/org.apache.asterix/asterix-server/0.9.4-SNAPSHOT/asterix-server-0.9.4-SNAPSHOT-binary-assembly.zip" +STABLE_VERSION: 0.9.4 +UNSTABLE_VERSION: 0.9.5-SNAPSHOT +STABLE_NCSERVICE_URL: "http://www.apache.org/dyn/closer.lua/asterixdb/asterixdb-0.9.4/apache-asterixdb-0.9.4.zip" +UNSTABLE_NCSERVICE_URL: "https://asterix-jenkins.ics.uci.edu/job/asterix-integration-tests/lastSuccessfulBuild/org.apache.asterix$asterix-server/artifact/org.apache.asterix/asterix-server/0.9.5-SNAPSHOT/apache-asterixdb-0.9.5-SNAPSHOT.zip" DOCS_BASE_URL: "docs" UNSTABLE_DOCS_BASE_URL: "https://ci.apache.org/projects/asterixdb/" -ICS_DOWNLOAD_BASE_URL: "https://asterixdb.ics.uci.edu/download" # Build settings destination: content @@ -34,4 +29,3 @@ redcarpet: extensions: ["no_intra_emphasis", "fenced_code_blocks", "autolink", "tables", "with_toc_data", "strikethrough", "superscript", "lax_spacing"] - http://git-wip-us.apache.org/repos/asf/asterixdb-site/blob/d00eca89/content/about.html ---------------------------------------------------------------------- diff --git a/content/about.html b/content/about.html index ef54de6..dced001 100644 --- a/content/about.html +++ b/content/about.html @@ -53,10 +53,10 @@ <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Documentation<span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li class="dropdown-header">Stable release</li> - <li><a href="docs/0.9.3/index.html">Documentation for 0.9.3<i class="fa fa-external-link fa-sm"></i></a></li> + <li><a href="docs/0.9.4/index.html">Documentation for 0.9.4<i class="fa fa-external-link fa-sm"></i></a></li> <li class="divider"></li> <li class="dropdown-header">Snapshot release</li> - <li><a href="https://ci.apache.org/projects/asterixdb/index.html">Documentation for 0.9.4-SNAPSHOT <i class="fa fa-external-link fa-sm"></i></a></li> + <li><a href="https://ci.apache.org/projects/asterixdb/index.html">Documentation for 0.9.5-SNAPSHOT <i class="fa fa-external-link fa-sm"></i></a></li> </ul> </li> <li><a href="about.html">About</a></li> http://git-wip-us.apache.org/repos/asf/asterixdb-site/blob/d00eca89/content/community.html ---------------------------------------------------------------------- diff --git a/content/community.html b/content/community.html index ff4f133..5f79213 100644 --- a/content/community.html +++ b/content/community.html @@ -53,10 +53,10 @@ <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Documentation<span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li class="dropdown-header">Stable release</li> - <li><a href="docs/0.9.3/index.html">Documentation for 0.9.3<i class="fa fa-external-link fa-sm"></i></a></li> + <li><a href="docs/0.9.4/index.html">Documentation for 0.9.4<i class="fa fa-external-link fa-sm"></i></a></li> <li class="divider"></li> <li class="dropdown-header">Snapshot release</li> - <li><a href="https://ci.apache.org/projects/asterixdb/index.html">Documentation for 0.9.4-SNAPSHOT <i class="fa fa-external-link fa-sm"></i></a></li> + <li><a href="https://ci.apache.org/projects/asterixdb/index.html">Documentation for 0.9.5-SNAPSHOT <i class="fa fa-external-link fa-sm"></i></a></li> </ul> </li> <li><a href="about.html">About</a></li> http://git-wip-us.apache.org/repos/asf/asterixdb-site/blob/d00eca89/content/dev-setup.html ---------------------------------------------------------------------- diff --git a/content/dev-setup.html b/content/dev-setup.html index a203227..7b68e14 100644 --- a/content/dev-setup.html +++ b/content/dev-setup.html @@ -53,10 +53,10 @@ <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Documentation<span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li class="dropdown-header">Stable release</li> - <li><a href="docs/0.9.3/index.html">Documentation for 0.9.3<i class="fa fa-external-link fa-sm"></i></a></li> + <li><a href="docs/0.9.4/index.html">Documentation for 0.9.4<i class="fa fa-external-link fa-sm"></i></a></li> <li class="divider"></li> <li class="dropdown-header">Snapshot release</li> - <li><a href="https://ci.apache.org/projects/asterixdb/index.html">Documentation for 0.9.4-SNAPSHOT <i class="fa fa-external-link fa-sm"></i></a></li> + <li><a href="https://ci.apache.org/projects/asterixdb/index.html">Documentation for 0.9.5-SNAPSHOT <i class="fa fa-external-link fa-sm"></i></a></li> </ul> </li> <li><a href="about.html">About</a></li> @@ -112,8 +112,6 @@ <li><a href="#introduction" id="markdown-toc-introduction">Introduction</a></li> <li><a href="#master-snapshots" id="markdown-toc-master-snapshots">Master snapshots</a> <ul> <li><a href="#server-package" id="markdown-toc-server-package">Server Package</a></li> - <li><a href="#managix-installer" id="markdown-toc-managix-installer">Managix Installer</a></li> - <li><a href="#yarn-installer" id="markdown-toc-yarn-installer">YARN Installer</a></li> </ul> </li> <li><a href="#setting-up-an-asterix-development-environment" id="markdown-toc-setting-up-an-asterix-development-environment">Setting up an Asterix Development environment</a> <ul> @@ -148,13 +146,7 @@ A great way to start contributing is to pick a bug labelled starter in JIRA and <p>If you are a developer simply looking for a snapshot of the latest development version of AsterixDB to test out your application that is based on top of AsterixDB, snapshots from the latest successful push to our master branch are available below. These are non ASF-release, automatic builds.</p> <h3 id="server-package">Server Package</h3> -<p><a class="btn btn-md btn-warning" href="https://asterix-jenkins.ics.uci.edu/job/asterix-integration-tests/lastSuccessfulBuild/org.apache.asterix$asterix-server/artifact/org.apache.asterix/asterix-server/0.9.4-SNAPSHOT/asterix-server-0.9.4-SNAPSHOT-binary-assembly.zip" role="button">Download AsterixDB 0.9.4-SNAPSHOT <i class="fa fa-download fa-lg"></i> </a></p> - -<h3 id="managix-installer">Managix Installer</h3> -<p><a class="btn btn-md btn-warning" href="https://asterix-jenkins.ics.uci.edu/job/asterix-integration-tests/lastSuccessfulBuild/org.apache.asterix$asterix-installer/artifact/org.apache.asterix/asterix-installer/0.9.4-SNAPSHOT/asterix-installer-0.9.4-SNAPSHOT-binary-assembly.zip" role="button">Download AsterixDB 0.9.4-SNAPSHOT <i class="fa fa-download fa-lg"></i> </a></p> - -<h3 id="yarn-installer">YARN Installer</h3> -<p><a class="btn btn-md btn-warning" href="https://asterix-jenkins.ics.uci.edu/job/asterix-integration-tests/lastSuccessfulBuild/org.apache.asterix$asterix-yarn/artifact/org.apache.asterix/asterix-yarn/0.9.4-SNAPSHOT/asterix-yarn-0.9.4-SNAPSHOT-binary-assembly.zip" role="button">Download AsterixDB 0.9.4-SNAPSHOT <i class="fa fa-download fa-lg"></i> </a></p> +<p><a class="btn btn-md btn-warning" href="https://asterix-jenkins.ics.uci.edu/job/asterix-integration-tests/lastSuccessfulBuild/org.apache.asterix$asterix-server/artifact/org.apache.asterix/asterix-server/0.9.5-SNAPSHOT/apache-asterixdb-0.9.5-SNAPSHOT.zip" role="button">Download AsterixDB 0.9.5-SNAPSHOT <i class="fa fa-download fa-lg"></i> </a></p> <hr /> http://git-wip-us.apache.org/repos/asf/asterixdb-site/blob/d00eca89/content/docs/0.9.4/api.html ---------------------------------------------------------------------- diff --git a/content/docs/0.9.4/api.html b/content/docs/0.9.4/api.html new file mode 100644 index 0000000..f1d98be --- /dev/null +++ b/content/docs/0.9.4/api.html @@ -0,0 +1,312 @@ +<!DOCTYPE html> +<!-- + | Generated by Apache Maven Doxia Site Renderer 1.8.1 from src/site/markdown/api.md at 2018-10-02 + | Rendered using Apache Maven Fluido Skin 1.7 +--> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <meta name="Date-Revision-yyyymmdd" content="20181002" /> + <meta http-equiv="Content-Language" content="en" /> + <title>AsterixDB – HTTP API to AsterixDB</title> + <link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" /> + <link rel="stylesheet" href="./css/site.css" /> + <link rel="stylesheet" href="./css/print.css" media="print" /> + <script type="text/javascript" src="./js/apache-maven-fluido-1.7.min.js"></script> + + </head> + <body class="topBarDisabled"> + <div class="container-fluid"> + <div id="banner"> + <div class="pull-left"><a href="./" id="bannerLeft"><img src="images/asterixlogo.png" alt="AsterixDB"/></a></div> + <div class="pull-right"></div> + <div class="clear"><hr/></div> + </div> + + <div id="breadcrumbs"> + <ul class="breadcrumb"> + <li id="publishDate">Last Published: 2018-10-02</li> + <li id="projectVersion" class="pull-right">Version: 0.9.4</li> + <li class="pull-right"><a href="index.html" title="Documentation Home">Documentation Home</a></li> + </ul> + </div> + <div class="row-fluid"> + <div id="leftColumn" class="span2"> + <div class="well sidebar-nav"> + <ul class="nav nav-list"> + <li class="nav-header">Get Started - Installation</li> + <li><a href="ncservice.html" title="Option 1: using NCService"><span class="none"></span>Option 1: using NCService</a></li> + <li><a href="ansible.html" title="Option 2: using Ansible"><span class="none"></span>Option 2: using Ansible</a></li> + <li><a href="aws.html" title="Option 3: using Amazon Web Services"><span class="none"></span>Option 3: using Amazon Web Services</a></li> + <li class="nav-header">AsterixDB Primer</li> + <li><a href="sqlpp/primer-sqlpp.html" title="Option 1: using SQL++"><span class="none"></span>Option 1: using SQL++</a></li> + <li><a href="aql/primer.html" title="Option 2: using AQL"><span class="none"></span>Option 2: using AQL</a></li> + <li class="nav-header">Data Model</li> + <li><a href="datamodel.html" title="The Asterix Data Model"><span class="none"></span>The Asterix Data Model</a></li> + <li class="nav-header">Queries - SQL++</li> + <li><a href="sqlpp/manual.html" title="The SQL++ Query Language"><span class="none"></span>The SQL++ Query Language</a></li> + <li><a href="sqlpp/builtins.html" title="Builtin Functions"><span class="none"></span>Builtin Functions</a></li> + <li class="nav-header">Queries - AQL</li> + <li><a href="aql/manual.html" title="The Asterix Query Language (AQL)"><span class="none"></span>The Asterix Query Language (AQL)</a></li> + <li><a href="aql/builtins.html" title="Builtin Functions"><span class="none"></span>Builtin Functions</a></li> + <li class="nav-header">API/SDK</li> + <li class="active"><a href="#"><span class="none"></span>HTTP API</a></li> + <li><a href="csv.html" title="CSV Output"><span class="none"></span>CSV Output</a></li> + <li class="nav-header">Advanced Features</li> + <li><a href="aql/fulltext.html" title="Support of Full-text Queries"><span class="none"></span>Support of Full-text Queries</a></li> + <li><a href="aql/externaldata.html" title="Accessing External Data"><span class="none"></span>Accessing External Data</a></li> + <li><a href="feeds/tutorial.html" title="Support for Data Ingestion"><span class="none"></span>Support for Data Ingestion</a></li> + <li><a href="udf.html" title="User Defined Functions"><span class="none"></span>User Defined Functions</a></li> + <li><a href="aql/filters.html" title="Filter-Based LSM Index Acceleration"><span class="none"></span>Filter-Based LSM Index Acceleration</a></li> + <li><a href="aql/similarity.html" title="Support of Similarity Queries"><span class="none"></span>Support of Similarity Queries</a></li> +</ul> + <hr /> + <div id="poweredBy"> + <div class="clear"></div> + <div class="clear"></div> + <div class="clear"></div> + <div class="clear"></div> +<a href="./" title="AsterixDB" class="builtBy"><img class="builtBy" alt="AsterixDB" src="images/asterixlogo.png" /></a> + </div> + </div> + </div> + <div id="bodyColumn" class="span10" > +<!-- + ! Licensed to the Apache Software Foundation (ASF) under one + ! or more contributor license agreements. See the NOTICE file + ! distributed with this work for additional information + ! regarding copyright ownership. The ASF licenses this file + ! to you under the Apache License, Version 2.0 (the + ! "License"); you may not use this file except in compliance + ! with the License. You may obtain a copy of the License at + ! + ! http://www.apache.org/licenses/LICENSE-2.0 + ! + ! Unless required by applicable law or agreed to in writing, + ! software distributed under the License is distributed on an + ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ! KIND, either express or implied. See the License for the + ! specific language governing permissions and limitations + ! under the License. + !--> +<h1>HTTP API to AsterixDB</h1> +<div class="section"> +<h2><a name="Table_of_Contents"></a><a name="toc" id="toc">Table of Contents</a></h2> +<ul> + +<li><a href="#queryservice">Query Service API</a></li> +<li><a href="#querystatus">Query Status API</a></li> +<li><a href="#queryresult">Query Result API</a></li> +</ul></div> +<div class="section"> +<h2><a name="POST_.2Fquery.2Fservice_.5BBack_to_TOC.5D"></a><a name="queryservice" id="queryservice">POST /query/service</a><font size="4"> <a href="#toc">[Back to TOC]</a></font></h2> +<p><b>Description</b> Returns result for query as JSON. The response is a JSON object that contains some result metadata along with either an embedded result or an opaque handle that can be used to navigate to the result (see the decription of the <tt>mode</tt> parameter for more details).</p> +<p><b>Parameters</b></p> +<ul> + +<li><tt>statement</tt> - Specifies at least one valid SQL++ statement to run. The statements need to be urlencoded. Required.</li> +<li><tt>pretty</tt> - If the parameter <tt>pretty</tt> is given with the value <tt>true</tt>, the result will be indented. (Optional)</li> +<li><tt>client_context_id</tt> - A user-defined sequence of characters that the API receives and returns unchanged. This can be used e.g. to match individual requests, jobs, and responses. Another option could be to use it for groups of requests if an application decides to put e.g. an group identifier into that field to route groups of responses to a particular response processor.</li> +<li><tt>mode</tt> - Result delivery mode. Possible values are <tt>immediate</tt>, <tt>deferred</tt>, <tt>async</tt> (default: <tt>immediate</tt>). If the delivery mode is <tt>immediate</tt> the query result is returned with the response. If the delivery mode is <tt>deferred</tt> the response contains a handle to the <a href="#queryresult">result</a>. If the delivery mode is <tt>async</tt> the response contains a handle to the query’s <a href="#querystatus">status</a>.</li> +</ul> +<p><b>Command (immediate result delivery)</b></p> + +<div> +<div> +<pre class="source">$ curl -v --data-urlencode "statement=select 1;" \ + --data pretty=true \ + --data client_context_id=xyz \ + http://localhost:19002/query/service +</pre></div></div> + +<p><b>Sample response</b></p> + +<div> +<div> +<pre class="source">> POST /query/service HTTP/1.1 +> Host: localhost:19002 +> User-Agent: curl/7.43.0 +> Accept: */* +> Content-Length: 57 +> Content-Type: application/x-www-form-urlencoded +> +< HTTP/1.1 200 OK +< transfer-encoding: chunked +< connection: keep-alive +< content-type: application/json; charset=utf-8 +< +{ + "requestID": "5f72e78c-482a-45bf-b174-6443c8273025", + "clientContextID": "xyz", + "signature": "*", + "results": [ { + "$1" : 1 + } ] + , + "status": "success", + "metrics": { + "elapsedTime": "20.263371ms", + "executionTime": "19.889389ms", + "resultCount": 1, + "resultSize": 15 + } +} +</pre></div></div> + +<p><b>Command (<a name="deferred" id="deferred">deferred result delivery</a>)</b></p> + +<div> +<div> +<pre class="source">$ curl -v --data-urlencode "statement=select 1;" \ + --data mode=deferred \ + http://localhost:19002/query/service +</pre></div></div> + +<p><b>Sample response</b></p> + +<div> +<div> +<pre class="source">> POST /query/service HTTP/1.1 +> Host: localhost:19002 +> User-Agent: curl/7.43.0 +> Accept: */* +> Content-Length: 37 +> Content-Type: application/x-www-form-urlencoded +> +< HTTP/1.1 200 OK +< transfer-encoding: chunked +< connection: keep-alive +< content-type: application/json; charset=utf-8 +< +{ + "requestID": "6df7afb4-5f83-49b6-8c4b-f11ec84c4d7e", + "signature": "*", + "handle": "http://localhost:19002/query/service/result/7-0", + "status": "success", + "metrics": { + "elapsedTime": "12.270570ms", + "executionTime": "11.948343ms", + "resultCount": 0, + "resultSize": 0 + } +} +</pre></div></div> + +<p><b>Command (<a name="async" id="async>">async result delivery</a>)</b></p> + +<div> +<div> +<pre class="source">$ curl -v --data-urlencode "statement=select 1;" \ + --data mode=async \ + http://localhost:19002/query/service +</pre></div></div> + +<p><b>Sample response</b></p> + +<div> +<div> +<pre class="source">> POST /query/service HTTP/1.1 +> Host: localhost:19002 +> User-Agent: curl/7.43.0 +> Accept: */* +> Content-Length: 34 +> Content-Type: application/x-www-form-urlencoded +> +< HTTP/1.1 200 OK +< transfer-encoding: chunked +< connection: keep-alive +< content-type: application/json; charset=utf-8 +< +{ + "requestID": "c5858420-d821-4c0c-81a4-2364386827c2", + "signature": "*", + "status": "running", + "handle": "http://localhost:19002/query/service/status/9-0", + "metrics": { + "elapsedTime": "9.727006ms", + "executionTime": "9.402282ms", + "resultCount": 0, + "resultSize": 0 + } +} +</pre></div></div> +</div> +<div class="section"> +<h2><a name="GET_.2Fquery.2Fservice.2Fstatus_.5BBack_to_TOC.5D"></a><a name="querystatus" id="querystatus">GET /query/service/status</a><font size="4"> <a href="#toc">[Back to TOC]</a></font></h2> +<p><b>Description</b> Returns status of an <tt>async</tt> query request. The response is a JSON object that has a similar structure to the responses for the <a href="#queryservice">/query/service</a> endpoint. Possible status values for the status are <tt>running</tt>, <tt>success</tt>, <tt>timeout</tt>, <tt>failed</tt>, and <tt>fatal</tt>. If the status value is <tt>success</tt>, the response also contains a handle to the <a href="#queryresult">result</a>. URLs for this endpoint are usually not constructed by the application, they are simply extracted from the <tt>handle</tt> field of the response to a request to the <a href="#queryservice">/query/service</a> endpoint.</p> +<p><b>Command</b></p> +<p>This example shows a request/reponse for the (opaque) status handle that was returned by the <a href="#async">async result delivery</a> example.</p> + +<div> +<div> +<pre class="source">$ curl -v http://localhost:19002/query/service/status/9-0 +</pre></div></div> + +<p><b>Sample response</b></p> + +<div> +<div> +<pre class="source">> GET /query/service/status/9-0 HTTP/1.1 +> Host: localhost:19002 +> User-Agent: curl/7.43.0 +> Accept: */* +> +< HTTP/1.1 200 OK +< transfer-encoding: chunked +< connection: keep-alive +< content-type: application/json; charset=utf-8 +< +{ + "status": "success", + "handle": "http://localhost:19002/query/service/result/9-0" +} +</pre></div></div> +</div> +<div class="section"> +<h2><a name="GET_.2Fquery.2Fservice.2Fresult_.5BBack_to_TOC.5D"></a><a name="queryresult" id="queryresult">GET /query/service/result</a><font size="4"> <a href="#toc">[Back to TOC]</a></font></h2> +<p><b>Description</b> Returns result set for an <tt>async</tt> or <tt>deferred</tt> query request. The response is a plain result without a wrapping JSON object. URLs for this endpoint are usually not constructed by the application, they are simply extracted from the <tt>handle</tt> field of the response to a request to the <a href="#queryservice">/query/service</a> or the <a href="#querystatus">/query/service/status</a> endpoint.</p> +<p><b>Command</b></p> +<p>This example shows a request/reponse for the (opaque) result handle that was returned by the <a href="#deferred">deferred result delivery</a> example.</p> + +<div> +<div> +<pre class="source">$ curl -v http://localhost:19002/query/service/result/7-0 +</pre></div></div> + +<p><b>Sample response</b></p> + +<div> +<div> +<pre class="source">> GET /query/service/result/7-0 HTTP/1.1 +> Host: localhost:19002 +> User-Agent: curl/7.43.0 +> Accept: */* +> +< HTTP/1.1 200 OK +< transfer-encoding: chunked +< connection: keep-alive +< content-type: application/json +< +[ { "$1": 1 } + ] +</pre></div></div></div> + </div> + </div> + </div> + <hr/> + <footer> + <div class="container-fluid"> + <div class="row-fluid"> +<div class="row-fluid">Apache AsterixDB, AsterixDB, Apache, the Apache + feather logo, and the Apache AsterixDB project logo are either + registered trademarks or trademarks of The Apache Software + Foundation in the United States and other countries. + All other marks mentioned may be trademarks or registered + trademarks of their respective owners. + </div> + </div> + </div> + </footer> + </body> +</html> http://git-wip-us.apache.org/repos/asf/asterixdb-site/blob/d00eca89/content/docs/0.9.4/aql/externaldata.html ---------------------------------------------------------------------- diff --git a/content/docs/0.9.4/aql/externaldata.html b/content/docs/0.9.4/aql/externaldata.html new file mode 100644 index 0000000..6c06dc9 --- /dev/null +++ b/content/docs/0.9.4/aql/externaldata.html @@ -0,0 +1,577 @@ +<!DOCTYPE html> +<!-- + | Generated by Apache Maven Doxia Site Renderer 1.8.1 from src/site/markdown/aql/externaldata.md at 2018-10-02 + | Rendered using Apache Maven Fluido Skin 1.7 +--> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <meta name="Date-Revision-yyyymmdd" content="20181002" /> + <meta http-equiv="Content-Language" content="en" /> + <title>AsterixDB – Accessing External Data in AsterixDB</title> + <link rel="stylesheet" href="../css/apache-maven-fluido-1.7.min.css" /> + <link rel="stylesheet" href="../css/site.css" /> + <link rel="stylesheet" href="../css/print.css" media="print" /> + <script type="text/javascript" src="../js/apache-maven-fluido-1.7.min.js"></script> + + </head> + <body class="topBarDisabled"> + <div class="container-fluid"> + <div id="banner"> + <div class="pull-left"><a href=".././" id="bannerLeft"><img src="../images/asterixlogo.png" alt="AsterixDB"/></a></div> + <div class="pull-right"></div> + <div class="clear"><hr/></div> + </div> + + <div id="breadcrumbs"> + <ul class="breadcrumb"> + <li id="publishDate">Last Published: 2018-10-02</li> + <li id="projectVersion" class="pull-right">Version: 0.9.4</li> + <li class="pull-right"><a href="../index.html" title="Documentation Home">Documentation Home</a></li> + </ul> + </div> + <div class="row-fluid"> + <div id="leftColumn" class="span2"> + <div class="well sidebar-nav"> + <ul class="nav nav-list"> + <li class="nav-header">Get Started - Installation</li> + <li><a href="../ncservice.html" title="Option 1: using NCService"><span class="none"></span>Option 1: using NCService</a></li> + <li><a href="../ansible.html" title="Option 2: using Ansible"><span class="none"></span>Option 2: using Ansible</a></li> + <li><a href="../aws.html" title="Option 3: using Amazon Web Services"><span class="none"></span>Option 3: using Amazon Web Services</a></li> + <li class="nav-header">AsterixDB Primer</li> + <li><a href="../sqlpp/primer-sqlpp.html" title="Option 1: using SQL++"><span class="none"></span>Option 1: using SQL++</a></li> + <li><a href="../aql/primer.html" title="Option 2: using AQL"><span class="none"></span>Option 2: using AQL</a></li> + <li class="nav-header">Data Model</li> + <li><a href="../datamodel.html" title="The Asterix Data Model"><span class="none"></span>The Asterix Data Model</a></li> + <li class="nav-header">Queries - SQL++</li> + <li><a href="../sqlpp/manual.html" title="The SQL++ Query Language"><span class="none"></span>The SQL++ Query Language</a></li> + <li><a href="../sqlpp/builtins.html" title="Builtin Functions"><span class="none"></span>Builtin Functions</a></li> + <li class="nav-header">Queries - AQL</li> + <li><a href="../aql/manual.html" title="The Asterix Query Language (AQL)"><span class="none"></span>The Asterix Query Language (AQL)</a></li> + <li><a href="../aql/builtins.html" title="Builtin Functions"><span class="none"></span>Builtin Functions</a></li> + <li class="nav-header">API/SDK</li> + <li><a href="../api.html" title="HTTP API"><span class="none"></span>HTTP API</a></li> + <li><a href="../csv.html" title="CSV Output"><span class="none"></span>CSV Output</a></li> + <li class="nav-header">Advanced Features</li> + <li><a href="../aql/fulltext.html" title="Support of Full-text Queries"><span class="none"></span>Support of Full-text Queries</a></li> + <li class="active"><a href="#"><span class="none"></span>Accessing External Data</a></li> + <li><a href="../feeds/tutorial.html" title="Support for Data Ingestion"><span class="none"></span>Support for Data Ingestion</a></li> + <li><a href="../udf.html" title="User Defined Functions"><span class="none"></span>User Defined Functions</a></li> + <li><a href="../aql/filters.html" title="Filter-Based LSM Index Acceleration"><span class="none"></span>Filter-Based LSM Index Acceleration</a></li> + <li><a href="../aql/similarity.html" title="Support of Similarity Queries"><span class="none"></span>Support of Similarity Queries</a></li> +</ul> + <hr /> + <div id="poweredBy"> + <div class="clear"></div> + <div class="clear"></div> + <div class="clear"></div> + <div class="clear"></div> +<a href=".././" title="AsterixDB" class="builtBy"><img class="builtBy" alt="AsterixDB" src="../images/asterixlogo.png" /></a> + </div> + </div> + </div> + <div id="bodyColumn" class="span10" > +<!-- + ! Licensed to the Apache Software Foundation (ASF) under one + ! or more contributor license agreements. See the NOTICE file + ! distributed with this work for additional information + ! regarding copyright ownership. The ASF licenses this file + ! to you under the Apache License, Version 2.0 (the + ! "License"); you may not use this file except in compliance + ! with the License. You may obtain a copy of the License at + ! + ! http://www.apache.org/licenses/LICENSE-2.0 + ! + ! Unless required by applicable law or agreed to in writing, + ! software distributed under the License is distributed on an + ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ! KIND, either express or implied. See the License for the + ! specific language governing permissions and limitations + ! under the License. + !--> +<h1>Accessing External Data in AsterixDB</h1> +<div class="section"> +<h2><a name="Table_of_Contents"></a><a name="toc" id="toc">Table of Contents</a></h2> +<ul> + +<li><a href="#Introduction">Introduction</a></li> +<li><a href="#IntroductionAdapterForAnExternalDataset">Adapter for an External Dataset</a></li> +<li><a href="#BuiltinAdapters">Builtin Adapters</a></li> +<li><a href="#IntroductionCreatingAnExternalDataset">Creating an External Dataset</a></li> +<li><a href="#WritingQueriesAgainstAnExternalDataset">Writing Queries against an External Dataset</a></li> +<li><a href="#BuildingIndexesOverExternalDatasets">Building Indexes over External Datasets</a></li> +<li><a href="#ExternalDataSnapshot">External Data Snapshots</a></li> +<li><a href="#FAQ">Frequently Asked Questions</a></li> +</ul></div> +<div class="section"> +<h2><a name="Introduction_.5BBack_to_TOC.5D"></a><a name="Introduction" id="Introduction">Introduction</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2> +<p>Data that needs to be processed by AsterixDB could be residing outside AsterixDB storage. Examples include data files on a distributed file system such as HDFS or on the local file system of a machine that is part of an AsterixDB cluster. For AsterixDB to process such data, an end-user may create a regular dataset in AsterixDB (a.k.a. an internal dataset) and load the dataset with the data. AsterixDB also supports ‘‘external datasets’’ so that it is not necessary to “load” all data prior to using it. This also avoids creating multiple copies of data and the need to keep the copies in sync.</p> +<div class="section"> +<h3><a name="Adapter_for_an_External_Dataset_.5BBack_to_TOC.5D"></a><a name="IntroductionAdapterForAnExternalDataset" id="IntroductionAdapterForAnExternalDataset">Adapter for an External Dataset</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h3> +<p>External data is accessed using wrappers (adapters in AsterixDB) that abstract away the mechanism of connecting with an external service, receiving its data and transforming the data into ADM objects that are understood by AsterixDB. AsterixDB comes with built-in adapters for common storage systems such as HDFS or the local file system.</p></div> +<div class="section"> +<h3><a name="Builtin_Adapters_.5BBack_to_TOC.5D"></a><a name="BuiltinAdapters" id="BuiltinAdapters">Builtin Adapters</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h3> +<p>AsterixDB offers a set of builtin adapters that can be used to query external data or for loading data into an internal dataset using a load statement or a data feed. Each adapter requires specifying the <tt>format</tt> of the data in order to be able to parse objects correctly. Using adapters with feeds, the parameter <tt>output-type</tt> must also be specified.</p> +<p>Following is a listing of existing built-in adapters and their configuration parameters:</p> +<ol style="list-style-type: decimal"> + +<li><b><i>localfs</i></b>: used for reading data stored in a local filesystem in one or more of the node controllers +<ul> + +<li><tt>path</tt>: A fully qualified path of the form <tt>host://absolute_path</tt>. Comma separated list if there are multiple directories or files</li> +<li><tt>expression</tt>: A <a class="externalLink" href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html">regular expression</a> to match and filter against file names</li> +</ul> +</li> +<li><b><i>hdfs</i></b>: used for reading data stored in an HDFS instance +<ul> + +<li><tt>path</tt>: A fully qualified path of the form <tt>host://absolute_path</tt>. Comma separated list if there are multiple directories or files</li> +<li><tt>expression</tt>: A <a class="externalLink" href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html">regular expression</a> to match and filter against file names</li> +<li><tt>input-format</tt>: A fully qualified name or an alias for a class of HDFS input format</li> +<li><tt>hdfs</tt>: The HDFS name node URL</li> +</ul> +</li> +<li><b><i>socket</i></b>: used for listening to connections that sends data streams through one or more sockets +<ul> + +<li><tt>sockets</tt>: comma separated list of sockets to listen to</li> +<li><tt>address-type</tt>: either IP if the list uses IP addresses, or NC if the list uses NC names</li> +</ul> +</li> +<li><b><i>socket_client</i></b>: used for connecting to one or more sockets and reading data streams +<ul> + +<li><tt>sockets</tt>: comma separated list of sockets to connect to</li> +</ul> +</li> +<li><b><i>twitter_push</i></b>: used for establishing a connection and subscribing to a twitter feed +<ul> + +<li><tt>consumer.key</tt>: access parameter provided by twitter OAuth</li> +<li><tt>consumer.secret</tt>: access parameter provided by twitter OAuth</li> +<li><tt>access.token</tt>: access parameter provided by twitter OAuth</li> +<li><tt>access.token.secret</tt>: access parameter provided by twitter OAuth</li> +</ul> +</li> +<li><b><i>twitter_pull</i></b>: used for polling a twitter feed for tweets based on a configurable frequency +<ul> + +<li><tt>consumer.key</tt>: access parameter provided by twitter OAuth</li> +<li><tt>consumer.secret</tt>: access parameter provided by twitter OAuth</li> +<li><tt>access.token</tt>: access parameter provided by twitter OAuth</li> +<li><tt>access.token.secret</tt>: access parameter provided by twitter OAuth</li> +<li><tt>query</tt>: twitter query string</li> +<li><tt>interval</tt>: poll interval in seconds</li> +</ul> +</li> +<li><b><i>rss</i></b>: used for reading RSS feed +<ul> + +<li><tt>url</tt>: a comma separated list of RSS urls</li> +</ul> +</li> +</ol></div> +<div class="section"> +<h3><a name="Creating_an_External_Dataset_.5BBack_to_TOC.5D"></a><a name="IntroductionCreatingAnExternalDataset" id="IntroductionCreatingAnExternalDataset">Creating an External Dataset</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h3> +<p>As an example we consider the Lineitem dataset from the <a class="externalLink" href="http://www.openlinksw.com/dataspace/doc/dav/wiki/Main/VOSTPCHLinkedData/tpch.sql">TPCH schema</a>. We assume that you have successfully created an AsterixDB instance following the instructions at <a href="../install.html">Installing AsterixDB Using Managix</a>. <i>For constructing an example, we assume a single machine setup..</i></p> +<p>Similar to a regular dataset, an external dataset has an associated datatype. We shall first create the datatype associated with each object in Lineitem data. Paste the following in the query textbox on the webpage at <a class="externalLink" href="http://127.0.0.1:19001">http://127.0.0.1:19001</a> and hit ‘Execute’.</p> + +<div> +<div> +<pre class="source"> create dataverse ExternalFileDemo; + use dataverse ExternalFileDemo; + + create type LineitemType as closed { + l_orderkey:int32, + l_partkey: int32, + l_suppkey: int32, + l_linenumber: int32, + l_quantity: double, + l_extendedprice: double, + l_discount: double, + l_tax: double, + l_returnflag: string, + l_linestatus: string, + l_shipdate: string, + l_commitdate: string, + l_receiptdate: string, + l_shipinstruct: string, + l_shipmode: string, + l_comment: string} +</pre></div></div> + +<p>Here, we describe two scenarios.</p> +<div class="section"> +<h4><a name="a1.29_Data_file_resides_on_the_local_file_system_of_a_host"></a>1) Data file resides on the local file system of a host</h4> +<p>Prerequisite: The host is a part of the ASTERIX cluster.</p> +<p>Earlier, we assumed a single machine ASTERIX setup. To satisfy the prerequisite, log-in to the machine running ASTERIX.</p> +<ul> + +<li>Download the <a href="../data/lineitem.tbl">data file</a> to an appropriate location. We denote this location by SOURCE_PATH.</li> +</ul> +<p>ASTERIX provides a built-in adapter for data residing on the local file system. The adapter is referred by its alias- ‘localfs’. We create an external dataset named Lineitem and use the ‘localfs’ adapter.</p> + +<div> +<div> +<pre class="source"> create external dataset Lineitem(LineitemType) + using localfs +</pre></div></div> + +<p>Above, the definition is not complete as we need to provide a set of parameters that are specific to the source file.</p> + +<table border="0" class="table table-striped"> + +<tr class="a"> + +<td> Parameter </td> + +<td> Description </td> +</tr> + +<tr class="b"> + +<td> path </td> + +<td> A fully qualified path of the form <tt>host://<absolute path></tt>. + Use a comma separated list if there are multiple files. + E.g. <tt>host1://<absolute path></tt>, <tt>host2://<absolute path></tt> and so forth. </td> +</tr> + +<tr class="a"> + +<td> format </td> + +<td> The format for the content. Use 'adm' for data in ADM (ASTERIX Data Model) or <a class="externalLink" href="http://www.json.org/">JSON</a> format. Use 'delimited-text' if fields are separated by a delimiting character (eg., CSV). </td></tr> + +<tr class="b"> + +<td>delimiter</td> + +<td>The delimiting character in the source file if format is 'delimited text'</td> +</tr> +</table> + +<p>As we are using a single single machine ASTERIX instance, we use 127.0.0.1 as host in the path parameter. We <i>complete the create dataset statement</i> as follows.</p> + +<div> +<div> +<pre class="source"> use dataverse ExternalFileDemo; + + create external dataset Lineitem(LineitemType) + using localfs + (("path"="127.0.0.1://SOURCE_PATH"), + ("format"="delimited-text"), + ("delimiter"="|")); +</pre></div></div> + +<p>Please substitute SOURCE_PATH with the absolute path to the source file on the local file system.</p></div> +<div class="section"> +<h4><a name="Common_source_of_error"></a>Common source of error</h4> +<p>An incorrect value for the path parameter will give the following exception message when the dataset is used in a query.</p> + +<div> +<div> +<pre class="source"> org.apache.hyracks.algebricks.common.exceptions.AlgebricksException: org.apache.hyracks.api.exceptions.HyracksDataException: org.apache.hyracks.api.exceptions.HyracksDataException: Job failed. +</pre></div></div> + +<p>Verify the correctness of the path parameter provided to the localfs adapter. Note that the path parameter must be an absolute path to the data file. For e.g. if you saved your file in your home directory (assume it to be /home/joe), then the path value should be</p> + +<div> +<div> +<pre class="source"> 127.0.0.1:///home/joe/lineitem.tbl. +</pre></div></div> + +<p>In your web-browser, navigate to 127.0.0.1:19001 and paste the above to the query text box. Finally hit ‘Execute’.</p> +<p>Next we move over to the the section <a href="#Writing_Queries_against_an_External_Dataset">Writing Queries against an External Dataset</a> and try a sample query against the external dataset.</p></div> +<div class="section"> +<h4><a name="a2.29_Data_file_resides_on_an_HDFS_instance"></a>2) Data file resides on an HDFS instance</h4> +<p>rerequisite: It is required that the Namenode and HDFS Datanodes are reachable from the hosts that form the AsterixDB cluster. AsterixDB provides a built-in adapter for data residing on HDFS. The HDFS adapter can be referred (in AQL) by its alias - ‘hdfs’. We can create an external dataset named Lineitem and associate the HDFS adapter with it as follows;</p> + +<div> +<div> +<pre class="source"> create external dataset Lineitem(LineitemType) + using hdfs((“hdfs”:”hdfs://localhost:54310”),(“path”:”/asterix/Lineitem.tbl”),...,(“input- format”:”rc-format”)); +</pre></div></div> + +<p>The expected parameters are described below:</p> + +<table border="0" class="table table-striped"> + +<tr class="a"> + +<td> Parameter </td> + +<td> Description </td> +</tr> + +<tr class="b"> + +<td> hdfs </td> + +<td> The HDFS URL </td> +</tr> + +<tr class="a"> + +<td> path </td> + +<td> The absolute path to the source HDFS file or directory. Use a comma separated list if there are multiple files or directories. </td></tr> + +<tr class="b"> + +<td> input-format </td> + +<td> The associated input format. Use 'text-input-format' for text files , 'sequence-input-format' for hadoop sequence files, 'rc-input-format' for Hadoop Object Columnar files, or a fully qualified name of an implementation of org.apache.hadoop.mapred.InputFormat. </td> +</tr> + +<tr class="a"> + +<td> format </td> + +<td> The format of the input content. Use 'adm' for text data in ADM (ASTERIX Data Model) or <a class="externalLink" href="http://www.json.org/">JSON</a> format, 'delimited-text' for text delimited data that has fields separated by a delimiting character, 'binary' for other data.</td> +</tr> + +<tr class="b"> + +<td> delimiter </td> + +<td> The delimiting character in the source file if format is 'delimited text' </td> +</tr> + +<tr class="a"> + +<td> parser </td> + +<td> The parser used to parse HDFS objects if the format is 'binary'. Use 'hive- parser' for data deserialized by a Hive Serde (AsterixDB can understand deserialized Hive objects) or a fully qualified class name of user- implemented parser that implements the interface org.apache.asterix.external.input.InputParser. </td> +</tr> + +<tr class="b"> + +<td> hive-serde </td> + +<td> The Hive serde is used to deserialize HDFS objects if format is binary and the parser is hive-parser. Use a fully qualified name of a class implementation of org.apache.hadoop.hive.serde2.SerDe. </td> +</tr> + +<tr class="a"> + +<td> local-socket-path </td> + +<td> The UNIX domain socket path if local short-circuit reads are enabled in the HDFS instance</td> +</tr> +</table> + +<p><i>Difference between ‘input-format’ and ‘format’</i></p> +<p><i>input-format</i>: Files stored under HDFS have an associated storage format. For example, TextInputFormat represents plain text files. SequenceFileInputFormat indicates binary compressed files. RCFileInputFormat corresponds to objects stored in a object columnar fashion. The parameter ‘input-format’ is used to distinguish between these and other HDFS input formats.</p> +<p><i>format</i>: The parameter ‘format’ refers to the type of the data contained in the file. For example, data contained in a file could be in json or ADM format, could be in delimited-text with fields separated by a delimiting character or could be in binary format.</p> +<p>As an example. consider the <a href="../data/lineitem.tbl">data file</a>. The file is a text file with each line representing a object. The fields in each object are separated by the ‘|’ character.</p> +<p>We assume the HDFS URL to be <a class="externalLink" href="hdfs://localhost:54310">hdfs://localhost:54310</a>. We further assume that the example data file is copied to HDFS at a path denoted by “/asterix/Lineitem.tbl”.</p> +<p>The complete set of parameters for our example file are as follows. ((“hdfs”=“<a class="externalLink" href="hdfs://localhost:54310â,(âpathâ=â/asterix/Lineitem.tblâ),(âinput-formatâ=âtext-">hdfs://localhost:54310”,(“path”=“/asterix/Lineitem.tbl”),(“input-format”=“text-</a> input-format”),(“format”=“delimited-text”),(“delimiter”=“|”))</p></div> +<div class="section"> +<h4><a name="Using_the_Hive_Parser"></a>Using the Hive Parser</h4> +<p>if a user wants to create an external dataset that uses hive-parser to parse HDFS objects, it is important that the datatype associated with the dataset matches the actual data in the Hive table for the correct initialization of the Hive SerDe. Here is the conversion from the supported Hive data types to AsterixDB data types:</p> + +<table border="0" class="table table-striped"> + +<tr class="a"> + +<td> Hive </td> + +<td> AsterixDB </td> +</tr> + +<tr class="b"> + +<td>BOOLEAN</td> + +<td>Boolean</td> +</tr> + +<tr class="a"> + +<td>BYTE(TINY INT)</td> + +<td>Int8</td> +</tr> + +<tr class="b"> + +<td>DOUBLE</td> + +<td>Double</td> +</tr> + +<tr class="a"> + +<td>FLOAT</td> + +<td>Float</td> +</tr> + +<tr class="b"> + +<td>INT</td> + +<td>Int32</td> +</tr> + +<tr class="a"> + +<td>LONG(BIG INT)</td> + +<td>Int64</td> +</tr> + +<tr class="b"> + +<td>SHORT(SMALL INT)</td> + +<td>Int16</td> +</tr> + +<tr class="a"> + +<td>STRING</td> + +<td>String</td> +</tr> + +<tr class="b"> + +<td>TIMESTAMP</td> + +<td>Datetime</td> +</tr> + +<tr class="a"> + +<td>DATE</td> + +<td>Date</td> +</tr> + +<tr class="b"> + +<td>STRUCT</td> + +<td>Nested Object</td> +</tr> + +<tr class="a"> + +<td>LIST</td> + +<td>OrderedList or UnorderedList</td> +</tr> +</table> +</div> +<div class="section"> +<h4><a name="Examples_of_dataset_definitions_for_external_datasets"></a>Examples of dataset definitions for external datasets</h4> +<p><i>Example 1</i>: We can modify the create external dataset statement as follows:</p> + +<div> +<div> +<pre class="source"> create external dataset Lineitem('LineitemType) + using hdfs(("hdfs"="hdfs://localhost:54310"),("path"="/asterix/Lineitem.tbl"),("input-format"="text- input-format"),("format"="delimited-text"),("delimiter"="|")); +</pre></div></div> + +<p><i>Example 2</i>: Here, we create an external dataset of lineitem objects stored in sequence files that has content in ADM format:</p> + +<div> +<div> +<pre class="source"> create external dataset Lineitem('LineitemType) + using hdfs(("hdfs"="hdfs://localhost:54310"),("path"="/asterix/SequenceLineitem.tbl"),("input- format"="sequence-input-format"),("format"="adm")); +</pre></div></div> + +<p><i>Example 3</i>: Here, we create an external dataset of lineitem objects stored in object-columnar files that has content in binary format parsed using hive-parser with hive ColumnarSerde:</p> + +<div> +<div> +<pre class="source"> create external dataset Lineitem('LineitemType) + using hdfs(("hdfs"="hdfs://localhost:54310"),("path"="/asterix/RCLineitem.tbl"),("input-format"="rc-input-format"),("format"="binary"),("parser"="hive-parser"),("hive- serde"="org.apache.hadoop.hive.serde2.columnar.ColumnarSerde")); +</pre></div></div> +</div></div></div> +<div class="section"> +<h2><a name="Writing_Queries_against_an_External_Dataset_.5BBack_to_TOC.5D"></a><a name="WritingQueriesAgainstAnExternalDataset" id="WritingQueriesAgainstAnExternalDataset">Writing Queries against an External Dataset</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2> +<p>You may write AQL queries against an external dataset in exactly the same way that queries are written against internal datasets. The following is an example of an AQL query that applies a filter and returns an ordered result.</p> + +<div> +<div> +<pre class="source"> use dataverse ExternalFileDemo; + + for $c in dataset('Lineitem') + where $c.l_orderkey <= 3 + order by $c.l_orderkey, $c.l_linenumber + return $c +</pre></div></div> +</div> +<div class="section"> +<h2><a name="Building_Indexes_over_External_Datasets_.5BBack_to_TOC.5D"></a><a name="BuildingIndexesOverExternalDatasets" id="BuildingIndexesOverExternalDatasets">Building Indexes over External Datasets</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2> +<p>AsterixDB supports building B-Tree and R-Tree indexes over static data stored in the Hadoop Distributed File System. To create an index, first create an external dataset over the data as follows</p> + +<div> +<div> +<pre class="source"> create external dataset Lineitem(LineitemType) + using hdfs(("hdfs"="hdfs://localhost:54310"),("path"="/asterix/Lineitem.tbl"),("input-format"="text-input- format"),("format"="delimited-text"),("delimiter"="|")); +</pre></div></div> + +<p>You can then create a B-Tree index on this dataset instance as if the dataset was internally stored as follows:</p> + +<div> +<div> +<pre class="source"> create index PartkeyIdx on Lineitem(l_partkey); +</pre></div></div> + +<p>You could also create an R-Tree index as follows:</p> + +<div> +<div> +<pre class="source"> create index IndexName on DatasetName(attribute-name) type rtree; +</pre></div></div> + +<p>After building the indexes, the AsterixDB query compiler can use them to access the dataset and answer queries in a more cost effective manner. AsterixDB can read all HDFS input formats, but indexes over external datasets can currently be built only for HDFS datasets with ‘text-input-format’, ‘sequence-input-format’ or ‘rc-input-format’.</p></div> +<div class="section"> +<h2><a name="External_Data_Snapshots_.5BBack_to_TOC.5D"></a><a name="ExternalDataSnapshots" id="ExternalDataSnapshots">External Data Snapshots</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2> +<p>An external data snapshot represents the status of a dataset’s files in HDFS at a point in time. Upon creating the first index over an external dataset, AsterixDB captures and stores a snapshot of the dataset in HDFS. Only objects present at the snapshot capture time are indexed, and any additional indexes created afterwards will only contain data that was present at the snapshot capture time thus preserving consistency across all indexes of a dataset. To update all indexes of an external dataset and advance the snapshot time to be the present time, a user can use the refresh external dataset command as follows:</p> + +<div> +<div> +<pre class="source"> refresh external dataset DatasetName; +</pre></div></div> + +<p>After a refresh operation commits, all of the dataset’s indexes will reflect the status of the data as of the new snapshot capture time.</p></div> +<div class="section"> +<h2><a name="Frequently_Asked_Questions_.5BBack_to_TOC.5D"></a><a name="FAQ" id="FAQ">Frequently Asked Questions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2> +<p>Q. I added data to my dataset in HDFS, Will the dataset indexes in AsterixDB be updated automatically?</p> +<p>A. No, you must use the refresh external dataset statement to make the indexes aware of any changes in the dataset files in HDFS.</p> +<p>Q. Why doesn’t AsterixDB update external indexes automatically?</p> +<p>A. Since external data is managed by other users/systems with mechanisms that are system dependent, AsterixDB has no way of knowing exactly when data is added or deleted in HDFS, so the responsibility of refreshing indexes are left to the user. A user can use internal datasets for which AsterixDB manages the data and its indexes.</p> +<p>Q. I created an index over an external dataset and then added some data to my HDFS dataset. Will a query that uses the index return different results from a query that doesn’t use the index?</p> +<p>A. No, queries’ results are access path independent and the stored snapshot is used to determines which data are going to be included when processing queries.</p> +<p>Q. I created an index over an external dataset and then deleted some of my dataset’s files in HDFS, Will indexed data access still return the objects in deleted files?</p> +<p>A. No. When AsterixDB accesses external data, with or without the use of indexes, it only access files present in the file system at runtime.</p> +<p>Q. I submitted a refresh command on a an external dataset and a failure occurred, What has happened to my indexes?</p> +<p>A. External Indexes Refreshes are treated as a single transaction. In case of a failure, a rollback occurs and indexes are restored to their previous state. An error message with the cause of failure is returned to the user.</p> +<p>Q. I was trying to refresh an external dataset while some queries were accessing the data using index access method. Will the queries be affected by the refresh operation?</p> +<p>A. Queries have access to external dataset indexes state at the time where the queries are submitted. A query that was submitted before a refresh commits will only access data under the snapshot taken before the refresh; queries that are submitted after the refresh commits will access data under the snapshot taken after the refresh.</p> +<p>Q. What happens when I try to create an additional index while a refresh operation is in progress or vice versa?</p> +<p>A. The create index operation will wait until the refresh commits or aborts and then the index will be built according to the external data snapshot at the end of the refresh operation. Creating indexes and refreshing datasets are mutually exclusive operations and will not be run in parallel. Multiple indexes can be created in parallel, but not multiple refresh operations.</p></div> + </div> + </div> + </div> + <hr/> + <footer> + <div class="container-fluid"> + <div class="row-fluid"> +<div class="row-fluid">Apache AsterixDB, AsterixDB, Apache, the Apache + feather logo, and the Apache AsterixDB project logo are either + registered trademarks or trademarks of The Apache Software + Foundation in the United States and other countries. + All other marks mentioned may be trademarks or registered + trademarks of their respective owners. + </div> + </div> + </div> + </footer> + </body> +</html> http://git-wip-us.apache.org/repos/asf/asterixdb-site/blob/d00eca89/content/docs/0.9.4/aql/filters.html ---------------------------------------------------------------------- diff --git a/content/docs/0.9.4/aql/filters.html b/content/docs/0.9.4/aql/filters.html new file mode 100644 index 0000000..8c18a52 --- /dev/null +++ b/content/docs/0.9.4/aql/filters.html @@ -0,0 +1,142 @@ +<!DOCTYPE html> +<!-- + | Generated by Apache Maven Doxia Site Renderer 1.8.1 from src/site/markdown/aql/filters.md at 2018-10-02 + | Rendered using Apache Maven Fluido Skin 1.7 +--> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <meta name="Date-Revision-yyyymmdd" content="20181002" /> + <meta http-equiv="Content-Language" content="en" /> + <title>AsterixDB – Filter-Based LSM Index Acceleration</title> + <link rel="stylesheet" href="../css/apache-maven-fluido-1.7.min.css" /> + <link rel="stylesheet" href="../css/site.css" /> + <link rel="stylesheet" href="../css/print.css" media="print" /> + <script type="text/javascript" src="../js/apache-maven-fluido-1.7.min.js"></script> + + </head> + <body class="topBarDisabled"> + <div class="container-fluid"> + <div id="banner"> + <div class="pull-left"><a href=".././" id="bannerLeft"><img src="../images/asterixlogo.png" alt="AsterixDB"/></a></div> + <div class="pull-right"></div> + <div class="clear"><hr/></div> + </div> + + <div id="breadcrumbs"> + <ul class="breadcrumb"> + <li id="publishDate">Last Published: 2018-10-02</li> + <li id="projectVersion" class="pull-right">Version: 0.9.4</li> + <li class="pull-right"><a href="../index.html" title="Documentation Home">Documentation Home</a></li> + </ul> + </div> + <div class="row-fluid"> + <div id="leftColumn" class="span2"> + <div class="well sidebar-nav"> + <ul class="nav nav-list"> + <li class="nav-header">Get Started - Installation</li> + <li><a href="../ncservice.html" title="Option 1: using NCService"><span class="none"></span>Option 1: using NCService</a></li> + <li><a href="../ansible.html" title="Option 2: using Ansible"><span class="none"></span>Option 2: using Ansible</a></li> + <li><a href="../aws.html" title="Option 3: using Amazon Web Services"><span class="none"></span>Option 3: using Amazon Web Services</a></li> + <li class="nav-header">AsterixDB Primer</li> + <li><a href="../sqlpp/primer-sqlpp.html" title="Option 1: using SQL++"><span class="none"></span>Option 1: using SQL++</a></li> + <li><a href="../aql/primer.html" title="Option 2: using AQL"><span class="none"></span>Option 2: using AQL</a></li> + <li class="nav-header">Data Model</li> + <li><a href="../datamodel.html" title="The Asterix Data Model"><span class="none"></span>The Asterix Data Model</a></li> + <li class="nav-header">Queries - SQL++</li> + <li><a href="../sqlpp/manual.html" title="The SQL++ Query Language"><span class="none"></span>The SQL++ Query Language</a></li> + <li><a href="../sqlpp/builtins.html" title="Builtin Functions"><span class="none"></span>Builtin Functions</a></li> + <li class="nav-header">Queries - AQL</li> + <li><a href="../aql/manual.html" title="The Asterix Query Language (AQL)"><span class="none"></span>The Asterix Query Language (AQL)</a></li> + <li><a href="../aql/builtins.html" title="Builtin Functions"><span class="none"></span>Builtin Functions</a></li> + <li class="nav-header">API/SDK</li> + <li><a href="../api.html" title="HTTP API"><span class="none"></span>HTTP API</a></li> + <li><a href="../csv.html" title="CSV Output"><span class="none"></span>CSV Output</a></li> + <li class="nav-header">Advanced Features</li> + <li><a href="../aql/fulltext.html" title="Support of Full-text Queries"><span class="none"></span>Support of Full-text Queries</a></li> + <li><a href="../aql/externaldata.html" title="Accessing External Data"><span class="none"></span>Accessing External Data</a></li> + <li><a href="../feeds/tutorial.html" title="Support for Data Ingestion"><span class="none"></span>Support for Data Ingestion</a></li> + <li><a href="../udf.html" title="User Defined Functions"><span class="none"></span>User Defined Functions</a></li> + <li class="active"><a href="#"><span class="none"></span>Filter-Based LSM Index Acceleration</a></li> + <li><a href="../aql/similarity.html" title="Support of Similarity Queries"><span class="none"></span>Support of Similarity Queries</a></li> +</ul> + <hr /> + <div id="poweredBy"> + <div class="clear"></div> + <div class="clear"></div> + <div class="clear"></div> + <div class="clear"></div> +<a href=".././" title="AsterixDB" class="builtBy"><img class="builtBy" alt="AsterixDB" src="../images/asterixlogo.png" /></a> + </div> + </div> + </div> + <div id="bodyColumn" class="span10" > +<!-- + ! Licensed to the Apache Software Foundation (ASF) under one + ! or more contributor license agreements. See the NOTICE file + ! distributed with this work for additional information + ! regarding copyright ownership. The ASF licenses this file + ! to you under the Apache License, Version 2.0 (the + ! "License"); you may not use this file except in compliance + ! with the License. You may obtain a copy of the License at + ! + ! http://www.apache.org/licenses/LICENSE-2.0 + ! + ! Unless required by applicable law or agreed to in writing, + ! software distributed under the License is distributed on an + ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ! KIND, either express or implied. See the License for the + ! specific language governing permissions and limitations + ! under the License. + !--> +<h1>Filter-Based LSM Index Acceleration</h1> +<div class="section"> +<h2><a name="Table_of_Contents"></a><a name="toc" id="toc">Table of Contents</a></h2> +<ul> + +<li><a href="#Motivation">Motivation</a></li> +<li><a href="#FiltersInAsterixDB">Filters in AsterixDB</a></li> +<li><a href="#FiltersAndMergePolicies">Filters and Merge Policies</a></li> +</ul></div> +<div class="section"> +<h2><a name="Motivation_.5BBack_to_TOC.5D"></a><a name="Motivation" id="Motivation">Motivation</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2> +<p>Traditional relational databases usually employ conventional index structures such as B+ trees due to their low read latency. However, such traditional index structures use in-place writes to perform updates, resulting in costly random writes to disk. Today’s emerging applications often involve insert-intensive workloads for which the cost of random writes prohibits efficient ingestion of data. Consequently, popular NoSQL systems such as Cassandra, HBase, LevelDB, BigTable, etc. have adopted Log-Structured Merge (LSM) Trees as their storage structure. LSM-trees avoids the cost of random writes by batching updates into a component of the index that resides in main memory – an <i>in-memory component</i>. When the space occupancy of the in-memory component exceeds a specified threshold, its entries are <i>flushed</i> to disk forming a new component – a <i>disk component</i>. As disk components accumulate on disk, they are periodically merged together subject to a <i>merge policy</i> that decides when and what to merge. The benefit of the LSM-trees comes at the cost of possibly sacrificing read efficiency, but, it has been shown in previous studies that these inefficiencies can be mostly mitigated.</p> +<p>AsterixDB has also embraced LSM-trees, not just by using them as primary indexes, but also by using the same LSM-ification technique for all of its secondary index structures. In particular, AsterixDB adopted a generic framework for converting a class of indexes (that includes conventional B+ trees, R trees, and inverted indexes) into LSM-based secondary indexes, allowing higher data ingestion rates. In fact, for certain index structures, our results have shown that using an LSM-based version of an index can be made to significantly outperform its conventional counterpart for <i>both</i> ingestion and query speed (an example of such an index being the R-tree for spatial data).</p> +<p>Since an LSM-based index naturally partitions data into multiple disk components, it is possible, when answering certain queries, to exploit partitioning to only access some components and safely filter out the remaining components, thus reducing query times. For instance, referring to our <a href="primer.html#ADM:_Modeling_Semistructed_Data_in_AsterixDB">TinySocial</a> example, suppose a user always retrieves tweets from the <tt>TweetMessages</tt> dataset based on the <tt>send-time</tt> field (e.g., tweets posted in the last 24 hours). Since there is not a secondary index on the <tt>send-time</tt> field, the only available option for AsterixDB would be to scan the whole <tt>TweetMessages</tt> dataset and then apply the predicate as a post-processing step. However, if disk components of the primary index were tagged with the minimum and maximum timestamp values of the objects they contain, we could utilize the tagged information to directly access the primary index and prune comp onents that do not match the query predicate. Thus, we could save substantial cost by avoiding scanning the whole dataset and only access the relevant components. We simply call such tagging information that are associated with components, filters. (Note that even if there were a secondary index on <tt>send-time</tt> field, using filters could save substantial cost by avoiding accessing the secondary index, followed by probing the primary index for every fetched entry.) Moreover, the same filtering technique can also be used with any secondary LSM index (e.g., an LSM R-tree), in case the query contains multiple predicates (e.g., spatial and temporal predicates), to obtain similar pruning power.</p></div> +<div class="section"> +<h2><a name="Filters_in_AsterixDB_.5BBack_to_TOC.5D"></a><a name="FiltersInAsterixDB" id="FiltersInAsterixDB">Filters in AsterixDB</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2> +<p>We have added support for LSM-based filters to all of AsterixDB’s index types. To enable the use of filters, the user must specify the filter’s key when creating a dataset, as shown below:</p> +<div class="section"> +<div class="section"> +<h4><a name="Creating_a_Dataset_with_a_Filter"></a>Creating a Dataset with a Filter</h4> + +<div> +<div> +<pre class="source"> create dataset Tweets(TweetType) primary key tweetid with filter on send-time; +</pre></div></div> + +<p>Filters can be created on any totally ordered datatype (i.e., any field that can be indexed using a B+ -tree), such as integers, doubles, floats, UUIDs, datetimes, etc.</p> +<p>When a dataset with a filter is created, the name of the filter’s key field is persisted in the <tt>Metadata.Dataset</tt> dataset (which is the metadata dataset that stores the details of each dataset in an AsterixDB instance) so that DML operations against the dataset can recognize the existence of filters and can update them or utilize them accordingly. Creating a dataset with a filter in AsterixDB implies that the primary and all secondary indexes of that dataset will maintain filters on their disk components. Once a filtered dataset is created, the user can use the dataset normally (just like any other dataset). AsterixDB will automatically maintain the filters and will leverage them to efficiently answer queries whenever possible (i.e., when a query has predicates on the filter’s key).</p></div></div></div> +<div class="section"> +<h2><a name="Filters_and_Merge_Policies_.5BBack_to_TOC.5D"></a><a name="FiltersAndMergePolicies" id="FiltersAndMergePolicies">Filters and Merge Policies</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2> +<p>The AsterixDB default merge policy, the prefix merge policy, relies on component sizes and the number of components to decide which components to merge. This merge policy has proven to provide excellent performance for both ingestion and queries. However, when evaluating our filtering solution with the prefix policy, we observed a behavior that can reduce filter effectiveness. In particular, we noticed that under the prefix merge policy, the disk components of a secondary index tend to be constantly merged into a single component. This is because the prefix policy relies on a single size parameter for all of the indexes of a dataset. This parameter is typically chosen based on the sizes of the disk components of the primary index, which tend to be much larger than the sizes of the secondary indexes’ disk components. This difference caused the prefix merge policy to behave similarly to the constant merge policy (i.e., relatively poorly) when applied to secondary indexes in the sense that the secondary indexes are constantly merged into a single disk component. Consequently, the effectiveness of filters on secondary indexes was greatly reduced under the prefix-merge policy, but they were still effective when probing the primary index. Based on this behavior, we developed a new merge policy, an improved version of the prefix policy, called the correlated-prefix policy. The basic idea of this policy is that it delegates the decision of merging the disk components of all the indexes in a dataset to the primary index. When the policy decides that the primary index needs to be merged (using the same decision criteria as for the prefix policy), then it will issue successive merge requests to the I/O scheduler on behalf of all other indexes associated with the same dataset. The end result is that secondary indexes will always have the same number of disk components as their primary index under the correlated-prefix merge policy. This has improved query perfo rmance, since disk components of secondary indexes now have a much better chance of being pruned.</p></div> + </div> + </div> + </div> + <hr/> + <footer> + <div class="container-fluid"> + <div class="row-fluid"> +<div class="row-fluid">Apache AsterixDB, AsterixDB, Apache, the Apache + feather logo, and the Apache AsterixDB project logo are either + registered trademarks or trademarks of The Apache Software + Foundation in the United States and other countries. + All other marks mentioned may be trademarks or registered + trademarks of their respective owners. + </div> + </div> + </div> + </footer> + </body> +</html>