You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by br...@apache.org on 2015/09/16 01:24:21 UTC

[4/5] drill git commit: Daniel's changes

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/configure-drill/078-configuring-web-ui-and-rest-api-security.md
----------------------------------------------------------------------
diff --git a/_docs/configure-drill/078-configuring-web-ui-and-rest-api-security.md b/_docs/configure-drill/078-configuring-web-ui-and-rest-api-security.md
new file mode 100644
index 0000000..817e650
--- /dev/null
+++ b/_docs/configure-drill/078-configuring-web-ui-and-rest-api-security.md
@@ -0,0 +1,121 @@
+---
+title: "Configuring Web UI and REST API Security"
+parent: "Configure Drill"
+---
+Drill 1.2 extends [Drill user authentication]({{site.baseurl}}/docs/configuring-user-authentication/) to the Web UI and underlying REST API. As administrator, you can control the extent of access to the Web UI and REST API client applications. For example,
+you can limit the access of certain users to Web UI functionality, such as viewing the in-progress or completed queries of other users. You can limit users from viewing other users' query profiles, who can cancel queries of other users, and other functionality.
+
+With Web UI security in place, users who do not have administrator privileges need to use the SHOW SCHEMAS command instead of the Web UI for storage plugin configuration information.
+
+## HTTPS Support
+Drill 1.2 uses the Linux Pluggable Authentication Module (PAM) and code-level support for transport layer security (TLS) to secure the Web UI and REST API. By default, the Web UI and REST API now support the HTTPS protocol.
+
+By default, Drill generates a self-signed certificate that works with SSL for HTTPS access to the Web UI; however, as administrator, you can set up SSL to specify the keystore or truststore, or both, for your organization, as described in the next section.
+
+## Setting Up a Custom SSL Configuration
+
+As cluster administrator, you can set the following SSL configuration parameters at the JVM level through system properties, as described in the [Java product documentation](http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#Customization):
+
+* javax.net.ssl.keyStore  
+  Path to the application's certificate and private key in the Java keystore file.  
+* javax.net.ssl.keyStorePassword  
+  Password for accessing the private key from the keystore file.  
+* javax.net.ssl.trustStore  
+  Path to the trusted CA certificates in a keystore file.  
+* javax.net.ssl.trustStorePassword  
+  Password for accessing the trusted keystore file.
+
+## Prerequisites for Web UI and REST API Security
+
+You need to perform the following configuration tasks using Web UI and REST API security.  
+
+* [User Authentication]({{site.baseurl}}/docs/configuring-user-authentication/)  
+* Set up Web UI administrators  
+  Optionally, you can set up Web UI administrator-user groups to facilitate management of multiple Web UI administrators.
+
+## Setting up Web UI Administrators and Administrator-User Groups
+
+Configure the following system options using the [ALTER SYSTEM]({{site.baseurl}}/docs/alter-system/) command:
+
+* security.admin.users  
+  Set the value of this option to a comma-separated list of user names who you want to give administrator privileges, such as changing system options.  
+* security.admin.user_groups  
+  Set the value of this option to a comma-separated list of administrators.
+
+Any user for whom you have configured Drill user authentication, but not set up as a Web UI administrator, has only user privileges to access the Web UI and REST API client applications.
+
+## Web UI and REST API Privileges
+
+The following table and subsections describe the privilege levels for accessing the REST API methods and corresponding Web UI functions:
+
+* Administrator (ADMIN)  
+* User (USER)  
+* Administrator and User (ALL) 
+
+| Resource Method          | Path                         | Request Type | Output Type      | Functionality                                                                                                                                                                                                                                               | Privilege Level                                                                                               |
+|--------------------------|------------------------------|--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
+| getStats                 | /                            | GET          | text/html        | Returns Drillbit stats in a table in HTML format.                                                                                                                                                                                                           | ALL                                                                                                           |
+| getStatsJSON             | /stats.json                  | GET          | application/json | Returns Drillbit stats such as ports and max direct memory in json format.                                                                                                                                                                                  | ALL                                                                                                           |
+| getStatus                | /status                      | GET          | text/html        | Returns Running!                                                                                                                                                                                                                                            | ALL                                                                                                           |
+| getSystemOptionsJSON     | /options.json                | GET          | application/json | Returns list of options. Each option consists of name-value-type-kind (for example: (boot system datatype).                                                                                                                                                 | ALL                                                                                                           |
+| getSystemOptions         | /options                     | GET          | text/html        | Returns a HTML table where each row is a form containing the option details that allows option values to be modified.                                                                                                                                       | ALL                                                                                                           |
+| updateSystemOption       | /option/{optionName}         | POST         | text/html        | Updates the options and calls getSystemOptions. So again an option list is displayed.                                                                                                                                                                       | ADMIN                                                                                                         |
+| getStoragePluginsJSON    | /storage.json                | GET          | application/json | Returns a list of storage plugin wrappers each containing name-config (instance of StoragePluginConfig) and enabled.                                                                                                                                        | ADMIN                                                                                                         |
+| getStoragePlugins        | /storage                     | GET          | text/html        | Returns an HTML page with two sections: The first section contains a table of rows that are forms containing the plugin button for the update page and a button to disable the plugin. The second section is the same except the button enables the plugin. | ADMIN                                                                                                         |
+| getStoragePluginJSON     | /storage/{name}.json         | GET          | application/json | Returns a plugin config wrapper for the requested web page.                                                                                                                                                                                                 | ADMIN                                                                                                         |
+| getStoragePlugin         | /storage/{name}              | GET          | text/html        | Returns an HTML page that has an editable text box for configuration changes and buttons for creating/updating/deleting. Each button makes calls that regenerate the page.                                                                                  | ADMIN                                                                                                         |
+| enablePlugin             | /storage/{name}/enable/{val} | GET          | application/json | Updates the storage plugin configuration status. Returns success or failure.                                                                                                                                                                                | ADMIN                                                                                                         |
+| deletePluginJSON         | /storage/{name}.json         | DELETE       | application/json | Deletes the storage plugin. Returns success or failure.                                                                                                                                                                                                     | ADMIN                                                                                                         |
+| deletePlugin             | /storage/{name}/delete       | GET          | application/json | Same as deletePluginJSON but a GET instead of a DELETE request.                                                                                                                                                                                             | ADMIN                                                                                                         |
+| createOrUpdatePluginJSON | /storage/{name}.json         | POST         | application/json | Creates or updates the storage plugin configuration. Returns success or failure. Expects JSON input.                                                                                                                                                        | ADMIN                                                                                                         |
+| createOrUpdatePlugin     | /storage/{name}              | POST         | application/json | Same as createOrUpdatePluginJSON expects JSON or FORM input.                                                                                                                                                                                                | ADMIN                                                                                                         |
+| getProfilesJSON          | /profiles.json               | GET          | application/json | Returns currently running and completed profiles from PStore. For each profile a queryId, startTime, foremanAddress, query, user, and state is returned. Each list (running and completed) is organized in reverse chronological order.                     | [ADMIN, USER]({{site.baseurl}}/docs/configuring-web-ui-and-rest-api-security/#get-/profiles.json)             |
+| getProfiles              | /profiles                    | GET          | text/html        | Generates an HTML page from the data returned by getProfilesJSON with a hyperlink to a detailed query page,                                                                                                                                                 | [ADMIN, USER]({{site.baseurl}}/docs/configuring-web-ui-and-rest-api-security/#get-/profiles)                  |
+| getProfileJSON           | /profiles/{queryid}.json     | GET          | application/json | Returns the entire profile in JSON.                                                                                                                                                                                                                         | [ADMIN, USER]({{site.baseurl}}/docs/configuring-web-ui-and-rest-api-security/#get-/profiles/{queryid}.json)   |
+| getProfile               | /profiles/{queryid}          | GET          | text/html        | Returns a complicated profile page.                                                                                                                                                                                                                         | [ADMIN, USER]({{site.baseurl}}/docs/configuring-web-ui-and-rest-api-security/#get-/profiles/{queryid})        |
+| cancelQuery              | /profiles/cancel/{queryid}   | GET          | text/html        | Cancels the given query and sends a message.                                                                                                                                                                                                                | [ADMIN, USER]({{site.baseurl}}/docs/configuring-web-ui-and-rest-api-security/#get-/profiles/cancel/{queryid}) |
+| getQuery                 | /query                       | GET          | text/html        | Gets the query input page.                                                                                                                                                                                                                                  | ALL                                                                                                           |
+| submitQueryJSON          | /query.json                  | POST         | application/json | Submits a query and waits until it is completed and then returns the results as one big JSON object.                                                                                                                                                        | ALL                                                                                                           |
+| submitQuery              | /query                       | POST         | text/html        | Returns results from submitQueryJSON populated in a HTML table.                                                                                                                                                                                             | ALL                                                                                                           |
+| getMetrics               | /metrics                     | GET          | text/html        | Returns a page that fetches metric info from resource, status, and metrics.                                                                                                                                                                                 | ALL                                                                                                           |
+| getMetrics               | /threads                     | GET          | text/html        | Returns a page that fetches metric information from resource, status, and threads.                                                                                                                                                                          | ALL                                                                                                           |
+### GET /profiles.json
+
+* ADMIN - gets all profiles on the system.  
+* USER - only the profiles of the queries the user has launched.
+
+### GET /profiles
+
+* ADMIN - gets all profiles on the system.  
+* USER - only the profiles of the queries the user has launched.
+
+### GET /profiles/{queryid}.json
+
+* ADMIN - return the profile.  
+* USER - if the query is launched the by the requesting user return it. Otherwise, return an error saying no such profile exists.
+
+### GET /profiles/{queryid}
+
+* ADMIN - return the profile.   
+* USER - if the query is launched the by the requesting user return it. Otherwise, return an error saying no such profile exists
+
+### GET /profiles/cancel/{queryid}
+
+* ADMIN - can cancel the query.  
+* USER - cancel the query only if the query is launched by the user requesting the cancellation.
+
+## Starting the Web UI Using Authentication
+
+The following example shows the sequence of steps you typically perform to access the Web UI when authentication is enabled on a Drill cluster.
+
+1. Set the JVM library path to the location of the PAM `.so` file.  
+   `export DRILLBIT_JAVA_OPTS=" -Djava.library.path=/root/ "`  
+2. Restart the Drillbit.  
+   `[root@centos64-30143 apache-drill-1.2.0-SNAPSHOT]# ./bin/drillbit.sh restart`  
+3. Start the Drill Shell, using  a user name and password.  
+   `bin/sqlline -u "jdbc:drill:zk=10.10.30.146:5181" -n joeadmin -p mypwd`  
+4. Open a browser, and go to `https://<IP address>:8047`, where IP address is the host name or IP address of one of the installed Drillbits in a distributed system.  
+   The login screen appears:  
+
+   ![Web UI Login]({{ site.baseurl }}/docs/img/web-ui-login.png)
+5. [Start the Web UI]({{ site.baseurl }}/docs/starting-the-web-ui/).
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/connect-a-data-source/020-storage-plugin-registration.md
----------------------------------------------------------------------
diff --git a/_docs/connect-a-data-source/020-storage-plugin-registration.md b/_docs/connect-a-data-source/020-storage-plugin-registration.md
index 831f18d..a28e6bb 100644
--- a/_docs/connect-a-data-source/020-storage-plugin-registration.md
+++ b/_docs/connect-a-data-source/020-storage-plugin-registration.md
@@ -2,14 +2,12 @@
 title: "Storage Plugin Registration"
 parent: "Connect a Data Source"
 ---
-You connect Drill to a file system, Hive, HBase, or other data source through a storage plugin. On the Storage tab of the Web UI, you can view and reconfigure a storage plugin. You can create a new name for the reconfigured version, thereby registering the new version. To open the Storage tab, go to `http://<IP address>:8047/storage`, where IP address is the host name or IP address of one of the installed Drillbits in a distributed system or `localhost` in an embedded system:
-
-![drill-installed plugins]({{ site.baseurl }}/docs/img/plugin-default.png)
+You connect Drill to a file system, Hive, HBase, or other data source through a storage plugin. On the Storage tab of the Drill Web UI, you can view and reconfigure a storage plugin if you are [authorized]({{site.baseurl}}/docs/configuring-web-ui-and-rest-api-security/) to do so. Go to `https://<IP address>:8047/storage`, where IP address is the host name or IP address of one of the installed Drillbits in a distributed system or `localhost` in an embedded system. In Drill 1.1 and earlier, go to `http://<IP address>:8047/storage` to view and configure a storage plugin.
 
 The Drill installation registers the `cp`, `dfs`, `hbase`, `hive`, and `mongo` default storage plugin configurations.
 
 * `cp`  
-  Points to a JAR file in the Drill classpath that contains the Transaction Processing Performance Council (TPC) benchmark schema TPC-H that you can query. 
+  Points to JAR files in the Drill classpath, such as [`employee.json`]({{site.baseurl}}/docs/querying-json-files/) that you can query. 
 * `dfs`  
   Points to the local file system, but you can configure this storage plugin to
 point to any distributed file system, such as a Hadoop or S3 file system. 
@@ -22,7 +20,15 @@ point to any distributed file system, such as a Hadoop or S3 file system.
 
 In the [Drill sandbox]({{site.baseurl}}/docs/about-the-mapr-sandbox/), the `dfs` storage plugin configuration connects you to a Hadoop environment pre-configured with Drill. If you install Drill, `dfs` connects you to the root of your file system.
 
+## Registering a Storage Plugin Configuration
+
+To register a new storage plugin configuration, enter a storage name, click **CREATE**, provide a configuration in JSON format, and click **UPDATE**. In Drill 1.2 and later, updating a storage plugin configuration and other storage plugin tasks require [authorization]({{site.baseurl}}/docs/configuring-web-ui-and-rest-api-security/) if security is enabled.
+
 ## Storage Plugin Configuration Persistance
 
-Drill saves storage plugin configurations in a temporary directory (embedded mode) or in ZooKeeper (distributed mode). The storage plugin configuration persists after upgrading, so a configuration that you created in one version of Drill appears in the Drill Web UI of an upgraded version of Drill. For example, on Mac OS X, Drill uses `/tmp/drill/sys.storage_plugins` to store storage plugin configurations. To revert to the default storage plugins for a particular version, in embedded mode, delete the contents of this directory and restart the Drill shell.
+Drill saves storage plugin configurations in a temporary directory (embedded mode) or in ZooKeeper (distributed mode). For example, on Mac OS X, Drill uses `/tmp/drill/sys.storage_plugins` to store storage plugin configurations. Enabling authorization to protect this data through the Web UI and REST API does not include protection for the data in the tmp directory or in ZooKeeper. 
+
+<!-- See Drill-3780 -->
+
+The storage plugin configuration persists after upgrading, so authorized users can see a configuration that you created in one version of Drill in the Drill Web UI of an upgraded version of Drill. To revert to the default storage plugins for a particular version, in embedded mode, delete the contents of this directory and restart the Drill shell.
 

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/connect-a-data-source/035-plugin-configuration-basics.md
----------------------------------------------------------------------
diff --git a/_docs/connect-a-data-source/035-plugin-configuration-basics.md b/_docs/connect-a-data-source/035-plugin-configuration-basics.md
index 2aa1f9f..2e7095b 100644
--- a/_docs/connect-a-data-source/035-plugin-configuration-basics.md
+++ b/_docs/connect-a-data-source/035-plugin-configuration-basics.md
@@ -9,7 +9,7 @@ restart any of the Drillbits when you add or update a storage plugin configurati
 
 ## Using the Drill Web UI
 
-Use the Drill Web UI to update or add a new storage plugin configuration. The Drill shell needs to be running to access the Drill Web UI. To open the Drill Web UI, launch a web browser, and go to: `http://<IP address or host name>:8047` of any Drillbit in the cluster. Select the Storage tab to view, update, or add a new storage plugin configuration. 
+Assuming you are [authorized]({{site.baseurl}}/docs/configuring-web-ui-and-rest-api-security/), you can use the Drill Web UI to update or add a new storage plugin configuration. The Drill shell needs to be running to access the Drill Web UI. In Drill 1.2 and later, to open the Drill Web UI, launch a web browser, and go to: `https://<IP address or host name>:8047` of any Drillbit in the cluster. In Drill 1.1 and earlier, use `http` instead of `https`. Select the Storage tab to view, update, or add a new storage plugin configuration. 
 
 To create a name and new configuration:
 
@@ -144,7 +144,7 @@ For example, using uppercase letters in the query after defining the storage plu
 
 ## Storage Plugin REST API
 
-If you need to add a storage plugin configuration to Drill and do not want to use a web browser, Drill provides a REST API that you can use to create a storage plugin configuration. Use an HTTP POST and pass two properties:
+If you need to add a storage plugin configuration to Drill and do not want to use a web browser, Drill provides a REST API that you can use to create a storage plugin configuration. Use a POST and pass two properties:
 
 * name  
   The storage plugin configuration name. 
@@ -154,7 +154,7 @@ If you need to add a storage plugin configuration to Drill and do not want to us
 
 For example, this command creates a storage plugin named myplugin for reading files of an unknown type located on the root of the file system:
 
-    curl -X POST -/json" -d '{"name":"myplugin", "config": {"type": "file", "enabled": false, "connection": "file:///", "workspaces": { "root": { "location": "/", "writable": false, "defaultInputFormat": null}}, "formats": null}}' http://localhost:8047/storage/myplugin.json
+    curl -X POST -/json" -d '{"name":"myplugin", "config": {"type": "file", "enabled": false, "connection": "file:///", "workspaces": { "root": { "location": "/", "writable": false, "defaultInputFormat": null}}, "formats": null}}' https://localhost:8047/storage/myplugin.json
 
 ## Bootstrapping a Storage Plugin
 

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/develop-custom-functions/025-tutorial-develop-a-simple-function.md
----------------------------------------------------------------------
diff --git a/_docs/develop-custom-functions/025-tutorial-develop-a-simple-function.md b/_docs/develop-custom-functions/025-tutorial-develop-a-simple-function.md
index 8b89e75..d754413 100644
--- a/_docs/develop-custom-functions/025-tutorial-develop-a-simple-function.md
+++ b/_docs/develop-custom-functions/025-tutorial-develop-a-simple-function.md
@@ -170,8 +170,8 @@ Even to a seasoned Java developer, the eval() method might look a bit strange be
 ## Basic Coding Rules
 To leverage Java’s just-in-time (JIT) compiler for maximum speed, you need to adhere to some basic rules.
 
-* Do not use imports. Instead, use the fully qualified class name as required by the Google Guava API packaged in Apache Drill and as shown in ["Step 3: Declare input parameters"]({{site.baseurl}}/docs/tutorial-develop-a-simple-function/#step-3-declare-input-parameters).  
-* Manipulate the ValueHolders classes, for example VarCharHolder and IntHolder, as structs by calling helper methods, such as getStringFromVarCharHolder and toStringFromUTF8 as shown in ["Step 5: Implement the eval() function"]({{site.baseurl}}/docs/tutorial-develop-a-simple-function/#step-5-implement-the-eval-function).  
+* Do not use imports. Instead, use the fully qualified class name as required by the Google Guava API packaged in Apache Drill and as shown in ["Step 3: Declare input parameters"]({{site.baseurl}}/docs/tutorial-develop-a-simple-function/#step-3:-declare-input-parameters).  
+* Manipulate the ValueHolders classes, for example VarCharHolder and IntHolder, as structs by calling helper methods, such as getStringFromVarCharHolder and toStringFromUTF8 as shown in ["Step 5: Implement the eval() function"]({{site.baseurl}}/docs/tutorial-develop-a-simple-function/#step-5:-implement-the-eval()-method).  
 * Do not call methods such as toString because this causes serious problems.
 
 
@@ -221,7 +221,7 @@ Add a `drill-module.conf` file in the resources folder of your project. The pres
 
 ## Test the New Function
 
-Restart drill and run the following query:
+Restart drill and run the following query on the [`employee.json`]({{site.baseurl}}/docs/querying-json-files/) file installed with Drill:
 
     SELECT MASK(first_name, '*' , 3) FIRST , MASK(last_name, '#', 7) LAST  FROM cp.`employee.json` LIMIT 5;
     +----------+------------+

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/develop-custom-functions/050-use-custom-functions-in-queries.md
----------------------------------------------------------------------
diff --git a/_docs/develop-custom-functions/050-use-custom-functions-in-queries.md b/_docs/develop-custom-functions/050-use-custom-functions-in-queries.md
index 6a0245a..d95f93d 100644
--- a/_docs/develop-custom-functions/050-use-custom-functions-in-queries.md
+++ b/_docs/develop-custom-functions/050-use-custom-functions-in-queries.md
@@ -8,7 +8,7 @@ locates the function for the request, Drill processes the query and applies
 the function during processing.
 
 Your Drill installation includes sample files in the Drill classpath. One
-sample file, `employee.json`, contains some fictitious employee data that you
+sample file, [`employee.json`]({{site.baseurl}}/docs/querying-json-files/), contains some fictitious employee data that you
 can query with a custom function.
 
 ## Simple Function Example

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/developer-information/contribute-to-drill/010-apache-drill-contribution-guidelines.md
----------------------------------------------------------------------
diff --git a/_docs/developer-information/contribute-to-drill/010-apache-drill-contribution-guidelines.md b/_docs/developer-information/contribute-to-drill/010-apache-drill-contribution-guidelines.md
index 9d1047d..d9812a5 100644
--- a/_docs/developer-information/contribute-to-drill/010-apache-drill-contribution-guidelines.md
+++ b/_docs/developer-information/contribute-to-drill/010-apache-drill-contribution-guidelines.md
@@ -65,7 +65,7 @@ Setting up IDE formatters is recommended and can be done by importing the
 following settings into your browser:
 
 IntelliJ IDEA formatter: [settings
-jar](https://cwiki.apache.org/confluence/download/attachments/30757399/idea-settings.jar?version=1&modificationDate=1363022308000&api=v2)
+jar](https://cwiki.apache.org/confluence/download/attachments/29687985/intellij-idea-settings.jar?version=1&modificationDate=1381928827000&api=v2)
 
 Eclipse: [formatter xml](https://issues.apache.org/jira/secure/attachment/12474245/eclipse_formatter_apache.xml)
 

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/img/plugin-default.png
----------------------------------------------------------------------
diff --git a/_docs/img/plugin-default.png b/_docs/img/plugin-default.png
index e666887..f91c3e2 100644
Binary files a/_docs/img/plugin-default.png and b/_docs/img/plugin-default.png differ

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/img/web-ui-admin-view.png
----------------------------------------------------------------------
diff --git a/_docs/img/web-ui-admin-view.png b/_docs/img/web-ui-admin-view.png
new file mode 100644
index 0000000..fbdb709
Binary files /dev/null and b/_docs/img/web-ui-admin-view.png differ

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/img/web-ui-login.png
----------------------------------------------------------------------
diff --git a/_docs/img/web-ui-login.png b/_docs/img/web-ui-login.png
new file mode 100644
index 0000000..12500c9
Binary files /dev/null and b/_docs/img/web-ui-login.png differ

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/img/web-ui-user-view.png
----------------------------------------------------------------------
diff --git a/_docs/img/web-ui-user-view.png b/_docs/img/web-ui-user-view.png
new file mode 100644
index 0000000..0d75600
Binary files /dev/null and b/_docs/img/web-ui-user-view.png differ

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/img/web-ui.png
----------------------------------------------------------------------
diff --git a/_docs/img/web-ui.png b/_docs/img/web-ui.png
new file mode 100644
index 0000000..f68a135
Binary files /dev/null and b/_docs/img/web-ui.png differ

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/install/045-distributed-mode-prerequisites.md
----------------------------------------------------------------------
diff --git a/_docs/install/045-distributed-mode-prerequisites.md b/_docs/install/045-distributed-mode-prerequisites.md
index e2c7265..8274389 100644
--- a/_docs/install/045-distributed-mode-prerequisites.md
+++ b/_docs/install/045-distributed-mode-prerequisites.md
@@ -7,20 +7,9 @@ run it in a clustered environment.
 
 ## Prerequisites
 
-Before you install Apache Drill on nodes in your cluster, install and configure the
-following software and services:
+Before you install Apache Drill on nodes in your cluster, your cluster must meet the following prerequisites:
 
-  * [Oracle JDK version 7](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html) (Required)
-  * Configured and running a ZooKeeper quorum (Required)
-  * Configured and running a Hadoop cluster (Recommended)
-  * DNS (Recommended)
-
-To install Apache Drill in distributed mode, complete the following steps:
-
-  1. Install Drill on nodes in the cluster.
-  2. Configure a cluster ID and add Zookeeper information.
-  3. Connect Drill to your data sources.
-
-## Connecting Drill to Distributed Data Sources
-
-In a Drill cluster, you typically do not query the local file system, but instead query files on the distributed file system, databases supported through a storage plugin, or the Hive metastore. You use a [storage plugin]({{site.baseurl}}/docs/connect-a-data-source) to connect to these data sources.
+  * Running [Oracle JDK version 7](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html) (Required)
+  * Running a ZooKeeper quorum (Required)
+  * Running a Hadoop cluster (Recommended)
+  * Using DNS (Recommended)

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/install/047-installing-drill-on-the-cluster.md
----------------------------------------------------------------------
diff --git a/_docs/install/047-installing-drill-on-the-cluster.md b/_docs/install/047-installing-drill-on-the-cluster.md
index b4f4abd..3f02692 100644
--- a/_docs/install/047-installing-drill-on-the-cluster.md
+++ b/_docs/install/047-installing-drill-on-the-cluster.md
@@ -2,17 +2,17 @@
 title: "Installing Drill on the Cluster"
 parent: "Installing Drill in Distributed Mode"
 ---
-Complete the following steps to install Drill on designated nodes:
+You install Drill on nodes in the cluster, and then configure a cluster ID and add Zookeeper information, as described in the following steps:
 
-  1. Download the Drill tarball. For example:
+  1. Download the Drill tarball. For example, enter the curl command using the latest version number for Drill:
   
-        curl http://getdrill.org/drill/download/apache-drill-1.1.0.tar.gz
-  2. Explode the tarball to the directory of your choice, such as `/opt`:
+      `curl http://getdrill.org/drill/download/apache-drill-<version>.tar.gz`
+  2. Extract the tarball to the directory of your choice, such as `/opt`:
   
-        tar -xzvf apache-drill-1.1.0.tar.gz
-  3. In `drill-override.conf,` create a unique Drill `cluster ID`, and provide Zookeeper host names and port numbers to configure a connection to your Zookeeper quorum.
-     1. Edit `drill-override.conf` located in the `/conf` directory.
-     2. Provide a unique `cluster-id` and the Zookeeper host names and port numbers in `zk.connect`. If you install Drill on multiple nodes, assign the same `cluster ID` to each Drill node so that all Drill nodes share the same ID. The default Zookeeper port is 2181.
+      `tar -xzvf apache-drill-<version>.tar.gz`
+  3. In `drill-override.conf,` use the Drill `cluster ID`, and provide Zookeeper host names and port numbers to configure a connection to your Zookeeper quorum.
+     1. Edit `drill-override.conf` located in the `conf` directory.
+     2. Provide a unique `cluster-id` and the Zookeeper host names and port numbers in `zk.connect`. If you install Drill on multiple nodes, assign the same `cluster ID` to each Drill node so that all Drill nodes share the same ID. The default Zookeeper port on the open source version of Apache Drill is 2181.
 
        **Example**
        
@@ -21,5 +21,3 @@ Complete the following steps to install Drill on designated nodes:
           zk.connect: "<zkhostname1>:<port>,<zkhostname2>:<port>,<zkhostname3>:<port>"
          }
 
-You can connect Drill to various types of data sources. Refer to [Connect Apache Drill to Data Sources]({{ site.baseurl }}/docs/connect-a-data-source-introduction) to get configuration instructions for the
-particular type of data source that you want to connect to Drill.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/install/050-starting-drill-in-distributed-mode.md
----------------------------------------------------------------------
diff --git a/_docs/install/050-starting-drill-in-distributed-mode.md b/_docs/install/050-starting-drill-in-distributed-mode.md
index 0d1f25c..56e0cfc 100644
--- a/_docs/install/050-starting-drill-in-distributed-mode.md
+++ b/_docs/install/050-starting-drill-in-distributed-mode.md
@@ -3,85 +3,75 @@ title: Starting Drill in Distributed Mode
 parent: "Installing Drill in Distributed Mode"
 ---
 
-The Drillbit service accepts requests from the client, processing the queries, and returning results to the client. You install Drill as a service and run the Drillbit on all of the required nodes in a Hadoop cluster to form a distributed cluster environment. When a Drillbit runs on each data node in the cluster, Drill maximizes data locality during query execution. Movement of data over the network or between nodes is minimized or eliminated when possible.
+You start Drill in distributed mode in one of the following ways:
 
-To use Drill in distributed mode, you need to control a Drillbit. If you use Drill in embedded mode, you do not use the **drillbit** command. 
+* Using the **drillbit.sh** command
+* Starting the Drill Shell
+* Using an Ad-Hoc Connection to Drill
 
-Using the **drillbit command**, located in the `bin` directory, you check the status of the Drillbit, start, stop, and restart a DrillBit. You can use a configuration file to start Drill. Using such a file is handy for controlling Drillbits on multiple nodes.
+## Using the drillbit.sh Command
+To use Drill in distributed mode, you need to control a Drillbit. If you use Drill in embedded mode, you do not use the **drillbit.sh** command. 
 
-### drillbit Command Syntax
+Using the **drillbit.sh** command you can perform the following tasks:
 
-    drillbit.sh [--config <conf-dir>] (start|stop|status|restart|autorestart)
+* Check the status of the Drillbit
+* Start, stop, or restart a Drillbit
+* Configure a Drillbit to restart by default
 
-For example, to restart a Drillbit, navigate to the Drill installation directory, and issue the following command:
+You can use a configuration file to start Drill. Using such a file is handy for controlling Drillbits on multiple nodes.
 
-    bin/drillbit.sh restart
+### drillbit.sh Command Syntax
+
+`drillbit.sh [--config <conf-dir>] (start|stop|status|restart|autorestart)`
+
+For example, to restart a Drillbit on a tarball installation, navigate to the Drill installation directory, and issue the following command from the installation directory:
+
+`bin/drillbit.sh restart`
 
 ## Starting the Drill Shell
-Using the Drill shell, you can connect to relational databases and execute SQL commands. To start the Drill shell, run one of the following scripts, which are located in the bin directory of the Drill installation:
+Using the Drill shell, you can connect to data sources and execute SQL commands. To start the Drill shell, run one of the following scripts, which are located in the bin directory of the Drill installation:
 
 * `drill-conf`  
-  Opens the shell using the connection string to ZooKeeper nodes specified in `drill-override.conf` in `/opt/mapr/drill/drill-1.1.0/conf`.  
+  Opens the Drill shell using the connection string to ZooKeeper nodes specified in `drill-override.conf` in `<installation directory>/conf`.  
 * `drill-localhost`  
   Opens the Drill shell using a connection to the ZooKeeper running on the local host.
 
-Complete the following steps to start the Drill shell on the local node:
+The [Drill prompt]({{site.baseurl}}/docs/starting-drill-on-linux-and-mac-os-x/#about-the-drill-prompt) appears when you start the Drill shell.
 
-  1. Navigate to the Drill installation directory, and issue the following command to start the Drillbit if necessary:
-  
-        bin/drillbit.sh restart
-  2. Issue the following command to start the Drill shell if ZooKeeper is running on the same node as the shell:
-  
-        bin/drill-localhost
-     
-     Alternatively, issue the following command to start the Drill shell using the connection string in `drill-conf`:
-
-         bin/drill-conf
+Issue the following query to check the Drillbits running in the cluster:
+`0: jdbc:drill:zk=<zk1host>:<port> SELECT * FROM sys.drillbits;`  
+Drill lists information about the Drillbits that are running, such as the host name and data port number.
 
-  3. Issue the following query to check the Drillbits running in the cluster:
-  
-        0: jdbc:drill:zk=<zk1host>:<port> select * from sys.drillbits;
-
-Drill provides a list of Drillbits that are running.
-
-    +----------------+---------------+---------------+---------------+-----------+
-    |    hostname    | user_port     | control_port  |   data_port   |  current  |
-    +----------------+---------------+---------------+---------------+-----------+
-    | <host address> | <port number> | <port number> | <port number> | <boolean> |
-    +----------------+---------------+---------------+---------------+-----------+
-
-Now you can run queries. The Drill installation includes sample data
-that you can query. Refer to [Querying Parquet Files]({{ site.baseurl }}/docs/querying-parquet-files/).
-
-### Using an Ad-Hoc Connection to Drill
+## Using an Ad-Hoc Connection to Drill
 To use a custom connection to Drill, but not alter the connection string in `drill-conf` that you normally use, start the Drill shell on an ad-hoc basis using `sqlline`. For example, to start the Drill shell using a particular storage plugin as a schema, use the following command syntax: 
 
-    sqlline –u jdbc:drill:[schema=<storage plugin>;]zk=<zk name>[:<port>][,<zk name2>[:<port>]... ]
+`sqlline –u jdbc:drill:[schema=<storage plugin>;]zk=<zk name>[:<port>][,<zk name2>[:<port>]... ]`
 
-#### sqlline Arguments 
+### sqlline Arguments and Connection Parameters
 
 * `-u` is the option that precedes a connection string. Required.  
-* `jdbc` is the connection protocol. Required.  
-* `schema` is the name of a [storage plugin]({{site.baseurl}}/docs/storage-plugin-registration) to use for queries. Optional.  
-* `Zk=zkname` is one or more ZooKeeper host names or IP addresses.  
-* `port` is the ZooKeeper port number. Optional. Port 2181 is the default.  
+* `jdbc` is the connection type. Required.  
+* `schema` is the name of a [storage plugin]({{site.baseurl}}/docs/storage-plugin-registration) configuration to use as the default for queries. Optional.  
+* `zk name` specifies one or more ZooKeeper host names or IP addresses.  
+* `port` is the ZooKeeper port number. Optional. Port 2181 is the default for the open source version of Apache Drill.  
+
+For example, start the Drill shell with the default schema being the `dfs` storage plugin:
 
-For example, start the Drill shell using the `dfs` storage plugin. Specifying the storage plugin when you start up eliminates the need to specify the storage plugin in the query:
+`bin/sqlline –u jdbc:drill:schema=dfs;zk=centos26`
 
-    bin/sqlline –u jdbc:drill:schema=dfs;zk=centos26
+Specifying the storage plugin configuration name when you start up eliminates the need to enter `USE <schema name>` or specify the it in the FROM clause.
 
-This command starts the Drill shell in a cluster configured to run ZooKeeper on three nodes:
+The following command starts the Drill shell in a cluster configured to run ZooKeeper on three nodes:
 
-    bin/sqlline –u jdbc:drill:zk=cento23,zk=centos24,zk=centos26:5181
+`bin/sqlline –u jdbc:drill:zk=cento23,zk=centos24,zk=centos26:5181`
 
 ## Exiting the Drill Shell
 
 To exit the Drill shell, issue the following command:
 
-    !quit
+`!quit`
 
 ## Stopping Drill
-
-In some cases, such as stopping while a query is in progress, the `!quit` command does not stop Drill running in embedded mode. In distributed mode, you stop the Drillbit service. Navigate to the Drill installation directory, and issue the following command to stop a Drillbit:
+Navigate to the Drill installation directory, and issue the following command to stop a Drillbit:
   
-    bin/drillbit.sh stop
+`bin/drillbit.sh stop`

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/install/060-starting-the-web-ui.md
----------------------------------------------------------------------
diff --git a/_docs/install/060-starting-the-web-ui.md b/_docs/install/060-starting-the-web-ui.md
new file mode 100644
index 0000000..0fdcafe
--- /dev/null
+++ b/_docs/install/060-starting-the-web-ui.md
@@ -0,0 +1,24 @@
+---
+title: Starting the Web UI
+parent: Install Drill
+---
+
+The Drill Web UI is one of several [client interfaces](/docs/architecture-introduction/#drill-clients) you can use to access Drill.  To access the Web UI in Drill 1.2 and later, go to `https://<IP address>:8047`, where IP address is the host name or IP address of one of the installed Drillbits in a distributed system. In Drill 1.1 and earlier, go to `http://<IP address>:8047` to access the Web UI.
+
+If [user authentication]({{site.baseurl}}/docs/configuring-user-authentication/) is not enabled, the Web UI controls appear: 
+
+![Web UI]({{ site.baseurl }}/docs/img/web-ui.png)
+
+If user authentication is enabled, Drill 1.2 and later prompts you for a user name and password:
+
+![Web UI Login]({{ site.baseurl }}/docs/img/web-ui-login.png)
+
+If an administrator logs in, all the Web UI controls appear: Query, Profiles, Storage, Metrics, Threads, and Options.
+
+![Web UI Admin View]({{ site.baseurl }}/docs/img/web-ui-admin-view.png)
+
+If a user, who is not an administrator, logs in, the Web UI controls are limited to Query, Metrics, Threads controls, and possibly, Profiles. An administrator can give users permission to access the Profiles control. Only administrators can see and use the Storage control for managing storage plugin configurations.
+
+![Web UI User View]({{ site.baseurl }}/docs/img/web-ui-user-view.png)
+
+

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/install/installing-drill-in-embedded-mode/020-installing-drill-on-linux-and-mac-os-x.md
----------------------------------------------------------------------
diff --git a/_docs/install/installing-drill-in-embedded-mode/020-installing-drill-on-linux-and-mac-os-x.md b/_docs/install/installing-drill-in-embedded-mode/020-installing-drill-on-linux-and-mac-os-x.md
index 0470a96..fbcd77c 100755
--- a/_docs/install/installing-drill-in-embedded-mode/020-installing-drill-on-linux-and-mac-os-x.md
+++ b/_docs/install/installing-drill-in-embedded-mode/020-installing-drill-on-linux-and-mac-os-x.md
@@ -14,10 +14,8 @@ Complete the following steps to install Drill:
 
 3. Copy the downloaded file to the directory where you want to install Drill. 
 
-4. Extract the contents of the Drill tar.gz file. Use sudo only if necessary:  
+4. Extract the contents of the Drill `.tar.gz` file. Use sudo only if necessary:  
 
-        tar -xvzf apache-drill-1.1.0.tar.gz  
+    `tar -xvzf <.tar.gz file name>`  
 
-The extraction process creates the installation directory named apache-drill-1.1.0 containing the Drill software.
-
-At this point, you can [start Drill]({{site.baseurl}}/docs/starting-drill-on-linux-and-mac-os-x).
\ No newline at end of file
+The extraction process creates the installation directory containing the Drill software. You can now [start Drill]({{site.baseurl}}/docs/starting-drill-on-linux-and-mac-os-x).
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/install/installing-drill-in-embedded-mode/030-starting-drill-on-linux-and-mac-os-x.md
----------------------------------------------------------------------
diff --git a/_docs/install/installing-drill-in-embedded-mode/030-starting-drill-on-linux-and-mac-os-x.md b/_docs/install/installing-drill-in-embedded-mode/030-starting-drill-on-linux-and-mac-os-x.md
index 594773e..8153154 100644
--- a/_docs/install/installing-drill-in-embedded-mode/030-starting-drill-on-linux-and-mac-os-x.md
+++ b/_docs/install/installing-drill-in-embedded-mode/030-starting-drill-on-linux-and-mac-os-x.md
@@ -2,40 +2,37 @@
 title: "Starting Drill on Linux and Mac OS X"
 parent: "Installing Drill in Embedded Mode"
 ---
-Start the Drill shell using the `drill-embedded` command. The command uses a jdbc connection string and identifies the local node as the ZooKeeper node. Complete the following steps to start the Drill shell:
+To start the Drill shell in embedded mode, use the `drill-embedded` command. Internally, the command uses a jdbc connection string and identifies the local node as the ZooKeeper node. Complete the following steps to start the Drill shell:
 
-1. Navigate to the Drill installation directory. For example:  
-
-        cd apache-drill-1.1.0  
+1. Navigate to the Drill installation directory.
 
 2. Issue the following command to start the Drill shell:
 
-        bin/drill-embedded  
+    `bin/drill-embedded`  
 
-   The `0: jdbc:drill:zk=local>`  prompt appears.  
+   The `0: jdbc:drill:zk=local>`  prompt appears. 
 
    At this point, you can [run queries]({{site.baseurl}}/docs/query-data).
 
-To start Drill, you can also use the **sqlline** command and a custom connection string, as described in detail in ["Using an Ad-Hoc Connection to Drill"]({{site.baseurl}}/docs/starting-drill-in-distributed-mode/#using-an-ad-hoc-connection-to-drill). For example, you can specify the storage plugin when you start the shell. Doing so eliminates the need to specify the storage plugin in the query. For example, this command specifies the `dfs` storage plugin:
+To start Drill, you can also use the **sqlline** command and a custom connection string, as described in detail in ["Using an Ad-Hoc Connection to Drill"]({{site.baseurl}}/docs/starting-drill-in-distributed-mode/#using-an-ad-hoc-connection-to-drill). For example, you can specify the default storage plugin configuration when you start the shell. Doing so eliminates the need to specify the storage plugin configuration in the query. For example, this command specifies the `dfs` storage plugin:
 
-    bin/sqlline –u jdbc:drill:schema=dfs;zk=local
+`bin/sqlline –u jdbc:drill:schema=dfs;zk=local`
 
 If you start Drill on one network, and then want to use Drill on another network, such as your home network, restart Drill.
 
-## Exiting the Drill Shell
+## About the Drill Prompt
 
-To exit the Drill shell, issue the following command:
+In embedded mode, the Drill prompt appears as follows:
 
-    !quit
+`0: jdbc:drill:zk=local>`
 
-## Stopping Drill
+* 0 is the number of connections to Drill, which can be only one in embedded node. 
+* jdbc is the connection type.
+* zk=local zk=local means the local node substitutes for the ZooKeeper node.
+
+## Exiting the Drill Shell
 
-In some cases, such as stopping while a query is in progress, the `!quit` command does not stop Drill running in embedded mode. To stop the Drill process on Mac OS X and Linux, use the kill command. For example, on Mac OS X and Linux, follow these steps:
+To exit the Drill shell and stop the Drill process on Mac OS X and Linux, issue the following command:
 
-  1. Issue a CTRL Z to stop the query, then start Drill again. If the startup message indicates success, skip the rest of the steps. If not, proceed to step 2.
-  2. Search for the Drill process IDs.
-  
-        $ ps auwx | grep drill
-  3. Kill each process using the process numbers in the grep output. For example:
+`!quit`
 
-        $ sudo kill -9 2674 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/install/installing-drill-in-embedded-mode/040-installing-drill-on-windows.md
----------------------------------------------------------------------
diff --git a/_docs/install/installing-drill-in-embedded-mode/040-installing-drill-on-windows.md b/_docs/install/installing-drill-in-embedded-mode/040-installing-drill-on-windows.md
index 984594f..f9a3ddd 100755
--- a/_docs/install/installing-drill-in-embedded-mode/040-installing-drill-on-windows.md
+++ b/_docs/install/installing-drill-in-embedded-mode/040-installing-drill-on-windows.md
@@ -5,8 +5,7 @@ parent: "Installing Drill in Embedded Mode"
 First, check that you [meet the prerequisites]({{site.baseurl}}/docs/embedded-mode-prerequisites), including setting the JAVA_HOME environment variable, and then install Drill. Complete the following steps to install Drill:
 
 1. Download the latest version of Apache Drill:  [http://getdrill.org/drill/download/apache-drill-1.1.0.tar.gz](http://getdrill.org/drill/download/apache-drill-1.1.0.tar.gz)
-2. Move the `apache-drill-1.1.0.tar.gz` file to a directory where you want to install Drill.
-3. Unzip the `TAR.GZ` file using a third-party tool. If the tool you use does not unzip the TAR file as well as the `TAR.GZ` file, unzip the `apache-drill-1.1.0.tar` to extract the Drill software. The extraction process creates the installation directory named apache-drill-1.1.0 containing the Drill software. For example:
-   ![drill install dir]({{ site.baseurl }}/docs/img/drill-directory.png)
+2. Move the downloaded file to a directory where you want to install Drill.
+3. Unzip the GZ file using a third-party tool. If the tool you use does not unzip the underlying TAR file as well as the GZ file, perform a second unzip to extract the Drill software. The extraction process creates the installation directory containing the Drill software. 
 
 At this point, you can [start Drill]({{site.baseurl}}/docs/starting-drill-on-windows). 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/install/installing-drill-in-embedded-mode/050-starting-drill-on-windows.md
----------------------------------------------------------------------
diff --git a/_docs/install/installing-drill-in-embedded-mode/050-starting-drill-on-windows.md b/_docs/install/installing-drill-in-embedded-mode/050-starting-drill-on-windows.md
index c53c591..da015ea 100644
--- a/_docs/install/installing-drill-in-embedded-mode/050-starting-drill-on-windows.md
+++ b/_docs/install/installing-drill-in-embedded-mode/050-starting-drill-on-windows.md
@@ -2,22 +2,21 @@
 title: "Starting Drill on Windows"
 parent: "Installing Drill in Embedded Mode"
 ---
-Start the Drill shell using the **sqlline command**. The `zk=local` means the local node is the ZooKeeper node. Complete the following steps to launch the Drill shell:
+Start the Drill shell using the **sqlline command**. Complete the following steps to launch the Drill shell:
 
 1. Open Command Prompt.  
-2. Open the apache-drill-1.1.0 folder. For example:  
-   ``cd apache-drill-1.1.0``
-3. Go to the bin directory. For example:  
+2. Navigate to the Drill installation folder. 
+3. Go to the `bin` directory. For example:  
    ``cd bin``
 4. Type the following command on the command line:
    ``sqlline.bat -u "jdbc:drill:zk=local"``
    ![drill install dir]({{ site.baseurl }}/docs/img/sqlline1.png)
 
-At this point, you can [submit queries]({{ site.baseurl }}/docs/drill-in-10-minutes#query-sample-data) to Drill.
+The [Drill prompt]({{site.baseurl}}/docs/starting-drill-on-linux-and-mac-os-x/#about-the-drill-prompt) appears. You can [submit queries]({{ site.baseurl }}/docs/drill-in-10-minutes#query-sample-data) to Drill.
 
 You can use the schema option in the **sqlline** command to specify a storage plugin. Specifying the storage plugin when you start up eliminates the need to specify the storage plugin in the query. For example, this command specifies the `dfs` storage plugin:
 
-    C:\bin\sqlline sqlline.bat –u "jdbc:drill:schema=dfs;zk=local"
+`C:\bin\sqlline sqlline.bat –u "jdbc:drill:schema=dfs;zk=local"`
 
 If you start Drill on one network, and then want to use Drill on another network, such as your home network, restart Drill.
 
@@ -25,9 +24,5 @@ If you start Drill on one network, and then want to use Drill on another network
 
 To exit the Drill shell, issue the following command:
 
-    !quit
-
-## Stopping Drill
-
-In some cases, such as stopping while a query is in progress, the `!quit` command does not stop Drill running in embedded mode. To stop the Drill process use the [**TaskKill**](https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/taskkill.mspx?mfr=true) command.
+`!quit`
 

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/odbc-jdbc-interfaces/015-using-jdbc-driver.md
----------------------------------------------------------------------
diff --git a/_docs/odbc-jdbc-interfaces/015-using-jdbc-driver.md b/_docs/odbc-jdbc-interfaces/015-using-jdbc-driver.md
index 4bf05e7..2dc52d9 100755
--- a/_docs/odbc-jdbc-interfaces/015-using-jdbc-driver.md
+++ b/_docs/odbc-jdbc-interfaces/015-using-jdbc-driver.md
@@ -2,77 +2,56 @@
 title: "Using the JDBC Driver"
 parent: "ODBC/JDBC Interfaces"
 ---
-This section explains how to install and use the JDBC driver for Apache Drill. For specific examples of client tool connections to Drill via JDBC, see [Using JDBC with SQuirreL]({{ site.baseurl }}/docs/using-jdbc-with-squirrel-on-windows) and [Configuring Spotfire Server]({{ site.baseurl }}/docs/configuring-tibco-spotfire-server-with-drill/).
+This section explains how to install and use the JDBC driver for Apache Drill. To use the JDBC driver, you have to:
 
+1. [Meet prerequisites]({{site.baseurl}}/docs/using-the-jdbc-driver/#prerequisites).
+2. [Get the Drill JDBC Driver]({{site.baseurl}}/docs/using-the-jdbc-driver/#getting-the-drill-jdbc-driver).
+3. Put the Drill JDBC jar file on the classpath.
+4. Use a [valid URL]({{site.baseurl}}/docs/using-the-jdbc-driver/#using-the-jdbc-url-for-a-random-drillbit-connection) in the JDBC connection string when you write application code or configure BI tools.
+5. Use the [name of the Drill driver class]({{site.baseurl}}/docs/using-the-jdbc-driver/#using-the-drill-driver-class-name) in application code or in the configuration of client tools.
 
-### Prerequisites
+Most client tools provide a UI where you can enter all of the required connection information, including the driver location, connection URL, and driver class name. For specific examples of client tool connections to Drill through JDBC, see [Using JDBC with SQuirreL]({{ site.baseurl }}/docs/using-jdbc-with-squirrel-on-windows) and [Configuring Spotfire Server]({{ site.baseurl }}/docs/configuring-tibco-spotfire-server-with-drill/).
 
-  * JRE 7 or JDK 7
-  * Drill installed either in embedded mode or in distributed mode on one or more nodes in a cluster. Refer to the [Install Drill]({{ site.baseurl }}/docs/install-drill/) documentation for more information.
-  * The client must be able to resolve the actual hostname of the Drill node(s) with the IP(s). Verify that a DNS entry was created on the client machine for the Drill node(s).  If a DNS entry does not exist, create the entry for the Drill node(s).
+## Prerequisites
 
-    * For Windows, create the entry in the %WINDIR%\system32\drivers\etc\hosts file.
-    * For Linux and Mac OSX, create the entry in /etc/hosts.  
-<drill-machine-IP> <drill-machine-hostname>
-    For example: `127.0.1.1 maprdemo`
+  * JRE 7 or JDK 7  
+  * [A Drill installation]({{site.baseurl}}/docs/install-drill/)  
+  * Capability to resolve the actual host name of the Drill node(s) with the IP(s), as described in step 4 of [Install the Drill JDBC Driver with JReport]({{site.baseurl}}/docs/configuring-jreport-with-drill/#step-1:-install-the-drill-jdbc-driver-with-jreport). 
 
+## Getting the Drill JDBC Driver
 
-----------
+The Drill JDBC Driver `JAR` file must exist on a client machine so you can configure the driver for the application or third-party tool that you intend to use. Obtain the driver in one of the following ways:
 
-### Getting the Drill JDBC Driver
+* Copy the `drill-jdbc-all` JAR file from the following Drill installation directory on a node where Drill is installed to a directory on your client machine:  
+   `<drill_installation_directory>/jars/jdbc-driver/drill-jdbc-all-<version>.jar`  
 
-The Drill JDBC Driver `JAR` file must exist in a directory on a client machine so you can configure the driver for the application or third-party tool that you intend to use. You can obtain the driver in two different ways:
+   Or
 
-1. Copy the `drill-jdbc-all` JAR file from the following Drill installation directory on a node where Drill is installed to a directory on your client machine:
+* Download the following TAR file to a location on your client machine: [apache-
+drill-1.0.0.tar.gz](http://apache.osuosl.org/drill/drill-1.0.0/apache-drill-1.0.0-src.tar.gz). Extract the file. On Windows, you may need to use a decompression utility, such as [7-zip](http://www.7-zip.org/). The driver is extracted to the following directory:  
+   `<drill-installation_directory>/jars/jdbc-driver/drill-jdbc-all-<version>.jar`
 
-        <drill_installation_directory>/jars/jdbc-driver/drill-jdbc-all-<version>.jar
-    
-    For example, on a MapR cluster: `/opt/mapr/drill/drill-1.0.0/jars/jdbc-driver/drill-jdbc-all-1.0.0-mapr-r1.jar`
+## Using the JDBC URL for a Random Drillbit Connection 
 
-2. Download the following tar file to a location on your client machine: [apache-
-drill-1.0.0.tar.gz](http://apache.osuosl.org/drill/drill-1.0.0/apache-drill-1.0.0-src.tar.gz) and extract the file. You may need to use a decompression utility, such as [7-zip](http://www.7-zip.org/). The driver is extracted to the following directory:
+The format of the JDBC URL differs slightly, depending on the way you want to connect to the Drillbit: random, local, or direct. This section covers using the URL for a random or local connection. Using a URL to [directly connect to a Drillbit]({{site.baseurl}}/docs/using-the-jdbc-driver/#using-the-jdbc-url-format-for-a-direct-drillbit-connection) is covered later. If you want ZooKeeper to randomly choose a Drillbit in the cluster, or if you want to connect to the local Drillbit, the format of the driver URL is:
 
-    <drill-home>\apache-drill-\<version>\jars\jdbc-driver\drill-jdbc-all-<version>.jar
+`jdbc:drill:[schema=<storage plugin>;]zk=<zk name>[:<port>][,<zk name2>[:<port>]... `  
+  `]<directory>/<cluster ID>`
 
-----------
+where
 
-### Configuring a Driver Application or Client
+* `jdbc` is the connection type. Required.  
+* `schema` is the name of a [storage plugin]({{site.baseurl}}/docs/storage-plugin-registration) configuration to use as the default for queries. For example,`schema=hive`. Optional.  
+* `zk name` specifies one or more ZooKeeper host names, or IP addresses. Use `local` instead of a host name or IP address to connect to the local Drillbit. Required. 
+* `port` is the ZooKeeper port number. Port 2181 is the default. On a MapR cluster, the default is 5181. Optional. 
+* `directory` is the Drill directory in ZooKeeper, which by default is `/Drill`. Optional. 
+* `cluster ID` is `drillbits1` by default. If the default has changed, [determine the cluster ID]({{site.baseurl}}/docs/using-the-jdbc-driver/#determining-the-cluster-id) and use it. Optional.
 
-To configure a JDBC application, users have to:
+### Determining the Cluster ID
 
-1. Put the Drill JDBC jar file on the class path.
-2. Use a valid Drill JDBC URL.
-3. Configure tools or application code with the name of the Drill driver class.
+To determine the cluster ID, check the following file:
 
-Most client tools provide a UI where you can enter all of the required connection information, including the Driver location, connection URL, and driver class name.
-
-### JDBC Driver URLs
-
-The driver URLs that you use to create JDBC connection strings must be formed as follows:
-
-`jdbc:drill:zk=<zookeeper_quorum>:<port>/<drill_directory_in_zookeeper>/<cluster_ID>;schema=<schema_to_use_as_default>`
-
-Any Drill JDBC URL must start with: `jdbc:drill`.
-
-**ZooKeeper Quorum**
-
-To connect to a cluster, specify the ZooKeeper quorum as a list of hostnames or IP addresses. 
-
-**ZooKeeper Port Number**
-
-The default ZooKeeper port is 2181. On a MapR cluster, the ZooKeeper port is 5181.
-
-**Drill Directory in ZooKeeper**
-
-The name of the Drill directory stored in ZooKeeper is `/drill`.
-
-**Cluster ID**
-
-The Drill default cluster ID is <code>drillbits1</code>.
-
-On a MapR cluster, check the following file for the cluster ID:
-
-`/opt/mapr/drill/drill-1.0.0/conf/drill-override.conf`
+`<drill-installation>/conf/drill-override.conf`
 
 For example:
 
@@ -83,31 +62,48 @@ drill.exec: {
 }
 ...`
 
-**Schema**
-
-Optionally, include the default schema for the JDBC connection. For example:
-
-`schema=hive`
-
-
 ### URL Examples
 
 **Single-Node Installation**
 
 `jdbc:drill:zk=maprdemo:5181`
 
-`jdbc:drill:zk=centos23.lab:5181/drill/docs41cluster-drillbits`
+`jdbc:drill:zk=centos23.lab:2181/drill/docs41cluster-drillbits`
 
-`jdbc:drill:zk=10.10.100.56:5181/drill/drillbits1;schema=hive`
+`jdbc:drill:zk=10.10.100.56:2181/drill/drillbits1;schema=hive`
 
 **Cluster Installation**
 
-`jdbc:drill:zk=10.10.100.30:5181,10.10.100.31:5181,10.10.100.32:5181/drill/drillbits1;schema=hive`
+`jdbc:drill:zk=10.10.100.30:5181,10.10.100.31:5181,10.10.100.32:2181/drill/drillbits1;schema=hive`
+
+## Using the JDBC URL Format for a Direct Drillbit Connection
+
+If you want to connect directly to a Drillbit instead of using ZooKeeper to choose the Drillbit, replace `zk=<zk name>` with `drillbit=<node>` as shown in the following URL.
 
----------
+`jdbc:drill:[schema=<storage plugin>;]drillbit=<node name>[:<port>][,<node name2>[:<port>]... `  
+  `]<directory>/<cluster ID>`
 
-### Driver Class Name
+where
 
-The class name for the JDBC driver is `org.apache.drill.jdbc.Driver`
+`drillbit=<node name>` specifies one or more host names or IP addresses of cluster nodes running Drill. 
 
------------
\ No newline at end of file
+For definitions of other URL components, see [Using the JDBC URL for a Random Drillbit Connection]({{site.baseurl}}/docs/using-the-jdbc-driver/#using-the-jdbc-url-for-a-random-drillbit-connection).
+
+## Using the Drill Driver Class Name
+
+The class name for the JDBC driver is `org.apache.drill.jdbc.Driver`. 
+
+## Example of Connecting to Drill Programmatically
+
+The following sample code shows using the class name in a snippet that connects to Drill using the Drill-Jdbc-all driver:
+
+```
+Class.forName("org.apache.drill.jdbc.Driver");
+Connection connection =DriverManager.getConnection("jdbc:drill:zk=
+node3.mynode.com:2181/drill/my_cluster_com-drillbits");
+Statement st = connection.createStatement();
+ResultSet rs = st.executeQuery("SELECT * from cp.`employee`");
+while(rs.next()){
+System.out.println(rs.getString(1));
+}
+```
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/progress-reports/001-2014-q1.md
----------------------------------------------------------------------
diff --git a/_docs/progress-reports/001-2014-q1.md b/_docs/progress-reports/001-2014-q1.md
deleted file mode 100644
index ebabaea..0000000
--- a/_docs/progress-reports/001-2014-q1.md
+++ /dev/null
@@ -1,174 +0,0 @@
----
-title: "2014 Q1 Drill Report"
-parent: "Progress Reports"
----
-
-Apache: Project Drill
-
-Description:
-
-Apache Drill is a distributed system for interactive analysis of large-scale
-datasets that is based on Google's Dremel. Its goal is to efficiently process
-nested data, scale to 10,000 servers or more and to be able to process petabyes of data and trillions of records in seconds.
-
-Drill has been incubating since 2012-08-11.
-
-Three Issues to Address in Move to Graduation:
-
-1\. Continue to attract new developers and and early users with a variety of
-skills and viewpoints
-
-2\. Continue to develop deeper community skills and knowledge by building
-additional releases
-
-3\. Demonstrate community robustness by rotating project tasks among multiple
-project members
-
-Issues to Call to Attention of PMC or ASF Board:
-
-None
-
-How community has developed since last report:
-
-Community awareness and participation were strengthened through a meeting of
-the Bay Area Apache Drill User Group in San Jose
-
-sponsored by Yahoo! This event expanded participation to include many new to
-Drill and particularly those interested as potential users (analysts rather
-than developers).
-
-Speakers included Drill project mentor Ted Dunning from MapR, Data Scientist
-Will Ford from Alpine Data Labs, new Drill committer Julian Hyde from
-HortonWorks and Aman Sinha, MapR Drill engineer.
-
-Additional events include:
-
-• Two new Drill committers accepted appointment: Julian Hyde (HortonWorks) and Tim Chen (Microsoft).
-
-• Drill has a new project mentor, Sebastian Schelter.
-
-Mailing list discussions:
-
-Subscriptions to the Drill mailing lists have risen to 399 on dev list and 308
-on the user list and 508 uniques across both lists.
-
-There has been active and increasing participation in discussions on the
-developer mailing list, including new participants and developers. Participation on the user list is growing although still small; mainly activity takes place on developer mailing list.
-
-Activity summary for the user mailing list:
-
-<http://mail-archives.apache.org/mod_mbox/incubator-drill-user/>
-
-February to date 02/26/2014: 25
-
-January 2014, 12
-
-December 2013, 62
-
-Topics in discussion on the user mailing list included but not limited to:
-
-  * Feb 2014: Connecting Drill to HBase, Support for Distinct/Count
-  * Jan 2014: Loading Data into Drill, Data Locality
-  * December 2013: Loading Data into Drill, Setting Drill with HDFS and other Storage engines
-
-Activity summary for the dev mailing list:
-
-<http://mail-archives.apache.org/mod_mbox/incubator-drill-dev/>
-
-February to date 02/26/2014: 250 (jira; discussion; review requests)
-
-January 2014, 156(jira, focused discussions)
-
-December 2013, 51 (jira; focused discussions)
-
-Topics in discussion on the dev mailing list included but not
-
-limited to:
-
-• February to date 02/26/2014: How to contribute to Drill; 
-review requests for Drill 357, 346, 366, 364; status of Drill functions including Hash functions; support operators +,- for date and interval arithmetic
-
-• January: Sql Options discussions, Casting discussions, Multiplex Data
-Channel feedbacks
-
-• December: Guide for new comers contribution, Aggregate functions code gen
-feedback
-
-Code
-
-For details of code commits, see <http://bit.ly/14YPXN9>
-
-There has been continued activity in code commits
-
-19 contributors have participated in GitHUB code activity; there have been 116 forks.
-
-February code commits include but not limited to: Support for
-Information_schema, Hive storage and metastore integration, Optiq JDBC
-thinning and refactoring, Math functions rework to use codegen, Column pruning
-for Parquet/Json, Moving Sql parsing into Drillbit server side, TravisCI setup
-
-January code commits include but not limited to: Implicit and explicit casting
-support, Broadcast Sender exchange, add TPC-H test queries, Refactor memory
-allocation to use hierarchical memory allocation and freeing.
-
-Community Interactions
-
-Weekly Drill hangout continues, conducted remotely through Google hangouts
-Tuesday mornings 9am Pacific Time to keep core developers in contact in realtime despite geographical separation.
-
-Community stays in touch through @ApacheDrill Twitter ID, and by postings on
-various blogs including Apache Drill User <http://drill-user.org/> which has
-had several updates and through international presentations at conferences.
-
-Viability of community is also apparent through active participation in the
-Bay Area Apache Drill User group meeting in early November, which has grown to
-440 members.
-
-Sample presentations:
-
-• “How to Use Drill” by Ted Dunning and Will Ford, Bay Area Apache Drill Meet-
-up 24 February
-
-• “How Drill Addresses Dynamic Typing” by Julian Hyde, Bay Area Apache Drill
-Meet-up 24 February
-
-• “New Features and Infrastructure Improvements” by Aman Sinha, Bay Area
-Apache Drill Meet-up 24 February
-
-Articles
-
-Examples of articles or reports on Apache Drill since last report include:
-
-• Drill blog post by Ellen Friedman at Apache Drill User updating community on
-how people will use Drill and inviting comments/ questions from remote
-participants as part of the Drill User Group <http://bit.ly/1p1Qvgn>
-
-• Drill blog post by Ellen Friedman at Apache Drill User reports on
-appointment of new Drill committers and new mentor <http://bit.ly/JIcwQe>
-
-Social Networking
-
-@ApacheDrill Twitter entity is active and has grown substantially by 19%, to 744 followers.
-
-How project has developed since last report:
-
-1\. Significant progress is being made on execution engine and sql front end
-to support more functionality, also more integrations with storage engines.
-
-2\. Work on ODBC driver has begun with a new group led by George Chow in
-Vancouver.
-
-3\. Significant code drops have been checked in from a number of contributors
-and commiters
-
-4\. Work toward 2nd milestone is progressing substantially.
-
-Please check this [ ] when you have filled in the report for Drill.
-
-Signed-off-by:
-
-* Ted Dunning
-* Grant Ingersoll
-* Isabel Drost
-* Sebastian Schelter
-

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/query-data/030-querying-hbase.md
----------------------------------------------------------------------
diff --git a/_docs/query-data/030-querying-hbase.md b/_docs/query-data/030-querying-hbase.md
index 9cffe68..486cd61 100644
--- a/_docs/query-data/030-querying-hbase.md
+++ b/_docs/query-data/030-querying-hbase.md
@@ -58,7 +58,7 @@ Drill can performantly query HBase data that uses composite keys, as shown in th
 
 Drill 1.2 leverages new features introduced by [HBASE-8201 Jira](https://issues.apache.org/jira/browse/HBASE-8201) that allows ordered byte encoding of different data types. This encoding scheme preserves the sort order of the native data type when the data is stored as sorted byte arrays on disk. Thus, Drill will be able to process data through the HBase storage plugin if the row keys have been encoded in OrderedBytes format.
 
-To execute the following query, Drill prunes the scan range to only include the row keys representing [-32,59) range, thus reducing the amount of data read.
+To execute the following query, Drill prunes the scan range to only include the row keys representing [-32,59] range, thus reducing the amount of data read.
 
 ```
 SELECT

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/query-data/080-monitoring-and-canceling-queries-in-the-Drill-Web-UI.md
----------------------------------------------------------------------
diff --git a/_docs/query-data/080-monitoring-and-canceling-queries-in-the-Drill-Web-UI.md b/_docs/query-data/080-monitoring-and-canceling-queries-in-the-Drill-Web-UI.md
index 9c7cdc2..4f03c80 100644
--- a/_docs/query-data/080-monitoring-and-canceling-queries-in-the-Drill-Web-UI.md
+++ b/_docs/query-data/080-monitoring-and-canceling-queries-in-the-Drill-Web-UI.md
@@ -2,7 +2,7 @@
 title: "Monitoring and Canceling Queries in the Drill Web UI"
 parent: "Query Data"
 ---
-You can monitor and cancel queries from the Drill Web UI. To access the Drill
+You can monitor and cancel queries from the Drill Web UI if you are [authorized]({{site.baseurl}}/docs/configuring-web-ui-and-rest-api-security/) to do so. To access the Drill
 Web UI, the Drillbit process must be running on the Drill node that you use to
 access the Drill Web UI.
 

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/query-data/query-a-file-system/010-querying-json-files.md
----------------------------------------------------------------------
diff --git a/_docs/query-data/query-a-file-system/010-querying-json-files.md b/_docs/query-data/query-a-file-system/010-querying-json-files.md
index 51f499d..72ed462 100644
--- a/_docs/query-data/query-a-file-system/010-querying-json-files.md
+++ b/_docs/query-data/query-a-file-system/010-querying-json-files.md
@@ -2,14 +2,27 @@
 title: "Querying JSON Files"
 parent: "Querying a File System"
 ---
-Your Drill installation includes a sample JSON file located in Drill's
-classpath. The sample JSON file, `employee.json`, contains fictitious employee
-data. Use SQL syntax to query the sample `JSON` file.
+To query complex JSON files, you need to understand the ["JSON Data Model"]({{site.baseurl}}/docs/json-data-model/). This section provides a trivial example of querying a sample file that Drill installs. 
 
-To view the data in the `employee.json` file, submit the following SQL query
-to Drill:
+## About the employee.json File
+The sample file, `employee.json`, is packaged in the Foodmart data JAR in Drill's
+classpath:  
 
-         0: jdbc:drill:zk=local> SELECT * FROM cp.`employee.json` LIMIT 5;
+`./jars/3rdparty/foodmart-data-json.0.4.jar`
+
+The file contains fictitious employee
+data. Here is a snippet of the file:
+
+```
+{"employee_id":1,"full_name":"Sheri Nowmer","first_name":"Sheri","last_name":"Nowmer","position_id":1,"position_title":"President","store_id":0,"department_id":1,"birth_date":"1961-08-26","hire_date":"1994-12-01 00:00:00.0","end_date":null,"salary":80000.0000,"supervisor_id":0,"education_level":"Graduate Degree","marital_status":"S","gender":"F","management_role":"Senior Management"}
+```
+To query a file in a JAR file in the Drill classpath, you need to use the [cp (classpath) storage plugin]({{site.baseurl}}/docs/storage-plugin-registration/) configuration, as shown in the sample query.
+
+## Sample Query
+
+Start the Drill shell, and select five rows of data from the `employee.json` file installed with Drill.
+
+``SELECT * FROM cp.`employee.json` LIMIT 5;``
 
 The query returns the following results:
 
@@ -20,5 +33,3 @@ The query returns the following results:
     | 2            | Derrick Whelply            | Derrick             | Whelply       | 2            | VP Country Manager         | 0         | 1              | 1915-07-03  | 1994-12-01 00:00:00.0  | 40000.0  | 1              | Graduate Degree      | M               | M       | Senior Management     |
     | 4            | Michael Spence             | Michael             | Spence        | 2            | VP Country Manager         | 0         | 1              | 1969-06-20  | 1998-01-01 00:00:00.0  | 40000.0  | 1              | Graduate Degree      | S               | M       | Senior Management     |
     | 5            | Maya Gutierrez             | Maya                | Gutierrez     | 2            | VP Country Manager         | 0         | 1              | 1951-05-10  | 1998-01-01 00:00:00.0  | 35000.0  | 1              | Bachelors Degree     | M               | F       | Senior Management     |
-
-    0: jdbc:drill:zk=local>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/query-data/query-a-file-system/020-querying-parquet-files.md
----------------------------------------------------------------------
diff --git a/_docs/query-data/query-a-file-system/020-querying-parquet-files.md b/_docs/query-data/query-a-file-system/020-querying-parquet-files.md
index 7364969..d6b067f 100644
--- a/_docs/query-data/query-a-file-system/020-querying-parquet-files.md
+++ b/_docs/query-data/query-a-file-system/020-querying-parquet-files.md
@@ -3,21 +3,29 @@ title: "Querying Parquet Files"
 parent: "Querying a File System"
 ---
 
-Drill 1.2 and later extends SQL for performant querying of a large number, thousands or more, of Parquet files. By including the following command in a query, you trigger the generation of metadata files in the directory of Parquet files and its subdirectories:
+Drill 1.2 and later extends SQL for performant querying of a large number, thousands or more, of Parquet files. By running the following command, you trigger the generation of metadata files in the directory of Parquet files and its subdirectories:
 
     REFRESH TABLE METADATA <path to table>
 
-You need to include the command in only the first query of a file or directory. Subsequent queries return results quickly because Drill refers to the metadata saved in the cache, as described in [Reading Parquet Files]({{site.baseurl}}/docs/parquet-format/#reading-parquet-files). 
+You need to run the command on a file or directory only once during the session. Subsequent queries return results quickly because Drill refers to the metadata saved in the cache, as described in [Reading Parquet Files]({{site.baseurl}}/docs/parquet-format/#reading-parquet-files). 
 
 You can query nested directories from any level. For example, you can query a sub-sub-directory of Parquet files because Drill stores a metadata cache of information at each level that covers that particular level and all lower levels. 
 
 ## Example of Generating Parquet Metadata
 
-TBD (fill in when the feature is ready)
+```
+0: jdbc:drill:schema=dfs> REFRESH TABLE METADATA t1;
++-------+----------------------------------------------+
+|  ok   |                   summary                    |
++-------+----------------------------------------------+
+| true  | Successfully updated metadata for table t1.  |
++-------+----------------------------------------------+
+1 row selected (0.445 seconds)
+```
 
 ## Sample Parquet Files  
 The Drill installation includes a `sample-data` directory with Parquet files
-that you can query. Use SQL syntax to query the `region.parquet` and
+that you can query. Use SQL to query the `region.parquet` and
 `nation.parquet` files in the `sample-data` directory.
 
 {% include startnote.html %}The Drill installation location may differ from the examples used here.{% include endnote.html %} 

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/sql-reference/040-operators.md
----------------------------------------------------------------------
diff --git a/_docs/sql-reference/040-operators.md b/_docs/sql-reference/040-operators.md
index a502f01..6ee5cde 100644
--- a/_docs/sql-reference/040-operators.md
+++ b/_docs/sql-reference/040-operators.md
@@ -66,12 +66,11 @@ See [SELECT Statements]({{ site.baseurl }}/docs/select).
 
 ## String Concatenate Operator
 
-You can use the following string operators in your Drill queries to concatenate strings:
+You can use the following string operator in your Drill queries to concatenate strings:
 
   * string || string
-  * string || non-string or non-string || string
 
-The concatenate operator is an alternative to the [concat function]({{ site.baseurl }}/docs/string-manipulation#concat).
+The concatenate operator is an alternative to the [concat function]({{ site.baseurl }}/docs/string-manipulation#concat) and will concatenate input if Drill can implicitly convert the input to a string.
 
 The concat function treats NULL as an empty string. The concatenate operator (||) returns NULL if any input is NULL.
 

http://git-wip-us.apache.org/repos/asf/drill/blob/43d6dd1d/_docs/sql-reference/sql-commands/053-describe.md
----------------------------------------------------------------------
diff --git a/_docs/sql-reference/sql-commands/053-describe.md b/_docs/sql-reference/sql-commands/053-describe.md
new file mode 100644
index 0000000..837494c
--- /dev/null
+++ b/_docs/sql-reference/sql-commands/053-describe.md
@@ -0,0 +1,99 @@
+---
+title: "DESCRIBE"
+parent: "SQL Commands"
+---
+The DESCRIBE command returns information about columns in a table or view.
+
+## Syntax
+
+The DESCRIBE command supports the following syntax:
+
+    DESCRIBE [workspace.]table_name|view_name
+
+## Usage Notes
+
+You can issue the DESCRIBE command against views created in a workspace and
+tables created in Hive and HBase. You can issue the DESCRIBE command
+on a table or view from any schema. For example, if you are working in the
+`dfs.myworkspace` schema, you can issue the DESCRIBE command on a view or
+table in another schema. Currently, DESCRIBE does not support tables created
+in a file system.
+
+Drill only supports SQL data types. Verify that all data types in an external
+data source, such as Hive or HBase, map to supported data types in Drill. See
+Drill Data Type Mapping for more information.
+
+## Example
+
+The following example demonstrates the steps that you can follow when you want
+to use the DESCRIBE command to see column information for a view and for Hive
+and HBase tables.
+
+Complete the following steps to use the DESCRIBE command:
+
+  1. Issue the USE command to switch to a particular schema.
+
+        0: jdbc:drill:zk=drilldemo:5181> use hive;
+        +------------+------------+
+        |   ok  |  summary   |
+        +------------+------------+
+        | true      | Default schema changed to 'hive' |
+        +------------+------------+
+        1 row selected (0.025 seconds)
+
+  2. Issue the SHOW TABLES command to see the existing tables in the schema.
+
+        0: jdbc:drill:zk=drilldemo:5181> show tables;
+        +--------------+------------+
+        | TABLE_SCHEMA | TABLE_NAME |
+        +--------------+------------+
+        | hive.default | orders     |
+        | hive.default | products   |
+        +--------------+------------+
+        2 rows selected (0.438 seconds)
+
+  3. Issue the DESCRIBE command on a table.
+
+        0: jdbc:drill:zk=drilldemo:5181> describe orders;
+        +-------------+------------+-------------+
+        | COLUMN_NAME | DATA_TYPE  | IS_NULLABLE |
+        +-------------+------------+-------------+
+        | order_id  | BIGINT    | YES       |
+        | month     | VARCHAR   | YES       |
+        | purchdate   | TIMESTAMP  | YES        |
+        | cust_id   | BIGINT    | YES       |
+        | state     | VARCHAR   | YES       |
+        | prod_id   | BIGINT    | YES       |
+        | order_total | INTEGER | YES       |
+        +-------------+------------+-------------+
+        7 rows selected (0.64 seconds)
+
+  4. Issue the DESCRIBE command on a table in another schema from the current schema.
+
+        0: jdbc:drill:zk=drilldemo:5181> describe hbase.customers;
+        +-------------+------------+-------------+
+        | COLUMN_NAME | DATA_TYPE  | IS_NULLABLE |
+        +-------------+------------+-------------+
+        | row_key   | ANY       | NO        |
+        | address   | (VARCHAR(1), ANY) MAP | NO        |
+        | loyalty   | (VARCHAR(1), ANY) MAP | NO        |
+        | personal  | (VARCHAR(1), ANY) MAP | NO        |
+        +-------------+------------+-------------+
+        4 rows selected (0.671 seconds)
+
+  5. Issue the DESCRIBE command on a view in another schema from the current schema.
+
+        0: jdbc:drill:zk=drilldemo:5181> describe dfs.views.customers_vw;
+        +-------------+------------+-------------+
+        | COLUMN_NAME | DATA_TYPE  | IS_NULLABLE |
+        +-------------+------------+-------------+
+        | cust_id   | BIGINT    | NO        |
+        | name      | VARCHAR   | NO        |
+        | address   | VARCHAR   | NO        |
+        | gender    | VARCHAR   | NO        |
+        | age       | VARCHAR   | NO        |
+        | agg_rev   | VARCHAR   | NO        |
+        | membership  | VARCHAR | NO        |
+        +-------------+------------+-------------+
+        7 rows selected (0.403 seconds)
+