<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
<concept id="shell_running_commands">

  <title>Running Commands and SQL Statements in impala-shell</title>

  <titlealts audience="PDF">

    <navtitle>Running Commands and SQL Statements</navtitle>

  </titlealts>

  <prolog>
    <metadata>
      <data name="Category" value="Impala"/>
      <data name="Category" value="impala-shell"/>
      <data name="Category" value="SQL"/>
      <data name="Category" value="Data Analysts"/>
      <data name="Category" value="Developers"/>
    </metadata>
  </prolog>

  <conbody>

    <p>
      The following are a few of the key syntax and usage rules for running commands and SQL
      statements in <codeph>impala-shell</codeph>.
    </p>

    <ul>
      <li>
        To see the full set of available commands, press <b>TAB</b> twice.
      </li>

      <li>
        To cycle through and edit previous commands, click the up-arrow and down-arrow keys.
      </li>

      <li>
        Use the standard set of keyboard shortcuts in GNU Readline library for editing and
        cursor movement, such as <b>Ctrl-A</b> for the beginning of line and <b>Ctrl-E</b> for
        the end of line.
      </li>

      <li>
        Commands and SQL statements must be terminated by a semi-colon.
      </li>

      <li>
        Commands and SQL statements can span multiple lines.
      </li>

      <li>
        Use <codeph>--</codeph> to denote a single-line comment and /* */ to
        denote a multi-line comment.

        <p> A comment is considered part of the
          statement it precedes, so when you enter a <codeph>--</codeph> or
            <codeph>/* */</codeph> comment, you get a continuation prompt until
          you finish entering a statement ending with a semicolon. For example:
        </p>
<codeblock>[impala] > -- This is a test comment
                  > SHOW TABLES LIKE 't*';
</codeblock>
      </li>

      <li>
        If a comment contains the
          <codeph>${<varname>variable_name</varname>}</codeph> and it is not for
        a variable substitution, the <codeph>$</codeph> character must be
        escaped, e.g. <codeph>-- \${hello}</codeph>.
      </li>
    </ul>

    <p>
      For information on available <codeph>impala-shell</codeph> commands, see
      <xref href="impala_shell_commands.xml#shell_commands"/>.
    </p>

  </conbody>

  <concept id="impala-shell_variable">

    <title>Variable Substitution in impala-shell</title>

    <conbody>

      <p rev="2.5.0 IMPALA-2179 IMPALA-2180">
        In <keyword keyref="impala25_full"/> and higher, you can define substitution variables
        to be used within SQL statements processed by <cmdname>impala-shell</cmdname>.
        <ol>
          <li>
            You specify the variable and its value as below.
            <ul>
              <li>
                On the command line, you specify the option
                <codeph>--var=<varname>variable_name</varname>=<varname>value</varname></codeph>
              </li>

              <li>
                Within an interactive session or a script file processed by the
                <codeph>-f</codeph> option, use the <codeph>SET
                VAR:<varname>variable_name</varname>=<varname>value</varname></codeph> command.
              </li>
            </ul>
          </li>

          <li>
            Use the above variable in SQL statements in the <codeph>impala-shell</codeph>
            session using the notation:
            <codeph>${VAR:<varname>variable_name</varname>}</codeph>.
          </li>
        </ol>
      </p>

      <note>
        Because this feature is part of <cmdname>impala-shell</cmdname> rather than the
        <cmdname>impalad</cmdname> backend, make sure the client system you are connecting from
        has the most recent <cmdname>impala-shell</cmdname>. You can use this feature with a new
        <cmdname>impala-shell</cmdname> connecting to an older <cmdname>impalad</cmdname>, but
        not the reverse.
      </note>

      <p rev="2.5.0 IMPALA-2179 IMPALA-2180">
        For example, here are some <cmdname>impala-shell</cmdname> commands that define
        substitution variables and then use them in SQL statements executed through the
        <codeph>-q</codeph> and <codeph>-f</codeph> options. Notice how the <codeph>-q</codeph>
        argument strings are single-quoted to prevent shell expansion of the
        <codeph>${var:value}</codeph> notation, and any string literals within the queries are
        enclosed by double quotation marks.
      </p>

<codeblock rev="2.5.0 IMPALA-2179 IMPALA-2180">
$ impala-shell --var=tname=table1 --var=colname=x --var=coltype=string -q 'CREATE TABLE ${var:tname} (${var:colname} ${var:coltype}) STORED AS PARQUET'
Query: CREATE TABLE table1 (x STRING) STORED AS PARQUET
</codeblock>

      <p rev="2.5.0 IMPALA-2179 IMPALA-2180">
        The below example shows a substitution variable passed in by the <codeph>--var</codeph>
        option, and then referenced by statements issued interactively. Then the variable is
        reset with the <codeph>SET</codeph> command.
      </p>

<codeblock rev="2.5.0 IMPALA-2179 IMPALA-2180">
$ impala-shell --quiet --var=tname=table1

[impala] > SELECT COUNT(*) FROM ${var:tname};

[impala] > SET VAR:tname=table2;
[impala] > SELECT COUNT(*) FROM ${var:tname};
</codeblock>

    </conbody>

  </concept>

</concept>
