Author: rajeshbabu
Date: Wed Aug 6 03:54:07 2014
New Revision: 1616086
URL: http://svn.apache.org/r1616086
Log:
PHOENIX-1086 Document local indexes(Rajesh)
Modified:
phoenix/site/publish/language/index.html
phoenix/site/publish/secondary_indexing.html
phoenix/site/source/src/site/markdown/secondary_indexing.md
Modified: phoenix/site/publish/language/index.html
URL:
http://svn.apache.org/viewvc/phoenix/site/publish/language/index.html?rev=1616086&r1=1616085&r2=1616086&view=diff
==============================================================================
--- phoenix/site/publish/language/index.html (original)
+++ phoenix/site/publish/language/index.html Wed Aug 6 03:54:07 2014
@@ -650,7 +650,7 @@ ON <a href="index.html#table_ref">tableR
[<a href="index.html#options">indexOptions</a>] [ SPLIT ON ( <a
href="index.html#split_point">splitPoint</a> [,...] ) ]
</pre>
<div name="railroad">
-<table class="railroad"><tr class="railroad"><td class="d"><code
class="c">CREATE INDEX</code></td><td class="d"><table class="railroad"><tr
class="railroad"><td class="ts"></td><td class="d"> </td><td
class="te"></td></tr><tr class="railroad"><td class="ls"></td><td
class="d"><table class="railroad"><tr class="railroad"><td class="d"><code
class="c">IF NOT EXISTS</code></td></tr></table></td><td
class="le"></td></tr></table></td><td class="d"><code class="c"><a
href="index.html#name">indexName</a></code></td></tr></table><br /><table
class="railroad"><tr class="railroad"><td class="d"><code class="c">ON <a
href="index.html#table_ref">tableRef</a> ( <a
href="index.html#column_ref">columnRef</a></code></td><td class="d"><table
class="railroad"><tr class="railroad"><td class="ts"></td><td
class="d"> </td><td class="te"></td></tr><tr class="railroad"><td
class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td
class="ts"></td><td class="d"><code class="c
">ASC</code></td><td class="te"></td></tr><tr class="railroad"><td
class="ls"></td><td class="d"><code class="c">DESC</code></td><td
class="le"></td></tr></table></td><td class="le"></td></tr></table></td><td
class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td
class="d"> </td><td class="te"></td></tr><tr class="railroad"><td
class="ls"></td><td class="d"><code class="c">, ...</code></td><td
class="le"></td></tr></table></td><td class="d"><code
class="c">)</code></td></tr></table><br /><table class="railroad"><tr
class="railroad"><td class="ts"></td><td class="d"> </td><td
class="te"></td></tr><tr class="railroad"><td class="ls"></td><td
class="d"><table class="railroad"><tr class="railroad"><td class="d"><code
class="c">INCLUDE ( <a
href="index.html#column_ref">columnRef</a></code></td><td class="d"><table
class="railroad"><tr class="railroad"><td class="ts"></td><td
class="d"> </td><td class="te"></td></tr><tr class="railroad"><td class="ls
"></td><td class="d"><code class="c">, ...</code></td><td
class="le"></td></tr></table></td><td class="d"><code
class="c">)</code></td></tr></table></td><td class="le"></td></tr></table><br
/><table class="railroad"><tr class="railroad"><td class="d"><table
class="railroad"><tr class="railroad"><td class="ts"></td><td
class="d"> </td><td class="te"></td></tr><tr class="railroad"><td
class="ls"></td><td class="d"><code class="c"><a
href="index.html#options">indexOptions</a></code></td><td
class="le"></td></tr></table></td><td class="d"><table class="railroad"><tr
class="railroad"><td class="ts"></td><td class="d"> </td><td
class="te"></td></tr><tr class="railroad"><td class="ls"></td><td
class="d"><table class="railroad"><tr class="railroad"><td class="d"><code
class="c">SPLIT ON ( <a
href="index.html#split_point">splitPoint</a></code></td><td class="d"><table
class="railroad"><tr class="railroad"><td class="ts"></td><td
class="d"> </td><td class="te"></td></tr><tr cla
ss="railroad"><td class="ls"></td><td class="d"><code class="c">,
...</code></td><td class="le"></td></tr></table></td><td class="d"><code
class="c">)</code></td></tr></table></td><td
class="le"></td></tr></table></td></tr></table>
+<table class="railroad"><tr class="railroad"><td class="d"><code
class="c">CREATE INDEX</code></td><td class="d"><table class="railroad"><tr
class="railroad"><td class="ts"></td><td class="d"> </td><td
class="te"></td></tr><tr class="railroad"><td class="ls"></td><td
class="d"><table class="railroad"><tr class="railroad"><td class="d"><code
class="c">LOCAL</code></td></tr></table></td><td
class="le"></td></tr></table></td><td class="d"><table class="railroad"><tr
class="railroad"><td class="ts"></td><td class="d"> </td><td
class="te"></td></tr><tr class="railroad"><td class="ls"></td><td
class="d"><table class="railroad"><tr class="railroad"><td class="d"><code
class="c">IF NOT EXISTS</code></td></tr></table></td><td
class="le"></td></tr></table></td><td class="d"><code class="c"><a
href="index.html#name">indexName</a></code></td></tr></table><br /><table
class="railroad"><tr class="railroad"><td class="d"><code class="c">ON <a
href="index.html#table_ref">tableRef</a> ( <a
href="index.html#column_ref">columnRef</a></code></td><td class="d"><table
class="railroad"><tr class="railroad"><td class="ts"></td><td
class="d"> </td><td class="te"></td></tr><tr class="railroad"><td
class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td
class="ts"></td><td class="d"><code class="c">ASC</code></td><td
class="te"></td></tr><tr class="railroad"><td class="ls"></td><td
class="d"><code class="c">DESC</code></td><td
class="le"></td></tr></table></td><td class="le"></td></tr></table></td><td
class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td
class="d"> </td><td class="te"></td></tr><tr class="railroad"><td
class="ls"></td><td class="d"><code class="c">, ...</code></td><td
class="le"></td></tr></table></td><td class="d"><code
class="c">)</code></td></tr></table><br /><table class="railroad"><tr
class="railroad"><td class="ts"></td><td class="d"> </td><td
class="te"></td></tr><tr class="railroad"><td cla
ss="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td
class="d"><code class="c">INCLUDE ( <a
href="index.html#column_ref">columnRef</a></code></td><td class="d"><table
class="railroad"><tr class="railroad"><td class="ts"></td><td
class="d"> </td><td class="te"></td></tr><tr class="railroad"><td
class="ls"></td><td class="d"><code class="c">, ...</code></td><td
class="le"></td></tr></table></td><td class="d"><code
class="c">)</code></td></tr></table></td><td class="le"></td></tr></table><br
/><table class="railroad"><tr class="railroad"><td class="d"><table
class="railroad"><tr class="railroad"><td class="ts"></td><td
class="d"> </td><td class="te"></td></tr><tr class="railroad"><td
class="ls"></td><td class="d"><code class="c"><a
href="index.html#options">indexOptions</a></code></td><td
class="le"></td></tr></table></td><td class="d"><table class="railroad"><tr
class="railroad"><td class="ts"></td><td class="d"> </td><td
class="te"></td></tr><tr
class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr
class="railroad"><td class="d"><code class="c">SPLIT ON ( <a
href="index.html#split_point">splitPoint</a></code></td><td class="d"><table
class="railroad"><tr class="railroad"><td class="ts"></td><td
class="d"> </td><td class="te"></td></tr><tr class="railroad"><td
class="ls"></td><td class="d"><code class="c">, ...</code></td><td
class="le"></td></tr></table></td><td class="d"><code
class="c">)</code></td></tr></table></td><td
class="le"></td></tr></table></td></tr></table>
</div>
<!-- railroad-end -->
<!-- syntax-start
@@ -664,7 +664,7 @@ syntax-end -->
<p>Creates a new secondary index on a table or view. The index will be
automatically kept in sync with the table as the data changes. At query time,
the optimizer will use the index if it contains all columns referenced in the
query and produces the most efficient execution plan. If a table has rows that
are write-once and append-only, then the table may set the
<code>IMMUTABLE_ROWS</code> property to true (either up-front in the
<code>CREATE TABLE</code> statement or afterwards in an <code>ALTER
TABLE</code> statement). This reduces the overhead at write time to maintain
the index. Otherwise, if this property is not set on the table, then
incremental index maintenance will be performed on the server side when the
data changes.</p>
<p>Example:</p>
<p class="notranslate">
-CREATE INDEX my_idx ON sales.opportunity(last_updated_date DESC)<br />CREATE
INDEX my_idx ON log.event(created_date DESC) INCLUDE (name, payload)
SALT_BUCKETS=10<br />CREATE INDEX IF NOT EXISTS my_comp_idx ON server_metrics (
gc_time DESC, created_date DESC )<br
/> DATA_BLOCK_ENCODING='NONE',VERSIONS=?,MAX_FILESIZE=2000000
split on (?, ?, ?)</p>
+CREATE INDEX my_idx ON sales.opportunity(last_updated_date DESC)<br />CREATE
LOCAL INDEX my_idx ON sales.opportunity(last_updated_date DESC)<br />CREATE
INDEX my_idx ON log.event(created_date DESC) INCLUDE (name, payload)
SALT_BUCKETS=10<br />CREATE INDEX IF NOT EXISTS my_comp_idx ON server_metrics (
gc_time DESC, created_date DESC )<br
/> DATA_BLOCK_ENCODING='NONE',VERSIONS=?,MAX_FILESIZE=2000000
split on (?, ?, ?)</p>
<h3 id="drop_index" class="notranslate">DROP INDEX</h3>
<!-- railroad-start -->
Modified: phoenix/site/publish/secondary_indexing.html
URL:
http://svn.apache.org/viewvc/phoenix/site/publish/secondary_indexing.html?rev=1616086&r1=1616085&r2=1616086&view=diff
==============================================================================
--- phoenix/site/publish/secondary_indexing.html (original)
+++ phoenix/site/publish/secondary_indexing.html Wed Aug 6 03:54:07 2014
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
- Generated by Apache Maven Doxia at 2014-07-25
+ Generated by Apache Maven Doxia at 2014-08-05
Rendered using Reflow Maven Skin 1.1.0
(http://andriusvelykis.github.io/reflow-maven-skin)
-->
<html xml:lang="en" lang="en">
@@ -61,14 +61,14 @@
<li ><a
href="source.html" title="Source Repository">Source Repository</a></li>
<li ><a
href="issues.html" title="Issue Tracking">Issue Tracking</a></li>
<li ><a
href="download.html" title="Download">Download</a></li>
- <li
class="divider"/>
+ <li ><a
href="http:divider" title=""></a></li>
<li ><a
href="http://www.apache.org/licenses/" title="License"
class="externalLink">License</a></li>
<li ><a
href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship"
class="externalLink">Sponsorship</a></li>
<li ><a
href="http://www.apache.org/foundation/thanks.html" title="Thanks"
class="externalLink">Thanks</a></li>
<li ><a
href="http://www.apache.org/security/" title="Security"
class="externalLink">Security</a></li>
</ul>
</li>
- <li class="dropdown">
+ <li class="dropdown
active">
<a href="#"
class="dropdown-toggle" data-toggle="dropdown">Using <b class="caret"></b></a>
<ul
class="dropdown-menu">
<li ><a
href="faq.html" title="F.A.Q.">F.A.Q.</a></li>
@@ -76,7 +76,7 @@
<li ><a
href="building.html" title="Building">Building</a></li>
<li ><a
href="tuning.html" title="Tuning">Tuning</a></li>
<li ><a
href="upgrade_from_2_2.html" title="Upgrade from 2.2">Upgrade from 2.2</a></li>
- <li
class="divider"/>
+ <li ><a
href="http:divider" title=""></a></li>
<li
class="active"><a href="" title="Secondary Indexes">Secondary Indexes</a></li>
<li ><a
href="joins.html" title="Joins">Joins</a></li>
<li ><a
href="views.html" title="Views">Views</a></li>
@@ -88,7 +88,7 @@
<li ><a
href="dynamic_columns.html" title="Dynamic Columns">Dynamic Columns</a></li>
<li ><a
href="skip_scan.html" title="Skip Scan">Skip Scan</a></li>
<li ><a
href="bulk_dataload.html" title="Bulk Loading">Bulk Loading</a></li>
- <li
class="divider"/>
+ <li ><a
href="http:divider" title=""></a></li>
<li ><a
href="phoenix_on_emr.html" title="Amazon EMR Support">Amazon EMR
Support</a></li>
<li ><a
href="flume.html" title="Apache Flume Plugin">Apache Flume Plugin</a></li>
<li ><a
href="pig_integration.html" title="Apache Pig Integration">Apache Pig
Integration</a></li>
@@ -175,6 +175,34 @@
</pre>
</div>
<p>For the complete syntax, see our <a
href="language/index.html#create_index">Language Reference Guide</a>.</p>
+ <h1>Local(Region level) indexing</h1>
+ <p>Local indexing targets <i>write heavy</i>, <i>low latency</i> and <i>space
constraint</i> use cases. With local indexes index data and table data are
co-reside at same server so no network overhead during writes and reads. Local
indexes can be used even when the query isnât fully covered i.e. Phoenix
automatically retrieve the columns not in the index through point gets against
the data table. Unlike global indexes all local indexes data of a table are
stored in a separate shared table.</p>
+ <p>Reading data via the local index does however require to contact each
region until unless query contains equal/range condition(s) on leading primary
key column(s) of the data table.</p>
+</div>
+<div class="section">
+ <h2 id="Example">Example</h2>
+ <p>To use local indexing, just supply a <tt>LOCAL</tt> keyword when you
create index like this:</p>
+ <div class="source">
+ <pre>CREATE LOCAL INDEX my_index ON my_table (v1);
+</pre>
+ </div>
+ <p>For the complete syntax, see our <a
href="language/index.html#create_index">Language Reference Guide</a>.</p>
+ <div class="section">
+ <h3 id="Setup">Setup</h3>
+ <p>Local indexing requires special configurations in the master to ensure
data table and local index regions co-location.</p>
+ <p>You will need to add the following parameters to
<tt>hbase-site.xml</tt>:</p>
+ <div class="source">
+ <pre><property>
+ <name>hbase.master.loadbalancer.class</name>
+
<value>org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer</value>
+</property>
+<property>
+ <name>hbase.coprocessor.master.classes</name>
+
<value>org.apache.phoenix.hbase.index.master.IndexMasterObserver</value>
+</property>
+</pre>
+ </div>
+ </div>
</div>
<div class="section">
<h2 id="Data_Guarantees_and_Failure_Management">Data Guarantees and Failure
Management</h2>
Modified: phoenix/site/source/src/site/markdown/secondary_indexing.md
URL:
http://svn.apache.org/viewvc/phoenix/site/source/src/site/markdown/secondary_indexing.md?rev=1616086&r1=1616085&r2=1616086&view=diff
==============================================================================
--- phoenix/site/source/src/site/markdown/secondary_indexing.md (original)
+++ phoenix/site/source/src/site/markdown/secondary_indexing.md Wed Aug 6
03:54:07 2014
@@ -50,6 +50,36 @@ If you have an existing table that you'd
ALTER TABLE my_table SET IMMUTABLE_ROWS=false;
For the complete syntax, see our [Language Reference
Guide](language/index.html#create_index).
+# Local(Region level) indexing
+
+Local indexing targets _write heavy_, _low latency_ and _space constraint_ use
cases. With local indexes index data and table data are co-reside at same
server so no network overhead during writes and reads. Local indexes can be
used even when the query isn't fully covered i.e. Phoenix automatically
retrieve the columns not in the index through point gets against the data
table. Unlike global indexes all local indexes data of a table are stored in a
separate shared table.
+
+Reading data via the local index does however require to contact each region
until unless query contains equal/range condition(s) on leading primary key
column(s) of the data table.
+
+## Example
+
+To use local indexing, just supply a <code>LOCAL</code> keyword when you
create index like this:
+
+ CREATE LOCAL INDEX my_index ON my_table (v1);
+For the complete syntax, see our [Language Reference
Guide](language/index.html#create_index).
+
+### Setup
+
+Local indexing requires special configurations in the master to ensure data
table and local index regions co-location.
+
+You will need to add the following parameters to `hbase-site.xml`:
+
+```
+<property>
+ <name>hbase.master.loadbalancer.class</name>
+ <value>org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer</value>
+</property>
+<property>
+ <name>hbase.coprocessor.master.classes</name>
+ <value>org.apache.phoenix.hbase.index.master.IndexMasterObserver</value>
+</property>
+```
+
## Data Guarantees and Failure Management
On successful return to the client, all data is guaranteed to be written to
all interested indexes and the primary table. For each individual data row,
updates are an all-or-nothing, with a small gap of being behind. From the
perspective of a single client, it either thinks all-or-none of the update
worked.