Impala-quick-guide

提供:Dev Guides
移動先:案内検索

Impala-概要

Impalaとは何ですか?

Impalaは、Hadoopクラスターに格納されている膨大な量のデータを処理するためのMPP(Massive Parallel Processing)SQLクエリエンジンです。 C ++とJavaで書かれたオープンソースソフトウェアです。 Hadoopの他のSQLエンジンと比較して、高いパフォーマンスと低いレイテンシを提供します。

言い換えれば、Impalaは、Hadoop分散ファイルシステムに保存されているデータにアクセスする最速の方法を提供する(RDBMSのようなエクスペリエンスを提供する)最高のパフォーマンスのSQLエンジンです。

Impalaを選ぶ理由

Impalaは、HDFS、HBase、Metastore、YARN、Sentryなどの標準コンポーネントを利用することにより、従来の分析データベースのSQLサポートとマルチユーザーパフォーマンスをApache Hadoopのスケーラビリティと柔軟性と組み合わせます。

  • Impalaを使用すると、ユーザーは、SQLクエリを使用して、Hiveなどの他のSQLエンジンと比べてより高速にHDFSまたはHBaseと通信できます。
  • Impalaは、Hadoopで使用されるParquet、Avro、RCFileなど、ほぼすべてのファイル形式を読み取ることができます。

Impalaは、Apache Hiveと同じメタデータ、SQL構文(Hive SQL)、ODBCドライバー、およびユーザーインターフェイス(Hue Beeswax)を使用して、バッチ指向またはリアルタイムクエリ用の使い慣れた統合プラットフォームを提供します。

Apache Hiveとは異なり、* ImpalaはMapReduceアルゴリズム*に基づいていません。 同じマシンで実行されるクエリ実行のすべての側面を担当する*デーモンプロセス*に基づく分散アーキテクチャを実装します。

したがって、MapReduceを使用するレイテンシーが短縮され、これによりImpalaがApache Hiveよりも高速になります。

Impalaの利点

以下は、Cloudera Impalaの顕著な利点のリストです。

  • impalaを使用すると、HDFSに保存されているデータを、従来のSQLの知識で超高速で処理できます。
  • データが存在する場所(Hadoopクラスター上)でデータ処理が行われるため、Impalaでの作業中、Hadoopに保存されたデータのデータ変換とデータ移動は必要ありません。
  • Impalaを使用すると、Java(MapReduceジョブ)の知識がなくても、HDFS、HBase、およびAmazon s3に保存されているデータにアクセスできます。 SQLクエリの基本的な考え方でそれらにアクセスできます。
  • ビジネスツールでクエリを作成するには、データを複雑な抽出-変換-ロード(ETL)サイクルで処理する必要があります。 しかし、Impalaでは、この手順は短縮されます。 読み込みと再編成の時間のかかる段階は、 探索的データ分析とデータ検出 などの新しい手法によって克服され、プロセスが高速化されます。
  • Impalaは、Parquetファイル形式の使用の先駆者です。Parquetファイル形式は、データウェアハウスシナリオで一般的な大規模なクエリに最適化された円柱状のストレージレイアウトです。

Impalaの機能

以下は、cloudera Impalaの機能です-

  • Impalaは、Apacheライセンスの下でオープンソースとして自由に利用できます。
  • Impalaはインメモリデータ処理をサポートします。つまり、データを移動せずにHadoopデータノードに保存されているデータにアクセス/分析します。
  • SQLのようなクエリを使用して、Impalaを使用してデータにアクセスできます。
  • Impalaは、他のSQLエンジンと比較して、HDFSのデータへの高速アクセスを提供します。
  • Impalaを使用すると、HDFS、Apache HBase、Amazon s3などのストレージシステムにデータを保存できます。
  • Impalaは、Tableau、Pentaho、Micro戦略、ズームデータなどのビジネスインテリジェンスツールと統合できます。
  • Impalaは、LZO、Sequence File、Avro、RCFile、Parquetなどのさまざまなファイル形式をサポートしています。
  • Impalaは、Apache Hiveのメタデータ、ODBCドライバー、およびSQL構文を使用します。

リレーショナルデータベースとImpala

Impalaは、SQLおよびHiveQLに似たクエリ言語を使用します。 次の表は、SQLとImpalaクエリ言語の主な違いを示しています。

Impala Relational databases
Impala uses an SQL like query language that is similar to HiveQL. Relational databases use SQL language.
In Impala, you cannot update or delete individual records. In relational databases, it is possible to update or delete individual records.
Impala does not support transactions. Relational databases support transactions.
Impala does not support indexing. Relational databases support indexing.
Impala stores and manages large amounts of data (petabytes). Relational databases handle smaller amounts of data (terabytes) when compared to Impala.

Hive、Hbase、およびImpala

Cloudera Impalaは、Hiveと同じクエリ言語、メタストア、ユーザーインターフェイスを使用しますが、HiveとHBaseでは特定の面で異なります。 次の表は、HBase、Hive、およびImpalaの比較分析を示しています。

HBase Hive Impala
HBase is wide-column store database based on Apache Hadoop. It uses the concepts of BigTable. Hive is a data warehouse software. Using this, we can access and manage large distributed datasets, built on Hadoop. Impala is a tool to manage, analyze data that is stored on Hadoop.
The data model of HBase is wide column store. Hive follows Relational model. Impala follows Relational model.
HBase is developed using Java language. Hive is developed using Java language. Impala is developed using C++.
The data model of HBase is schema-free. The data model of Hive is Schema-based. The data model of Impala is Schema-based.
HBase provides Java, RESTful and, Thrift API’s. Hive provides JDBC, ODBC, Thrift API’s. Impala provides JDBC and ODBC API’s.
Supports programming languages like C, C#, C++, Groovy, Java PHP, Python, and Scala. Supports programming languages like C++, Java, PHP, and Python. Impala supports all languages supporting JDBC/ODBC.
HBase provides support for triggers. Hive does not provide any support for triggers. Impala does not provide any support for triggers.

これらの3つのデータベースすべて-

  • NOSQLデータベースです。
  • オープンソースとして利用可能。
  • サーバー側のスクリプトをサポートします。
  • 耐久性や並行性などのACIDプロパティに従います。
  • *分割*には*分割*を使用します。

Impalaの欠点

Impalaを使用することの欠点のいくつかは次のとおりです-

  • Impalaは、シリアル化と逆シリアル化のサポートを提供しません。
  • Impalaは、カスタムバイナリファイルではなく、テキストファイルのみを読み取ることができます。
  • 新しいレコード/ファイルがHDFSのデータディレクトリに追加されるたびに、テーブルを更新する必要があります。

Impala-環境

この章では、Impalaをインストールするための前提条件、システムで Impala をダウンロード、インストール、セットアップする方法について説明します。

Hadoopとそのエコシステムソフトウェアと同様に、LinuxオペレーティングシステムにImpalaをインストールする必要があります。 clouderaはImpalaを出荷していたため、* Cloudera Quick Start VMで使用できます。*

この章では、 Cloudera Quick Start VM をダウンロードしてImpalaを起動する方法について説明します。

Cloudera Quick Start VMのダウンロード

以下の手順に従って、 Cloudera QuickStartVM の最新バージョンをダウンロードします。

ステップ1

cloudera Webサイトhttp://www.cloudera.com/のホームページを開きます。 以下に示すページが表示されます。

Clouderaウェブサイトのホームページ

ステップ2

clouderaホームページの[サインイン]リンクをクリックすると、以下に示すようにサインインページにリダイレクトされます。

サインインページ

まだ登録していない場合は、[今すぐ登録]リンクをクリックして、[アカウント登録]フォームを表示します。 そこに登録して、clouderaアカウントにサインインします。

ステップ3

サインインした後、次のスナップショットで強調表示されている[ダウンロード]リンクをクリックして、cloudera Webサイトのダウンロードページを開きます。

ダウンロードリンク

ステップ4-QuickStartVMのダウンロード

次のスナップショットで強調表示されているように、今すぐダウンロード*ボタンをクリックして、cloudera *QuickStartVM をダウンロードします。

QuickStartVMのダウンロード

これにより、 QuickStart VM のダウンロードページにリダイレクトされます。

ダウンロードページQuickStart VM

[今すぐ入手]ボタンをクリックし、ライセンス契約に同意して、下に示すように[送信]ボタンをクリックします。

送信ボタン

Clouderaは、VM互換のVMware、KVM、およびVIRTUALBOXを提供します。 必要なバージョンを選択します。 ここでのチュートリアルでは、仮想ボックスを使用した Cloudera QuickStartVM のセットアップを示しています。したがって、以下のスナップショットに示すように、 VIRTUALBOX DOWNLOAD ボタンをクリックします。

仮想ボックスダウンロード

これにより、仮想ボックスイメージファイルである cloudera-quickstart-vm-5.5.0-0-virtualbox.ovf という名前のファイルのダウンロードが開始されます。

Cloudera QuickStartVMのインポート

*cloudera-quickstart-vm-5.5.0-0-virtualbox.ovf* ファイルをダウンロードした後、仮想ボックスを使用してインポートする必要があります。 そのためには、まず、システムに仮想ボックスをインストールする必要があります。 以下の手順に従って、ダウンロードした画像ファイルをインポートします。

ステップ1

次のリンクから仮想ボックスをダウンロードし、https://www.virtualbox.org/をインストールします

ステップ2

仮想ボックスソフトウェアを開きます。 以下に示すように、[ファイル]をクリックして[アプライアンスのインポート]を選択します。

仮想ボックスソフトウェア

ステップ3

[アプライアンスのインポート]をクリックすると、[仮想アプライアンスのインポート]ウィンドウが表示されます。 以下に示すように、ダウンロードした画像ファイルの場所を選択します。

アプライアンスウィンドウのインポート

*Cloudera QuickStartVM* イメージをインポートした後、仮想マシンを起動します。 この仮想マシンには、Hadoop、cloudera Impala、および必要なすべてのソフトウェアがインストールされています。 VMのスナップショットを以下に示します。

VMのスナップショット

Impalaシェルの起動

Impalaを起動するには、ターミナルを開いて次のコマンドを実行します。

[cloudera@quickstart ~] $ impala-shell

これによりImpalaシェルが起動し、次のメッセージが表示されます。

Starting Impala Shell without Kerberos authentication
Connected to quickstart.cloudera:21000
Server version: impalad version 2.3.0-cdh5.5.0 RELEASE (build
0c891d79aa38f297d244855a32f1e17280e2129b)
********************************************************************************
 Welcome to the Impala shell. Copyright (c) 2015 Cloudera, Inc. All rights reserved.
(Impala Shell v2.3.0-cdh5.5.0 (0c891d7) built on Mon Nov 9 12:18:12 PST 2015)

Press TAB twice to see a list of available commands.
********************************************************************************
[quickstart.cloudera:21000] >

-すべてのimpala-shellコマンドについては、後の章で説明します。

Impalaクエリエディター

  • Impalaシェル*に加えて、Hueブラウザを使用してImpalaと通信できます。 CDH5をインストールしてImpalaを起動した後、ブラウザーを開くと、以下に示すようにclouderaのホームページが表示されます。

Clouderaホームページ

ここで、ブックマーク Hue をクリックしてHueブラウザを開きます。 クリックすると、Hueブラウザのログインページが表示され、資格情報clouderaとclouderaでログが記録されます。

色相ブラウザ

Hueブラウザにログオンするとすぐに、以下に示すようにHueブラウザのクイックスタートウィザードが表示されます。

クイックスタートウィザード

[クエリエディター]ドロップダウンメニューをクリックすると、次のスクリーンショットに示すように、Impalaがサポートするエディターのリストが表示されます。

クエリエディタ

ドロップダウンメニューで[ Impala ]をクリックすると、以下に示すようにImpalaクエリエディターが表示されます。

Impala Query Editor

Impala-アーキテクチャ

Impalaは、Hadoopクラスター内の多くのシステムで実行されるMPP(Massive Parallel Processing)クエリ実行エンジンです。 従来のストレージシステムとは異なり、impalaはストレージエンジンから切り離されています。 これには、Impalaデーモン_(Impalad)_、Impala Statestore、Impalaメタデータまたはメタストアの3つの主要コンポーネントがあります。

Impalaアーキテクチャ

Impalaデーモン(Impalad

Impalaデーモン( impalad とも呼ばれる)は、Impalaがインストールされている各ノードで実行されます。 Impalaシェル、Hueブラウザなどのさまざまなインターフェイスからクエリを受け取り、処理します。

クエリが特定のノードのimpaladに送信されるたびに、そのノードはそのクエリの「コーディネーターノード」として機能します。 複数のクエリは、他のノードで実行されている_Impalad_によっても提供されます。 クエリを受け入れた後、_Impalad_はデータファイルの読み取りと書き込みを行い、Impalaクラスター内の他のImpalaノードに作業を分散することでクエリを並列化します。 さまざまな_Impaladインスタンス_でクエリが処理されている場合、すべてのクエリが結果を中央の調整ノードに返します。

要件に応じて、クエリを専用の_Impalad_に送信したり、クラスター内の別の_Impalad_に負荷分散した方法で送信したりできます。

インパラステートストア

Impalaには、Impalaステートストアと呼ばれる別の重要なコンポーネントがあります。このコンポーネントは、各_Impalad_のヘルスをチェックし、各Impalaデーモンのヘルスを他のデーモンに頻繁に中継します。 これは、Impalaサーバーまたはクラスター内の他のノードが実行されているのと同じノードで実行できます。

Impala State storeデーモンプロセスの名前は_State stored_です。 _Impalad_は、その状態をImpala状態ストアデーモン、つまり_State stored_に報告します。

何らかの理由でノードに障害が発生した場合、_Statestore_はこの障害に関する他のすべてのノードを更新し、そのような通知が他の_impalad_で利用可能になると、他のImpalaデーモンは影響を受けるノードにそれ以上のクエリを割り当てません。

Impalaメタデータとメタストア

Impalaメタデータとメタストアも重要なコンポーネントです。 Impalaは、従来のMySQLまたはPostgreSQLデータベースを使用してテーブル定義を保存します。 テーブルと列の情報とテーブルの定義などの重要な詳細は、メタストアと呼ばれる集中データベースに保存されます。

各Impalaノードは、すべてのメタデータをローカルにキャッシュします。 非常に大量のデータや多数のパーティションを処理する場合、テーブル固有のメタデータの取得にはかなりの時間がかかります。 したがって、ローカルに保存されたメタデータキャッシュは、そのような情報を即座に提供するのに役立ちます。

テーブル定義またはテーブルデータが更新されると、他のImpalaデーモンは、問題のテーブルに対して新しいクエリを発行する前に、最新のメタデータを取得してメタデータキャッシュを更新する必要があります。

クエリ処理インターフェイス

Impalaは、クエリを処理するために、以下にリストする3つのインターフェイスを提供します。

  • Impala-shell -Cloudera VMを使用してImpalaをセットアップした後、エディターでコマンド impala-shell を入力してImpalaシェルを起動できます。 Impalaシェルについては、今後の章で詳しく説明します。
  • * Hueインターフェース*-Hueブラウザを使用してImpalaクエリを処理できます。 Hueブラウザーには、Impalaクエリを入力して実行できるImpalaクエリエディターがあります。 このエディターにアクセスするには、まず、Hueブラウザーにログインする必要があります。
  • * ODBC/JDBCドライバー*-他のデータベースと同様に、ImpalaはODBC/JDBCドライバーを提供します。 これらのドライバーを使用すると、これらのドライバーをサポートするプログラミング言語を介してimpalaに接続し、これらのプログラミング言語を使用してimpalaでクエリを処理するアプリケーションを構築できます。

クエリ実行手順

ユーザーが提供されたインターフェイスのいずれかを使用してクエリを渡すと、クラスター内のImpaladsの1つがこれを受け入れます。 このImpaladは、その特定のクエリのコーディネーターとして扱われます。

クエリを受け取った後、クエリコーディネーターは、Hiveメタストアの Table Schema を使用して、クエリが適切かどうかを検証します。 後で、クエリの実行に必要なデータの場所に関する情報をHDFS名前ノードから収集し、この情報をクエリを実行するために他のインパラに送信します。

他のすべてのImpalaデーモンは、指定されたデータブロックを読み取り、クエリを処理します。 すべてのデーモンがタスクを完了するとすぐに、クエリコーディネーターは結果を収集してユーザーに配信します。

インパラ-シェル

前の章では、clouderaとそのアーキテクチャを使用したImpalaのインストールを見てきました。

  • Impalaシェル(コマンドプロンプト)
  • 色相(ユーザーインターフェイス)
  • ODBCおよびJDBC(サードパーティライブラリ)

この章では、Impalaシェルの起動方法とシェルのさまざまなオプションについて説明します。

Impalaシェルコマンドリファレンス

Impalaシェルのコマンドは、以下で説明するように、一般的なコマンド、クエリ固有のオプション、*テーブルとデータベース固有のオプション*に分類されます。

一般的なコマンド

  • help
  • バージョン
  • 歴史
  • シェル(または)!
  • 接続する
  • 出口|終了する

クエリ固有のオプション

  • 設定/設定解除
  • プロフィール
  • 説明する

テーブルおよびデータベース固有のオプション

  • 変更する
  • 記述する
  • drop
  • インサート
  • 選択する
  • show
  • use

Impalaシェルの起動

以下に示すように、clouderaターミナルを開き、スーパーユーザーとしてサインインし、パスワードとして cloudera を入力します。

[cloudera@quickstart ~]$ su
Password: cloudera
[root@quickstart cloudera]#

次のコマンドを入力してImpalaシェルを起動します-

[root@quickstart cloudera] # impala-shell
Starting Impala Shell without Kerberos authentication
Connected to quickstart.cloudera:21000
Server version: impalad version 2.3.0-cdh5.5.0 RELEASE
(build 0c891d79aa38f297d244855a32f1e17280e2129b)
*********************************************************************

Welcome to the Impala shell. Copyright (c) 2015 Cloudera, Inc. All rights reserved.
(Impala Shell v2.3.0-cdh5.5.0 (0c891d7) built on Mon Nov 9 12:18:12 PST 2015)

Want to know what version of Impala you're connected to? Run the VERSION command to
find out!
*********************************************************************
[quickstart.cloudera:21000] >

Impala –汎用コマンド

Impalaの汎用コマンドを以下に説明します-

ヘルプコマンド

Impalaシェルの help コマンドは、Impalaで使用可能なコマンドのリストを提供します-

[quickstart.cloudera:21000] > help;

Documented commands (type help <topic>):
========================================================
compute  describe  insert  set     unset  with  version
connect  explain   quit    show    values use
exit     history   profile select  shell  tip

Undocumented commands:
=========================================
alter create desc drop help load summary

バージョンコマンド

以下に示すように、 version コマンドはImpalaの現在のバージョンを提供します。

[quickstart.cloudera:21000] > version;
Shell version: Impala Shell v2.3.0-cdh5.5.0 (0c891d7) built on Mon Nov 9
12:18:12 PST 2015

Server version: impalad version 2.3.0-cdh5.5.0 RELEASE (build
0c891d79aa38f297d244855a32f1e17280e2129b)

履歴コマンド

Impalaの history コマンドは、シェルで実行された最後の10個のコマンドを表示します。 以下は history コマンドの例です。 ここでは、バージョン、ヘルプ、表示、使用、および履歴の5つのコマンドを実行しました。

[quickstart.cloudera:21000] > history;
[1]:version;
[2]:help;
[3]:show databases;
[4]:use my_db;
[5]:history;

終了/終了コマンド

以下に示すように、 quit または exit コマンドを使用して、Impalaシェルから抜けることができます。

[quickstart.cloudera:21000] > exit;
Goodbye cloudera

接続コマンド

*connect* コマンドは、Impalaの特定のインスタンスに接続するために使用されます。 インスタンスを指定しない場合、以下に示すようにデフォルトのポート *21000* に接続します。
[quickstart.cloudera:21000] > connect;
Connected to quickstart.cloudera:21000
Server version: impalad version 2.3.0-cdh5.5.0 RELEASE (build
0c891d79aa38f297d244855a32f1e17280e2129b)

Impalaクエリ固有のオプション

Impalaのクエリ固有のコマンドはクエリを受け入れます。 以下に説明します-

説明する

*explain* コマンドは、指定されたクエリの実行プランを返します。
[quickstart.cloudera:21000] > explain select *from sample;
Query: explain select* from sample
+------------------------------------------------------------------------------------+
| Explain String                                                                     |
+------------------------------------------------------------------------------------+
| Estimated Per-Host Requirements: Memory = 48.00MB VCores = 1                       |
| WARNING: The following tables are missing relevant table and/or column statistics. |
| my_db.customers                                                                    |
| 01:EXCHANGE [UNPARTITIONED]                                                        |
| 00:SCAN HDFS [my_db.customers]                                                     |
| partitions = 1/1 files = 6 size = 148B                                             |
+------------------------------------------------------------------------------------+
Fetched 7 row(s) in 0.17s

プロフィール

*profile* コマンドは、最近のクエリに関する低レベルの情報を表示します。 このコマンドは、クエリの診断とパフォーマンスチューニングに使用されます。 以下は *profile* コマンドの例です。 このシナリオでは、 *profile* コマンドは *explain* クエリの低レベル情報を返します。
[quickstart.cloudera:21000] > profile;

Query Runtime Profile:
Query (id=164b1294a1049189:a67598a6699e3ab6):

   Summary:
      Session ID: e74927207cd752b5:65ca61e630ad3ad
      Session Type: BEESWAX
      Start Time: 2016-04-17 23:49:26.08148000 End Time: 2016-04-17 23:49:26.2404000
      Query Type: EXPLAIN
      Query State: FINISHED
      Query Status: OK
      Impala Version: impalad version 2.3.0-cdh5.5.0 RELEASE (build 0c891d77280e2129b)
      User: cloudera
      Connected User: cloudera
      Delegated User:
      Network Address:10.0.2.15:43870
      Default Db: my_db
      Sql Statement: explain select *from sample
      Coordinator: quickstart.cloudera:22000
      : 0ns
      Query Timeline: 167.304ms
         - Start execution: 41.292us (41.292us) - Planning finished: 56.42ms (56.386ms)
         - Rows available: 58.247ms (1.819ms)
         - First row fetched: 160.72ms (101.824ms)
         - Unregister query: 166.325ms (6.253ms)

   ImpalaServer:
      - ClientFetchWaitTimer: 107.969ms
      - RowMaterializationTimer: 0ns

テーブルおよびデータベース固有のオプション

次の表に、Impalaのテーブルおよびデータ固有のオプションを示します。

Sr.No Command & Explanation
1
  • Alter*

    *alter* コマンドは、Impalaのテーブルの構造と名前を変更するために使用されます。
2

Describe

Impalaの describe コマンドは、テーブルのメタデータを提供します。 列やデータ型などの情報が含まれています。 describe コマンドには、ショートカットとして desc があります。

3

Drop

  • drop* コマンドを使用して、Impalaから構造を削除します。構造は、テーブル、ビュー、またはデータベース関数です。
4

insert

Impalaの*挿入*コマンドを使用して、

  • データ(列)をテーブルに追加します。
  • 既存のテーブルのデータをオーバーライドします。 *既存のテーブルのデータをオーバーライドします。
5
  • select*

    *select* ステートメントは、特定のデータセットに対して目的の操作を実行するために使用されます。 何らかのアクションを完了するデータセットを指定します。 selectステートメントの結果を印刷またはファイルに保存できます。
6

show

Impalaの show ステートメントは、テーブル、データベース、テーブルなどのさまざまな構造のメタストアを表示するために使用されます。

7

use

Impalaの use ステートメントを使用して、現在のコンテキストを目的のデータベースに変更します。

Impala-クエリ言語の基本

Impalaデータ型

次の表では、Impalaデータ型について説明します。

Sr.No Data Type & Description
1

BIGINT

このデータ型には数値が格納され、このデータ型の範囲は-9223372036854775808〜9223372036854775807です。 このデータ型は、create tableおよびalter tableステートメントで使用されます。

2

BOOLEAN

このデータ型は true または false 値のみを保存し、create tableステートメントの列定義で使用されます。

3

CHAR

このデータ型は固定長のストレージであり、スペースが埋め込まれ、最大長の255まで保存できます。

4

DECIMAL

このデータ型は10進数値を格納するために使用され、テーブルの作成およびテーブルの変更ステートメントで使用されます。

5

DOUBLE

このデータ型は、正または負の4.94065645841246544e-324d -1.79769313486231570e + 308の範囲の浮動小数点値を格納するために使用されます。

6

FLOAT

このデータ型は、正または負の1.40129846432481707e-45の範囲の単精度浮動値データ型を格納するために使用されます。 3.40282346638528860e + 38。

7

INT

このデータ型は、-2147483648〜2147483647の範囲までの4バイト整数を格納するために使用されます。

8

SMALLINT

このデータ型は、-32768〜32767の範囲までの2バイト整数を格納するために使用されます。

9

STRING

これは、文字列値を格納するために使用されます。

10

TIMESTAMP

このデータ型は、ある時点を表すために使用されます。

11

TINYINT

このデータ型は、-128〜127の範囲までの1バイト整数値を格納するために使用されます。

12

VARCHAR

このデータ型は、最大長65,535までの可変長文字を格納するために使用されます。

13

ARRAY

これは複雑なデータ型であり、可変数の順序付けられた要素を格納するために使用されます。

14

Map

これは複合データ型であり、可変数のキーと値のペアを格納するために使用されます。

15

Struct

これは複雑なデータ型であり、単一のアイテムの複数のフィールドを表すために使用されます。

Impalaのコメント

ImpalaのコメントはSQLのコメントに似ています。一般に、プログラミング言語には、単一行コメントと複数行コメントの2種類のコメントがあります。

単一行コメント-「—」が続くすべての単一行は、Impalaではコメントと見なされます。 以下は、Impalaの単一行コメントの例です。

-- Hello welcome to tutorials point.

複数行コメント- / / の間のすべての行は、Impalaでは複数行コメントと見なされます。 以下は、Impalaの複数行コメントの例です。

/*
Hi this is an example
Of multiline comments in Impala
*/

Impalaの演算子は、SQLの演算子に似ています。 次のリンクリンクをクリックして、SQLチュートリアルを参照してください:/sql/sql-operators [] sql-operators。

Impala-データベースを作成する

Impalaでは、データベースは名前空間内に関連するテーブル、ビュー、および関数を保持する構造です。 HDFSではディレクトリツリーとして表されます。テーブルパーティションとデータファイルが含まれています。 この章では、Impalaでデータベースを作成する方法について説明します。

CREATE DATABASEステートメント

  • CREATE DATABASEステートメント*は、Impalaで新しいデータベースを作成するために使用されます。

構文

以下は、 CREATE DATABASE ステートメントの構文です。

CREATE DATABASE IF NOT EXISTS database_name;

ここで、 IF NOT EXISTS はオプションの句です。 この句を使用すると、同じ名前の既存のデータベースがない場合にのみ、指定された名前のデータベースが作成されます。

以下は、 create database statement の例です。 この例では、* my_database。*という名前のデータベースを作成しました

[quickstart.cloudera:21000] > CREATE DATABASE IF NOT EXISTS my_database;
*cloudera impala-shell* で上記のクエリを実行すると、次の出力が得られます。
Query: create DATABASE my_database

Fetched 0 row(s) in 0.21s

検証

*SHOW DATABASES* クエリはImpalaのデータベースのリストを提供するため、 *SHOW* DATABASESステートメントを使用して、データベースが作成されているかどうかを確認できます。 ここで、リストに新しく作成されたデータベース *my_db* を確認できます。
[quickstart.cloudera:21000] > show databases;

Query: show databases
+-----------------------------------------------+
| name                                          |
+-----------------------------------------------+
| _impala_builtins                              |
| default                                       |
|  my_db                                        |
+-----------------------------------------------+
Fetched 3 row(s) in 0.20s
[quickstart.cloudera:21000] >

Hdfsパス

HDFSファイルシステムにデータベースを作成するには、データベースを作成する場所を指定する必要があります。

CREATE DATABASE IF NOT EXISTS database_name LOCATION hdfs_path;

Hue Browserを使用したデータベースの作成

Impala Queryエディターを開き、その中に CREATE DATABASE ステートメントを入力します。 その後、次のスクリーンショットに示すように、実行ボタンをクリックします。

実行ボタン

クエリを実行した後、カーソルをドロップダウンメニューの上部にそっと移動すると、更新記号が表示されます。 更新記号をクリックすると、データベースのリストが更新され、最近の変更がデータベースに適用されます。

シンボルの更新

検証

エディターの左側の見出し DATABASE の下にある*ドロップダウンボックス*をクリックします。 システム内のデータベースのリストを見ることができます。 ここでは、以下に示すように、新しく作成されたデータベース my_db を確認できます。

検証

注意深く観察すると、デフォルトのデータベースとともに、リストに my_db など、1つのデータベースしか表示されません。

Impala-データベースの削除

Impalaの* DROP DATABASEステートメント*は、Impalaからデータベースを削除するために使用されます。 データベースを削除する前に、データベースからすべてのテーブルを削除することをお勧めします。

構文

以下は、 DROP DATABASE ステートメントの構文です。

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT |
CASCADE] [LOCATION hdfs_path];

ここで、 IF EXISTS はオプションの句です。 指定された名前のデータベースが存在するときにこの句を使用すると、削除されます。 また、指定された名前の既存のデータベースがない場合、操作は実行されません。

以下は、 DROP DATABASE ステートメントの例です。 Impalaに sample_database という名前のデータベースがあるとします。

そして、 SHOW DATABASES ステートメントを使用してデータベースのリストを検証すると、その中の名前を観察します。

[quickstart.cloudera:21000] > SHOW DATABASES;

Query: show DATABASES
+-----------------------+
| name                  |
+-----------------------+
| _impala_builtins      |
| default               |
| my_db                 |
| sample_database       |
+-----------------------+
Fetched 4 row(s) in 0.11s

これで、以下に示すように* DROP DATABASEステートメント*を使用してこのデータベースを削除できます。

 < DROP DATABASE IF EXISTS sample_database;

これにより、指定したデータベースが削除され、次の出力が得られます。

Query: drop DATABASE IF EXISTS sample_database;

検証

*SHOW DATABASES* ステートメントを使用して、特定のデータベースが削除されているかどうかを確認できます。 ここで、 *sample_database* という名前のデータベースがデータベースのリストから削除されていることがわかります。
[quickstart.cloudera:21000] > SHOW DATABASES;

Query: show DATABASES
+----------------------+
| name                 |
+----------------------+
| _impala_builtins     |
| default              |
| my_db                |
+----------------------+
Fetched 3 row(s) in 0.10s
[quickstart.cloudera:21000] >

カスケード

一般に、データベースを削除するには、データベース内のすべてのテーブルを手動で削除する必要があります。 カスケードを使用する場合、Impalaは指定されたデータベース内のテーブルを削除する前に削除します。

Impalaに sample という名前のデータベースがあり、 studenttest という2つのテーブルが含まれているとします。 このデータベースを直接削除しようとすると、次のようなエラーが表示されます。

[quickstart.cloudera:21000] > DROP database sample;
Query: drop database sample
ERROR:
ImpalaRuntimeException: Error making 'dropDatabase' RPC to Hive Metastore:
CAUSED BY: InvalidOperationException: Database sample is not empty. One or more
tables exist.
*cascade* を使用すると、以下に示すように、このデータベースを直接(手動でその内容を削除せずに)削除できます。
[quickstart.cloudera:21000] > DROP database sample cascade;
Query: drop database sample cascade

注意-Impalaの「 current database 」は削除できません。 したがって、データベースを削除する前に、現在のコンテキストが削除するデータベース以外のデータベースに設定されていることを確認する必要があります。

Hueブラウザを使用したデータベースの削除

Impalaクエリエディターを開き、その中に DELETE DATABASE ステートメントを入力し、以下に示すように実行ボタンをクリックします。 デフォルトのデータベースに加えて、 my_db、my_database 、および sample_database の3つのデータベースがあるとします。 ここでは、my_databaseという名前のデータベースを削除しています。

データベースの削除

クエリを実行した後、ドロップダウンメニューの上部にカーソルを静かに移動します。 次に、以下のスクリーンショットに示すように、更新シンボルが表示されます。 更新記号をクリックすると、データベースのリストが更新され、最近行われた変更がデータベースに適用されます。

データベースリスト

検証

エディターの左側の見出し DATABASE の下にある*ドロップダウン*をクリックします。 そこで、システム内のデータベースのリストを見ることができます。 ここでは、以下に示すように、新しく作成されたデータベース my_db を確認できます。

ドロップダウン

注意深く観察すると、デフォルトのデータベースとともに、リストに my_db など、1つのデータベースしか表示されません。

Impala-データベースを選択

Impalaに接続したら、使用可能なデータベースの中から1つを選択する必要があります。 Impalaの* USE DATABASEステートメント*は、現在のセッションを別のデータベースに切り替えるために使用されます。

構文

以下は USE ステートメントの構文です。

USE db_name;

以下は* USEステートメント*の例です。 まず、以下に示すように、 sample_database という名前のデータベースを作成します。

> CREATE DATABASE IF NOT EXISTS sample_database;

これにより、新しいデータベースが作成され、次の出力が得られます。

Query: create DATABASE IF NOT EXISTS my_db2

Fetched 0 row(s) in 2.73s
*SHOW DATABASES* ステートメントを使用してデータベースのリストを確認すると、その中に新しく作成されたデータベースの名前を確認できます。
> SHOW DATABASES;

Query: show DATABASES
+-----------------------+
| name                  |
+-----------------------+
| _impala_builtins      |
| default               |
| my_db                 |
| sample_database       |
+-----------------------+
Fetched 4 row(s) in 0.11s

次に、以下に示すように USE ステートメントを使用して、新しく作成されたデータベース(sample_database)にセッションを切り替えましょう。

> USE sample_database;

これにより、現在のコンテキストがsample_databaseに変更され、次のようにメッセージが表示されます。

Query: use sample_database

Hue Browserを使用したデータベースの選択

Impalaの Query Editor の左側に、次のスクリーンショットに示すドロップダウンメニューがあります。

データベースの選択

ドロップダウンメニューをクリックすると、以下に示すように、Impalaのすべてのデータベースのリストが表示されます。

データベースの選択ドロップダウンリスト

現在のコンテキストを変更する必要があるデータベースを選択するだけです。

Impala-テーブルステートメントの作成

*CREATE TABLE* ステートメントは、Impalaの必要なデータベースに新しいテーブルを作成するために使用されます。 基本的なテーブルを作成するには、テーブルに名前を付け、その列と各列のデータ型を定義する必要があります。

構文

以下は、 CREATE TABLE ステートメントの構文です。 ここで、 IF NOT EXISTS はオプションの句です。 この句を使用すると、指定された名前のテーブルが作成されますが、指定されたデータベースに同じ名前のテーブルが存在しない場合のみです。

create table IF NOT EXISTS database_name.table_name (
   column1 data_type,
   column2 data_type,
   column3 data_type,
   ………
   columnN data_type
);

CREATE TABLEは、データベースシステムに新しいテーブルを作成するよう指示するキーワードです。 テーブルの一意の名前または識別子は、CREATE TABLEステートメントの後に続きます。 オプションで、 table_name とともに database_name を指定できます。

次に、テーブル作成ステートメントの例を示します。 この例では、データベース my_dbstudent という名前のテーブルを作成しました。

[quickstart.cloudera:21000] > CREATE TABLE IF NOT EXISTS my_db.student
   (name STRING, age INT, contact INT );

上記のステートメントを実行すると、指定した名前のテーブルが作成され、次の出力が表示されます。

Query: create table student (name STRING, age INT, phone INT)

Fetched 0 row(s) in 0.48s

検証

*show Tables* クエリは、Impalaの現在のデータベース内のテーブルのリストを提供します。 したがって、 *Show Tables* ステートメントを使用して、テーブルが作成されているかどうかを確認できます。

まず、以下に示すように、必要なテーブルが存在するデータベースにコンテキストを切り替える必要があります。

[quickstart.cloudera:21000] > use my_db;
Query: use my_db

その後、 show tables クエリを使用してテーブルのリストを取得すると、以下に示すように、 student という名前のテーブルを確認できます。

[quickstart.cloudera:21000] > show tables;

Query: show tables
+-----------+
| name      |
+-----------+
| student   |
+-----------+
Fetched 1 row(s) in 0.10s

HDFSパス

HDFSファイルシステムでデータベースを作成するには、以下に示すようにデータベースを作成する場所を指定する必要があります。

CREATE DATABASE IF NOT EXISTS database_name LOCATION hdfs_path;

Hue Browserを使用したデータベースの作成

impala Queryエディターを開き、その中に CREATE Table ステートメントを入力します。 次のスクリーンショットに示すように、実行ボタンをクリックします。

データベースの作成

クエリを実行した後、カーソルをドロップダウンメニューの上部にそっと移動すると、更新記号が表示されます。 更新記号をクリックすると、データベースのリストが更新され、最近行われた変更がデータベースに適用されます。

データベースドロップダウンの作成

検証

エディターの左側の見出し DATABASE の下にある*ドロップダウン*をクリックします。 そこでデータベースのリストを見ることができます。 以下に示すように、データベース my_db を選択します。

データベース検証の作成

データベース my_db を選択すると、以下に示すように、その中のテーブルのリストを見ることができます。 以下に示すように、新しく作成された student テーブルを見つけることができます。

My DBデータベースの作成

Impala-ステートメントの挿入

Impalaの INSERT ステートメントには、 intooverwrite の2つの句があります。 into 句を含むInsertステートメントは、データベース内の既存のテーブルに新しいレコードを追加するために使用されます。

構文

次のように INSERT ステートメントの2つの基本的な構文があります-

insert into table_name (column1, column2, column3,...columnN)

values (value1, value2, value3,...valueN);

ここで、column1、column2、…​ columnNは、データを挿入するテーブル内の列の名前です。

列名を指定せずに値を追加することもできますが、そのためには、以下に示すように、値の順序が表の列と同じ順序であることを確認する必要があります。

Insert into table_name values (value1, value2, value2);

CREATE TABLEは、データベースシステムに新しいテーブルを作成するよう指示するキーワードです。 テーブルの一意の名前または識別子は、CREATE TABLEステートメントの後に続きます。 オプションで、 table_name とともに database_name を指定できます。

以下に示すように、Impalaで student という名前のテーブルを作成したとします。

create table employee (Id INT, name STRING, age INT,address STRING, salary BIGINT);

以下は、 employee という名前のテーブルにレコードを作成する例です。

[quickstart.cloudera:21000] > insert into employee
(ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Ramesh', 32, 'Ahmedabad', 20000 );

上記のステートメントを実行すると、レコードが employee という名前のテーブルに挿入され、次のメッセージが表示されます。

Query: insert into employee (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Ramesh',
   32, 'Ahmedabad', 20000 )
Inserted 1 row(s) in 1.32s

以下に示すように、列名を指定せずに別のレコードを挿入できます。

[quickstart.cloudera:21000] > insert into employee values (2, 'Khilan', 25,
   'Delhi', 15000 );

上記のステートメントを実行すると、レコードが employee という名前のテーブルに挿入され、次のメッセージが表示されます。

Query: insert into employee values (2, 'Khilan', 25, 'Delhi', 15000 )
Inserted 1 row(s) in 0.31s

以下に示すように、従業員テーブルにさらにいくつかのレコードを挿入できます。

Insert into employee values (3, 'kaushik', 23, 'Kota', 30000 );

Insert into employee values (4, 'Chaitali', 25, 'Mumbai', 35000 );

Insert into employee values (5, 'Hardik', 27, 'Bhopal', 40000 );

Insert into employee values (6, 'Komal', 22, 'MP', 32000 );

値を挿入すると、Impalaの employee テーブルは次のようになります。

+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 5  | Hardik   | 27  | Bhopal    | 40000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
| 3  | kaushik  | 23  | Kota      | 30000  |
| 6  | Komal    | 22  | MP        | 32000  |
+----+----------+-----+-----------+--------+

テーブル内のデータを上書きする

上書き句を使用して、テーブルのレコードを上書きできます。 上書きされたレコードはテーブルから完全に削除されます。 上書き句を使用する構文は次のとおりです。

Insert overwrite table_name values (value1, value2, value2);

以下は、 overwrite 句の使用例です。

[quickstart.cloudera:21000] > Insert overwrite employee values (1, 'Ram', 26,
   'Vishakhapatnam', 37000 );

上記のクエリを実行すると、指定したレコードでテーブルデータが上書きされ、次のメッセージが表示されます。

Query: insert overwrite employee values (1, 'Ram', 26, 'Vishakhapatnam', 37000 )
Inserted 1 row(s) in 0.31s

テーブルを検証すると、以下に示すように、テーブル employee のすべてのレコードが新しいレコードで上書きされていることがわかります。

+----+------+-----+---------------+--------+
| id | name | age | address       | salary |
+----+------+-----+---------------+--------+
| 1  | Ram  | 26  | Vishakhapatnam| 37000  |
+----+------+-----+---------------+--------+

Hueブラウザを使用したデータの挿入

Impala Queryエディターを開き、その中に*挿入*ステートメントを入力します。 次のスクリーンショットに示すように、実行ボタンをクリックします。

データの挿入

クエリ/ステートメントの実行後、このレコードがテーブルに追加されます。

Impala-Selectステートメント

Impala SELECT ステートメントは、データベース内の1つ以上のテーブルからデータをフェッチするために使用されます。 このクエリは、テーブルの形式でデータを返します。

構文

Impalaの select ステートメントの構文は次のとおりです。

SELECT column1, column2, columnN from table_name;

ここで、column1、column2 …​は、値を取得するテーブルのフィールドです。 あなたがフィールドで利用可能なすべてのフィールドを取得したい場合は、次の構文を使用することができます-

SELECT * FROM table_name;

Impalaに customers という名前のテーブルがあり、次のデータがあるとします-

ID    NAME       AGE    ADDRESS      SALARY
---   -------    ---    ----------   -------
1     Ramesh     32     Ahmedabad    20000
2     Khilan     25     Delhi        15000
3     Hardik     27     Bhopal       40000
4     Chaitali   25     Mumbai       35000
5     kaushik    23     Kota         30000
6     Komal      22     Mp           32000

以下に示すように、 select ステートメントを使用して、 customers テーブルのすべてのレコードの id、name 、および age をフェッチできます-

[quickstart.cloudera:21000] > select id, name, age from customers;

上記のクエリを実行すると、Impalaは指定されたテーブルからすべてのレコードのID、名前、年齢を取得し、以下に示すように表示します。

Query: select id,name,age from customers

+----+----------+-----+
| id | name     | age |
| 1  | Ramesh   | 32  |
| 2  | Khilan   | 25  |
| 3  | Hardik   | 27  |
| 4  | Chaitali | 25  |
| 5  | kaushik  | 23  |
| 6  | Komal    | 22  |
+----+----------+-----+

Fetched 6 row(s) in 0.66s

以下に示すように、 select クエリを使用して、 customers テーブルから all レコードをフェッチすることもできます。

[quickstart.cloudera:21000] > select name, age from customers;
Query: select * from customers

上記のクエリを実行すると、Impalaは、以下に示すように、指定されたテーブルからすべてのレコードをフェッチして表示します。

+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 3  | Hardik   | 27  | Bhopal    | 40000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
| 5  | kaushik  | 23  | Kota      | 30000  |
| 6  | Komal    | 22  | MP        | 32000  |
+----+----------+-----+-----------+--------+

Fetched 6 row(s) in 0.66s

Hueを使用してレコードを取得する

Impala Queryエディターを開き、その中に select ステートメントを入力します。 次のスクリーンショットに示すように、実行ボタンをクリックします。

レコードの取得

クエリを実行した後、下にスクロールして[結果]タブを選択すると、以下に示すように、指定したテーブルのレコードのリストが表示されます。

レコードの取得結果

Impala-ステートメントの説明

Impalaの describe ステートメントは、テーブルの説明を提供するために使用されます。 このステートメントの結果には、列名やそのデータ型などのテーブルに関する情報が含まれています。

構文

Impala describe ステートメントの構文は次のとおりです。

Describe table_name;

たとえば、Impalaに customer という名前のテーブルがあり、次のデータがあるとします-

ID    NAME     AGE    ADDRESS     SALARY
--- --------- ----- ----------- -----------
1   Ramesh     32    Ahmedabad    20000
2   Khilan     25    Delhi        15000
3   Hardik     27    Bhopal       40000
4   Chaitali   25    Mumbai       35000
5   kaushik    23    Kota         30000
6   Komal      22    Mp           32000

以下に示すように、 describe ステートメントを使用して customer テーブルの説明を取得できます-

[quickstart.cloudera:21000] > describe customer;

上記のクエリを実行すると、Impalaは指定されたテーブルの*メタデータ*を取得し、以下に示すように表示します。

Query: describe customer

+---------+--------+---------+
| name    | type   | comment |
+---------+--------+---------+
| id      | int    |         |
| name    | string |         |
| age     | int    |         |
| address | string |         |
| salary  | bigint |         |
+---------+--------+---------+

Fetched 5 row(s) in 0.51s

Hueを使用してレコードを記述する

Impalaクエリエディターを開き、その中に describe ステートメントを入力し、次のスクリーンショットに示すように実行ボタンをクリックします。

レコードの説明

クエリを実行した後、下にスクロールして[結果]タブを選択すると、以下に示すようにテーブルのメタデータを確認できます。

結果タブ

Impala-テーブルの変更

ImpalaのAlter tableステートメントは、特定のテーブルで変更を実行するために使用されます。 このステートメントを使用して、既存のテーブルの列を追加、削除、または変更でき、名前を変更することもできます。

この章では、構文と例を使用して、さまざまなタイプのALTERステートメントについて説明します。 まず、Impalaの my_db データベースに次のデータを持つ customers という名前のテーブルがあると仮定します。

ID   NAME     AGE   ADDRESS    SALARY
--- --------- ----- ----------- --------
1   Ramesh    32    Ahmedabad   20000
2   Khilan    25    Delhi       15000
3   Hardik    27    Bhopal      40000
4   Chaitali  25    Mumbai      35000
5   kaushik   23    Kota        30000
6   Komal     22    Mp          32000

また、データベース my_db のテーブルのリストを取得すると、以下に示すように、その中に customers テーブルが見つかります。

[quickstart.cloudera:21000] > show tables;

Query: show tables
+-----------+
| name      |
+-----------+
| customers |
| employee  |
| student   |
| student1  |
+-----------+

テーブルの名前を変更する

構文

既存のテーブルの名前を変更する ALTER TABLE の基本的な構文は次のとおりです-

ALTER TABLE [old_db_name.]old_table_name RENAME TO [new_db_name.]new_table_name

以下は、 alter ステートメントを使用してテーブルの名前を変更する例です。 ここでは、テーブル customers の名前をユーザーに変更しています。

[quickstart.cloudera:21000] > ALTER TABLE my_db.customers RENAME TO my_db.users;

上記のクエリを実行した後、Impalaは必要に応じてテーブルの名前を変更し、次のメッセージを表示します。

Query: alter TABLE my_db.customers RENAME TO my_db.users
*show tables* ステートメントを使用して、現在のデータベースのテーブルのリストを確認できます。 *customers* ではなく、 *users* という名前のテーブルを見つけることができます。
Query: show tables
+----------+
| name     |
+----------+
| employee |
| student  |
| student1 |
| users    |
+----------+
Fetched 4 row(s) in 0.10s

テーブルに列を追加する

構文

既存のテーブルに列を追加する ALTER TABLE の基本的な構文は次のとおりです-

ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])

次のクエリは、既存のテーブルに列を追加する方法を示す例です。 ここでは、2つの列account_noおよびphone_number(両方ともbigintデータ型)を users テーブルに追加しています。

[quickstart.cloudera:21000] > ALTER TABLE users ADD COLUMNS (account_no BIGINT,
phone_no BIGINT);

上記のクエリを実行すると、指定された列が student という名前のテーブルに追加され、次のメッセージが表示されます。

Query: alter TABLE users ADD COLUMNS (account_no BIGINT, phone_no BIGINT)

テーブル users のスキーマを検証すると、以下に示すように、新しく追加された列を見つけることができます。

quickstart.cloudera:21000] > describe users;

Query: describe users
+------------+--------+---------+
| name       | type   | comment |
+------------+--------+---------+
| id         | int    |         |
| name       | string |         |
| age        | int    |         |
| address    | string |         |
| salary     | bigint |         |
| account_no | bigint |         |
| phone_no   | bigint |         |
+------------+--------+---------+
Fetched 7 row(s) in 0.20s

テーブルから列を削除する

構文

既存のテーブルの DROP COLUMN へのALTER TABLEの基本的な構文は次のとおりです-

ALTER TABLE name DROP [COLUMN] column_name

次のクエリは、既存のテーブルから列を削除する例です。 ここでは、 account_no という名前の列を削除しています。

[quickstart.cloudera:21000] > ALTER TABLE users DROP account_no;

上記のクエリを実行すると、Impalaはaccount_noという名前の列を削除し、次のメッセージを表示します。

Query: alter TABLE users DROP account_no

テーブル users のスキーマを確認すると、 account_no という名前の列は削除されているため、見つかりません。

[quickstart.cloudera:21000] > describe users;

Query: describe users
+----------+--------+---------+
| name     | type   | comment |
+----------+--------+---------+
| id       | int    |         |
| name     | string |         |
| age      | int    |         |
| address  | string |         |
| salary   | bigint |         |
| phone_no | bigint |         |
+----------+--------+---------+
Fetched 6 row(s) in 0.11s

列の名前とタイプを変更する

構文

既存のテーブルの列の名前とデータ型を変更するALTER TABLEの基本的な構文は次のとおりです-

ALTER TABLE name CHANGE column_name new_name new_type

以下は、alterステートメントを使用して列の名前とデータ型を変更する例です。 ここでは、列の名前を phone_noをemail に変更し、そのデータ型を string に変更しています。

[quickstart.cloudera:21000] > ALTER TABLE users CHANGE phone_no e_mail string;

上記のクエリを実行すると、Impalaは指定された変更を行い、次のメッセージを表示します。

Query: alter TABLE users CHANGE phone_no e_mail string
*describe* ステートメントを使用して、テーブルユーザーのメタデータを確認できます。 Impalaが指定された列に必要な変更を加えたことを確認できます。
[quickstart.cloudera:21000] > describe users;
Query: describe users
+----------+--------+---------+
| name     | type   | comment |
+----------+--------+---------+
| id       | int    |         |
| name     | string |         |
| age      | int    |         |
| address  | string |         |
| salary   | bigint |         |
| phone_no | bigint |         |
+----------+--------+---------+
Fetched 6 row(s) in 0.11s

Hueを使用してテーブルを変更する

Impala Queryエディターを開き、その中に alter ステートメントを入力し、次のスクリーンショットに示すように実行ボタンをクリックします。

テーブルの変更

上記のクエリを実行すると、テーブル customers の名前が users に変更されます。 同様に、すべての alter クエリを実行できます。

Impala-テーブルをドロップする

Impalaの drop table ステートメントは、Impalaの既存のテーブルを削除するために使用されます。 このステートメントは、内部テーブルの基になるHDFSファイルも削除します

-テーブルを削除すると、テーブルで使用可能なすべての情報も永久に失われるため、このコマンドの使用には注意が必要です。

構文

以下は、 DROP TABLE ステートメントの構文です。 ここで、 IF EXISTS はオプションの句です。 この句を使用すると、指定された名前のテーブルは、存在する場合にのみ削除されます。 それ以外の場合、操作は実行されません。

DROP table database_name.table_name;

IF EXISTS句なしで存在しないテーブルを削除しようとすると、エラーが生成されます。 オプションで、t * able_name とともに *database_name を指定できます。

以下に示すように、データベース my_db 内のテーブルのリストを最初に確認しましょう。

[quickstart.cloudera:21000] > show tables;

Query: show tables
+------------+
| name       |
+------------+
| customers  |
| employee   |
| student    |
+------------+
Fetched 3 row(s) in 0.11s

上記の結果から、データベース my_db に3つのテーブルが含まれていることがわかります。

以下は drop table statement の例です。 この例では、 student という名前のテーブルをデータベース my_db から削除しています。

[quickstart.cloudera:21000] > drop table if exists my_db.student;

上記のクエリを実行すると、指定した名前のテーブルが削除され、次の出力が表示されます。

Query: drop table if exists student

検証

*show Tables* クエリは、Impalaの現在のデータベース内のテーブルのリストを提供します。 したがって、 *Show Tables* ステートメントを使用して、テーブルが削除されているかどうかを確認できます。

まず、以下に示すように、必要なテーブルが存在するデータベースにコンテキストを切り替える必要があります。

[quickstart.cloudera:21000] > use my_db;
Query: use my_db

その後、 show tables クエリを使用してテーブルのリストを取得すると、 student という名前のテーブルがリストにないことを確認できます。

[quickstart.cloudera:21000] > show tables;

Query: show tables
+-----------+
| name      |
+-----------+
| customers |
| employee  |
| student   |
+-----------+
Fetched 3 row(s) in 0.11s

Hue Browserを使用したデータベースの作成

Impala Queryエディターを開き、その中に drop Table ステートメントを入力します。 次のスクリーンショットに示すように、実行ボタンをクリックします。

データベースの作成

クエリを実行した後、カーソルをドロップダウンメニューの上部にそっと移動すると、更新記号が表示されます。 更新記号をクリックすると、データベースのリストが更新され、最近行われた変更がデータベースに適用されます。

データベースドロップダウンの作成

検証

エディターの左側の見出し DATABASE の下にある*ドロップダウン*をクリックします。 そこでデータベースのリストを見ることができます。以下に示すように、データベース my_db を選択します。

データベース検証の作成

データベース my_db を選択すると、以下に示すように、その中のテーブルのリストを見ることができます。 以下に示すように、削除されたテーブル student がリストにありません。

データベースMY DBの作成

Impala-テーブルを切り捨てる

Impalaの Truncate Table ステートメントは、既存のテーブルからすべてのレコードを削除するために使用されます。

DROP TABLEコマンドを使用して完全なテーブルを削除することもできますが、データベースから完全なテーブル構造を削除し、データを保存する場合はこのテーブルをもう一度作成する必要があります。

構文

以下は、truncate tableステートメントの構文です。

truncate table_name;

Impalaに customers という名前のテーブルがあり、その内容を確認すると、次の結果が得られているとします。 これは、顧客テーブルに6つのレコードが含まれることを意味します。

[quickstart.cloudera:21000] > select *from customers;

Query: select* from customers
+----+----------+-----+-----------+--------+--------+
| id | name     | age | address   | salary | e_mail |
+----+----------+-----+-----------+--------+--------+
| 1  | Ramesh   | 32  | Ahmedabad | 20000  | NULL   |
| 2  | Khilan   | 25  | Delhi     | 15000  | NULL   |
| 3  | kaushik  | 23  | Kota      | 30000  | NULL   |
| 4  | Chaitali | 25  | Mumbai    | 35000  | NULL   |
| 5  | Hardik   | 27  | Bhopal    | 40000  | NULL   |
| 6  | Komal    | 22  | MP        | 32000  | NULL   |
+----+----------+-----+-----------+--------+--------+

以下は、 truncate statement を使用してImpalaでテーブルを切り捨てる例です。 ここでは、 customers という名前のテーブルのすべてのレコードを削除しています。

[quickstart.cloudera:21000] > truncate customers;

上記のステートメントを実行すると、Impalaは指定されたテーブルのすべてのレコードを削除し、次のメッセージを表示します。

Query: truncate customers

Fetched 0 row(s) in 0.37s

検証

*select* ステートメントを使用して、削除操作の後に顧客テーブルの内容を確認すると、次のように空の行が表示されます。
[quickstart.cloudera:21000] > select *from customers;
Query: select* from customers

Fetched 0 row(s) in 0.12s

Hueブラウザを使用したテーブルの切り捨て

Impala Queryエディターを開き、その中に truncate ステートメントを入力します。 次のスクリーンショットに示すように、実行ボタンをクリックします。

切り捨て表

クエリ/ステートメントを実行すると、テーブルのすべてのレコードが削除されます。

Impala-表を表示

Impalaの show tables ステートメントを使用して、現在のデータベース内のすべての既存のテーブルのリストを取得します。

以下は、 show tables ステートメントの例です。 特定のデータベース内のテーブルのリストを取得する場合は、まず、必要なデータベースにコンテキストを変更し、以下に示すように show tables ステートメントを使用してその中のテーブルのリストを取得します。

[quickstart.cloudera:21000] > use my_db;
Query: use my_db
[quickstart.cloudera:21000] > show tables;

上記のクエリを実行すると、Impalaは指定されたデータベース内のすべてのテーブルのリストを取得し、以下に示すように表示します。

Query: show tables
+-----------+
| name      |
+-----------+
| customers |
| employee  |
+-----------+
Fetched 2 row(s) in 0.10s

Hueを使用したテーブルのリスト

impala Queryエディターを開き、コンテキストを my_db として選択し、その中に show tables ステートメントを入力し、次のスクリーンショットに示すように実行ボタンをクリックします。

テーブルのリスト

クエリを実行した後、下にスクロールして[結果]タブを選択すると、次のようにテーブルのリストが表示されます。

テーブル結果の一覧表示

Impala-ビューの作成

ビューは、関連付けられた名前でデータベースに保存されるImpalaクエリ言語のステートメントにすぎません。 これは、事前定義されたSQLクエリの形式のテーブルの構成です。

ビューには、テーブルのすべての行または選択した行を含めることができます。 ビューは、1つまたは複数のテーブルから作成できます。 ビューは、ユーザーがすることができます-

  • ユーザーまたはユーザーのクラスが自然または直感的に見えるようにデータを構造化します。
  • データへのアクセスを制限して、ユーザーが必要なものだけを表示し(場合によっては)変更できるようにします。
  • レポートの生成に使用できるさまざまなテーブルのデータを要約します。

Impalaの Create View ステートメントを使用してビューを作成できます。

構文

create viewステートメントの構文は次のとおりです。 IF NOT EXISTS はオプションの句です。 この句を使用すると、指定された名前のテーブルが作成されますが、指定されたデータベースに同じ名前のテーブルが存在しない場合のみです。

Create View IF NOT EXISTS view_name as Select statement

たとえば、Impalaの my_db データベースに customers という名前のテーブルがあり、次のデータがあるとします。

ID  NAME      AGE   ADDRESS     SALARY
--- --------- ----- ----------- --------
1   Ramesh    32    Ahmedabad   20000
2   Khilan    25    Delhi       15000
3   Hardik    27    Bhopal      40000
4   Chaitali  25    Mumbai      35000
5   kaushik   23    Kota        30000
6   Komal     22    MP          32000

以下は、 Create View Statement の例です。 この例では、列、名前、および年齢を含む customers テーブルとしてビューを作成しています。

[quickstart.cloudera:21000] > CREATE VIEW IF NOT EXISTS customers_view AS
select name, age from customers;

上記のクエリを実行すると、目的の列を持つビューが作成され、次のメッセージが表示されます。

Query: create VIEW IF NOT EXISTS sample AS select * from customers
Fetched 0 row(s) in 0.33s

検証

以下に示す select ステートメントを使用して、作成したばかりのビューの内容を確認できます。

[quickstart.cloudera:21000] > select *from customers_view;

これにより、次の結果が生成されます。

Query: select* from customers_view
+----------+-----+
| name     | age |
+----------+-----+
| Komal    | 22  |
| Khilan   | 25  |
| Ramesh   | 32  |
| Hardik   | 27  |
| Chaitali | 25  |
| kaushik  | 23  |
+----------+-----+
Fetched 6 row(s) in 4.80s

Hueを使用してビューを作成する

Impala Queryエディターを開き、コンテキストを my_db として選択し、その中に Create View ステートメントを入力し、次のスクリーンショットに示すように実行ボタンをクリックします。

ビューの作成

クエリを実行した後、下にスクロールすると、以下に示すように、テーブルのリストに作成された sample という view が表示されます。

ビューとサンプルの作成

Impala-ビューの変更

Impalaの Alter View ステートメントは、ビューを変更するために使用されます。 このステートメントを使用して、ビューの名前、データベース、およびそれに関連付けられたクエリを変更できます。

*view* は論理構造であるため、 *alter view* クエリの影響を受ける物理データはありません。

構文

以下は Alter View ステートメントの構文です

ALTER VIEW database_name.view_name as Select statement

たとえば、Impalaの my_db データベースに customers_view という名前のビューがあり、次の内容があるとします。

+----------+-----+
| name     | age |
+----------+-----+
| Komal    | 22  |
| Khilan   | 25  |
| Ramesh   | 32  |
| Hardik   | 27  |
| Chaitali | 25  |
| kaushik  | 23  |
+----------+-----+

以下は Alter View Statement の例です。 この例では、 customers_view に名前と年齢の代わりにid、name、salaryの列を含めています。

[quickstart.cloudera:21000] > Alter view customers_view as select id, name,
salary from customers;

上記のクエリを実行すると、Impalaは customers_view に対して指定された変更を行い、次のメッセージを表示します。

Query: alter view customers_view as select id, name, salary from customers

検証

以下に示す select ステートメントを使用して、 customers_view という名前の view の内容を確認できます。

[quickstart.cloudera:21000] > select *from customers_view;
Query: select* from customers_view

これにより、次の結果が生成されます。

+----+----------+--------+
| id | name     | salary |
+----+----------+--------+
| 3  | kaushik  | 30000  |
| 2  | Khilan   | 15000  |
| 5  | Hardik   | 40000  |
| 6  | Komal    | 32000  |
| 1  | Ramesh   | 20000  |
| 4  | Chaitali | 35000  |
+----+----------+--------+
Fetched 6 row(s) in 0.69s

Hueを使用してビューを変更する

Impala Queryエディターを開き、コンテキストを my_db として選択し、その中に Alter View ステートメントを入力し、次のスクリーンショットに示すように実行ボタンをクリックします。

ビューの変更

クエリの実行後、 sample という view はそれに応じて変更されます。

Impala-ビューをドロップ

Impalaの Drop View クエリは、既存のビューを削除するために使用されます。 view は論理構造であるため、 drop view クエリの影響を受ける物理データはありません。

構文

以下は、ドロップビューステートメントの構文です。

DROP VIEW database_name.view_name;

たとえば、Impalaの my_db データベースに customers_view という名前のビューがあり、次の内容があるとします。

+----------+-----+
| name     | age |
+----------+-----+
| Komal    | 22  |
| Khilan   | 25  |
| Ramesh   | 32  |
| Hardik   | 27  |
| Chaitali | 25  |
| kaushik  | 23  |
+----------+-----+

以下は Drop View Statement の例です。 この例では、 drop view クエリを使用して、 customers_view という名前の view を削除しようとしています。

[quickstart.cloudera:21000] > Drop view customers_view;

上記のクエリを実行すると、Impalaは指定されたビューを削除し、次のメッセージを表示します。

Query: drop view customers_view

検証

*show tables* ステートメントを使用してテーブルのリストを確認すると、 *customers_view* という名前の *view* が削除されていることがわかります。
[quickstart.cloudera:21000] > show tables;

これにより、次の結果が生成されます。

Query: show tables
+-----------+
| name      |
+-----------+
| customers |
| employee  |
| sample    |
+-----------+
Fetched 3 row(s) in 0.10s

Hueを使用してビューを削除する

Impala Queryエディターを開き、コンテキストを my_db として選択し、その中に Drop view ステートメントを入力し、次のスクリーンショットに示すように実行ボタンをクリックします。

ビューのドロップ

クエリを実行した後、下にスクロールすると、 TABLES という名前のリストが表示されます。 このリストには、現在のデータベースのすべての*テーブル*および*ビュー*が含まれています。 このリストから、指定された view が削除されたことがわかります。

ビューテーブルのドロップ

Impala-句による順序

Impalaの ORDER BY 句は、1つ以上の列に基づいてデータを昇順または降順に並べ替えるために使用されます。 一部のデータベースは、デフォルトでクエリ結果を昇順でソートします。

構文

ORDER BY句の構文は次のとおりです。

select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]

キーワード ASC または DESC をそれぞれ使用して、テーブル内のデータを昇順または降順に並べることができます。

同様に、NULLS FIRSTを使用すると、テーブル内のすべてのNULL値が最上行に配置されます。また、NULLS LASTを使用すると、NULL値を含む行が最後に配置されます。

データベース my_dbcustomers という名前のテーブルがあり、その内容は次のとおりであるとします-

[quickstart.cloudera:21000] > select *from customers;
Query: select* from customers
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 3  | kaushik  | 23  | Kota      | 30000  |
| 1  | Ramesh   |  32 | Ahmedabad | 20000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 6  | Komal    | 22  | MP        | 32000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
| 5  | Hardik   | 27  | Bhopal    | 40000  |
+----+----------+-----+-----------+--------+
Fetched 6 row(s) in 0.51s

次に、 orderby 句を使用して、 customers テーブルのデータを id の昇順で並べる例を示します。

[quickstart.cloudera:21000] > Select *from customers ORDER BY id asc;

実行すると、上記のクエリは次の出力を生成します。

Query: select* from customers ORDER BY id asc
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 3  | kaushik  | 23  | Kota      | 30000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
| 5  | Hardik   | 27  | Bhopal    | 40000  |
| 6  | Komal    | 22  | MP        | 32000  |
+----+----------+-----+-----------+--------+
Fetched 6 row(s) in 0.56s

同様に、以下に示すように order by 句を使用して、 customers テーブルのデータを降順に並べることができます。

[quickstart.cloudera:21000] > Select *from customers ORDER BY id desc;

実行すると、上記のクエリは次の出力を生成します。

Query: select* from customers ORDER BY id desc
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 6  | Komal    | 22  | MP        | 32000  |
| 5  | Hardik   | 27  | Bhopal    | 40000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
| 3  | kaushik  | 23  | Kota      | 30000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
+----+----------+-----+-----------+--------+
Fetched 6 row(s) in 0.54s

Impala-句ごとのグループ化

Impala GROUP BY 句は、SELECTステートメントと連携して使用され、同一のデータをグループに配置します。

構文

GROUP BY句の構文は次のとおりです。

select data from table_name Group BY col_name;

データベース my_dbcustomers という名前のテーブルがあり、その内容は次のとおりであるとします-

[quickstart.cloudera:21000] > select *from customers;
Query: select* from customers
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 3  | kaushik  | 23  | Kota      | 30000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
| 5  | Hardik   | 27  | Bhopal    | 40000  |
| 6  | Komal    | 22  | MP        | 32000  |
+----+----------+-----+-----------+--------+
Fetched 6 row(s) in 0.51s

以下に示すように、GROUP BYクエリを使用して、各顧客の給与の合計額を取得できます。

[quickstart.cloudera:21000] > Select name, sum(salary) from customers Group BY name;

上記のクエリを実行すると、次の出力が得られます。

Query: select name, sum(salary) from customers Group BY name
+----------+-------------+
| name     | sum(salary) |
+----------+-------------+
| Ramesh   | 20000       |
| Komal    | 32000       |
| Hardik   | 40000       |
| Khilan   | 15000       |
| Chaitali | 35000       |
| kaushik  | 30000       |
+----------+-------------+
Fetched 6 row(s) in 1.75s

以下に示すように、このテーブルに複数のレコードがあると仮定します。

+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
| 2  | Ramesh   | 32  | Ahmedabad | 1000|  |
| 3  | Khilan   | 25  | Delhi     | 15000  |
| 4  | kaushik  | 23  | Kota      | 30000  |
| 5  | Chaitali | 25  | Mumbai    | 35000  |
| 6  | Chaitali | 25  | Mumbai    | 2000   |
| 7  | Hardik   | 27  | Bhopal    | 40000  |
| 8  | Komal    | 22  | MP        | 32000  |
+----+----------+-----+-----------+--------+

ここでも、以下に示すように Group By 句を使用して、レコードの繰り返し入力を考慮して、従業員の給与の合計額を取得できます。

Select name, sum(salary) from customers Group BY name;

上記のクエリを実行すると、次の出力が得られます。

Query: select name, sum(salary) from customers Group BY name
+----------+-------------+
| name     | sum(salary) |
+----------+-------------+
| Ramesh   | 21000       |
| Komal    | 32000       |
| Hardik   | 40000       |
| Khilan   | 15000       |
| Chaitali | 37000       |
| kaushik  | 30000       |
+----------+-------------+
Fetched 6 row(s) in 1.75s

Impala-句を持っている

Impalaの Having 句を使用すると、最終結果に表示されるグループ結果をフィルターする条件を指定できます。

一般に、 Having 句は group by 句とともに使用されます。 GROUP BY句によって作成されたグループに条件を設定します。

構文

  • Having *句の構文は次のとおりです。
select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]

データベース my_dbcustomers という名前のテーブルがあり、その内容は次のとおりであるとします-

[quickstart.cloudera:21000] > select *from customers;
Query: select* from customers
+----+----------+-----+-------------+--------+
| id | name     | age | address     | salary |
+----+----------+-----+-------------+--------+
| 1  | Ramesh   | 32  | Ahmedabad   | 20000  |
| 2  | Khilan   | 25  | Delhi       | 15000  |
| 3  | kaushik  | 23  | Kota        | 30000  |
| 4  | Chaitali | 25  | Mumbai      | 35000  |
| 5  | Hardik   | 27  | Bhopal      | 40000  |
| 6  | Komal    | 22  | MP          | 32000  |
| 7  | ram      | 25  | chennai     | 23000  |
| 8  | rahim    | 22  | vizag       | 31000  |
| 9  | robert   | 23  | banglore    | 28000  |
+----+----------+-----+-----------+--------+
Fetched 9 row(s) in 0.51s

以下は、Impalaで Having 句を使用する例です-

[quickstart.cloudera:21000] > select max(salary) from customers group by age having max(salary) > 20000;

このクエリは、最初にテーブルを年齢別にグループ化し、各グループの最大給与を選択して、以下に示すように20000を超える給与を表示します。

20000
+-------------+
| max(salary) |
+-------------+
| 30000       |
| 35000       |
| 40000       |
| 32000       |
+-------------+
Fetched 4 row(s) in 1.30s

Impala-制限条項

Impalaの limit 句は、結果セットの行数を目的の数に制限するために使用されます。つまり、クエリの結果セットは、指定された制限を超えるレコードを保持しません。

構文

Impalaの Limit 句の構文は次のとおりです。

select * from table_name order by id limit numerical_expression;

データベース my_dbcustomers という名前のテーブルがあり、その内容は次のとおりであるとします-

[quickstart.cloudera:21000] > select *from customers;
Query: select* from customers
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 3  | kaushik  | 23  | Kota      | 30000  |
| 6  | Komal    | 22  | MP        | 32000  |
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
| 5  | Hardik   | 27  | Bhopal    | 40000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 8  | ram      | 22  | vizag     | 31000  |
| 9  | robert   | 23  | banglore  | 28000  |
| 7  | ram      | 25  | chennai   | 23000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
+----+----------+-----+-----------+--------+
Fetched 9 row(s) in 0.51s

以下に示すように、 order by 句を使用して、テーブル内のレコードをIDの昇順で配置できます。

[quickstart.cloudera:21000] > select *from customers order by id;
Query: select* from customers order by id
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 3  | kaushik  | 23  | Kota      | 30000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
| 5  | Hardik   | 27  | Bhopal    | 40000  |
| 6  | Komal    | 22  | MP        | 32000  |
| 7  | ram      | 25  | chennai   | 23000  |
| 8  | ram      | 22  | vizag     | 31000  |
| 9  | robert   | 23  | banglore  | 28000  |
+----+----------+-----+-----------+--------+
Fetched 9 row(s) in 0.54s

次に、 limit 句を使用して、以下に示すように limit 句を使用して、出力のレコード数を4に制限できます。

[quickstart.cloudera:21000] > select *from customers order by id limit 4;

上記のクエリを実行すると、次の出力が得られます。

Query: select* from customers order by id limit 4
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 3  | kaushik  | 23  | Kota      | 30000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
+----+----------+-----+-----------+--------+
Fetched 4 row(s) in 0.64s

Impala-オフセット句

一般に、 select クエリの結果セットの行は0から始まります。 offset 句を使用して、出力をどこから考慮するかを決定できます。 たとえば、オフセットを0に選択した場合、結果は通常どおりになり、オフセットを5に選択した場合、結果は5行目から始まります。

オフセット句

構文

以下は、Impalaの* offset *句の構文です。

select data from table_name Group BY col_name;

データベース my_dbcustomers という名前のテーブルがあり、その内容は次のとおりであるとします-

[quickstart.cloudera:21000] > select *from customers;
Query: select* from customers
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 3  | kaushik  | 23  | Kota      | 30000  |
| 6  | Komal    | 22  | MP        | 32000  |
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
| 5  | Hardik   | 27  | Bhopal    | 40000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 8  | ram      | 22  | vizag     | 31000  |
| 9  | robert   | 23  | banglore  | 28000  |
| 7  | ram      | 25  | chennai   | 23000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
+----+----------+-----+-----------+--------+
Fetched 9 row(s) in 0.51s

次のように limit 句と order by 句を使用して、テーブル内のレコードをIDの昇順で並べ替え、レコード数を4に制限できます。

Query: select * from customers order by id limit 4
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 3  | kaushik  | 23  | Kota      | 30000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
+----+----------+-----+-----------+--------+
Fetched 4 row(s) in 0.64s

以下は、 offset 句の例です。 ここでは、IDの順序で customers テーブルのレコードを取得し、0 ^ th ^行から始まる最初の4行を出力しています。

[quickstart.cloudera:21000] > select *from customers order by id limit 4 offset 0;

実行すると、上記のクエリは次の結果を返します。

Query: select* from customers order by id limit 4 offset 0
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 3  | kaushik  | 23  | Kota      | 30000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
+----+----------+-----+-----------+--------+
Fetched 4 row(s) in 0.62s

同様に、以下に示すように、オフセット5を持つ行から始まる customers テーブルから4つのレコードを取得できます。

[quickstart.cloudera:21000] > select *from customers order by id limit 4 offset 5;
Query: select* from customers order by id limit 4 offset 5
+----+--------+-----+----------+--------+
| id | name   | age | address  | salary |
+----+--------+-----+----------+--------+
| 6  | Komal  | 22  | MP       | 32000  |
| 7  | ram    | 25  | chennai  | 23000  |
| 8  | ram    | 22  | vizag    | 31000  |
| 9  | robert | 23  | banglore | 28000  |
+----+--------+-----+----------+--------+
Fetched 4 row(s) in 0.52s

インパラ-ユニオン条項

Impalaの Union 句を使用して、2つのクエリの結果を組み合わせることができます。

構文

Impalaの Union 句の構文は次のとおりです。

query1 union query2;

データベース my_dbcustomers という名前のテーブルがあり、その内容は次のとおりであるとします-

[quickstart.cloudera:21000] > select *from customers;
Query: select* from customers
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
| 9  | robert   | 23  | banglore  | 28000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
| 7  | ram      | 25  | chennai   | 23000  |
| 6  | Komal    | 22  | MP        | 32000  |
| 8  | ram      | 22  | vizag     | 31000  |
| 5  | Hardik   | 27  | Bhopal    | 40000  |
| 3  | kaushik  | 23  | Kota      | 30000  |
+----+----------+-----+-----------+--------+
Fetched 9 row(s) in 0.59s

同じように、 employee という名前の別のテーブルがあり、その内容は次のとおりであるとします-

[quickstart.cloudera:21000] > select *from employee;
Query: select* from employee
+----+---------+-----+---------+--------+
| id | name    | age | address | salary |
+----+---------+-----+---------+--------+
| 3  | mahesh  | 54  | Chennai | 55000  |
| 2  | ramesh  | 44  | Chennai | 50000  |
| 4  | Rupesh  | 64  | Delhi   | 60000  |
| 1  | subhash | 34  | Delhi   | 40000  |
+----+---------+-----+---------+--------+
Fetched 4 row(s) in 0.59s

以下は、Impalaの union 句の例です。 この例では、両方のテーブルのレコードをidの順序で並べ、2つの別個のクエリを使用して3個ずつ制限し、 UNION 句を使用してこれらのクエリを結合します。

[quickstart.cloudera:21000] > select *from customers order by id limit 3
 union select* from employee order by id limit 3;

上記のクエリを実行すると、次の出力が得られます。

Query: select *from customers order by id limit 3 union select
  * from employee order by id limit 3
+----+---------+-----+-----------+--------+
| id | name    | age | address   | salary |
+----+---------+-----+-----------+--------+
| 2  | Khilan  | 25  | Delhi     | 15000  |
| 3  | mahesh  | 54  | Chennai   | 55000  |
| 1  | subhash | 34  | Delhi     | 40000  |
| 2  | ramesh  | 44  | Chennai   | 50000  |
| 3  | kaushik | 23  | Kota      | 30000  |
| 1  | Ramesh  | 32  | Ahmedabad | 20000  |
+----+---------+-----+-----------+--------+
Fetched 6 row(s) in 3.11s

Impala-句あり

クエリが非常に複雑な場合、エイリアス*を複雑な部分に定義し、Impalaの *with 句を使用してクエリに含めることができます。

構文

Impalaの with 句の構文は次のとおりです。

with x as (select 1), y as (select 2) (select * from x union y);

データベース my_dbcustomers という名前のテーブルがあり、その内容は次のとおりであるとします-

[quickstart.cloudera:21000] > select *from customers;
Query: select* from customers
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary |
+----+----------+-----+-----------+--------+
| 1  | Ramesh   | 32  | Ahmedabad | 20000  |
| 9  | robert   | 23  | banglore  | 28000  |
| 2  | Khilan   | 25  | Delhi     | 15000  |
| 4  | Chaitali | 25  | Mumbai    | 35000  |
| 7  | ram      | 25  | chennai   | 23000  |
| 6  | Komal    | 22  | MP        | 32000  |
| 8  | ram      | 22  | vizag     | 31000  |
| 5  | Hardik   | 27  | Bhopal    | 40000  |
| 3  | kaushik  | 23  | Kota      | 30000  |
+----+----------+-----+-----------+--------+
Fetched 9 row(s) in 0.59s

同じように、 employee という名前の別のテーブルがあり、その内容は次のとおりであるとします-

[quickstart.cloudera:21000] > select *from employee;
Query: select* from employee
+----+---------+-----+---------+--------+
| id | name    | age | address | salary |
+----+---------+-----+---------+--------+
| 3  | mahesh  | 54  | Chennai | 55000  |
| 2  | ramesh  | 44  | Chennai | 50000  |
| 4  | Rupesh  | 64  | Delhi   | 60000  |
| 1  | subhash | 34  | Delhi   | 40000  |
+----+---------+-----+---------+--------+
Fetched 4 row(s) in 0.59s

以下は、Impalaの with 句の例です。 この例では、 with 句を使用して、年齢が25歳を超える employeecustomers の両方のレコードを表示しています。

[quickstart.cloudera:21000] >
   with t1 as (select *from customers where age>25),
   t2 as (select* from employee where age>25)
   (select *from t1 union select* from t2);

上記のクエリを実行すると、次の出力が得られます。

Query: with t1 as (select *from customers where age>25), t2 as (select* from employee where age>25)
   (select *from t1 union select* from t2)
+----+---------+-----+-----------+--------+
| id | name    | age | address   | salary |
+----+---------+-----+-----------+--------+
| 3  | mahesh  | 54  | Chennai   | 55000  |
| 1  | subhash | 34  | Delhi     | 40000  |
| 2  | ramesh  | 44  | Chennai   | 50000  |
| 5  | Hardik  | 27  | Bhopal    | 40000  |
| 4  | Rupesh  | 64  | Delhi     | 60000  |
| 1  | Ramesh  | 32  | Ahmedabad | 20000  |
+----+---------+-----+-----------+--------+
Fetched 6 row(s) in 1.73s

Impala-個別のオペレーター

Impalaの distinct 演算子は、重複を削除して一意の値を取得するために使用されます。

構文

以下は distinct 演算子の構文です。

select distinct columns… from table_name;

Impalaに customers という名前のテーブルがあり、その内容は次のとおりであると仮定します-

[quickstart.cloudera:21000] > select distinct id, name, age, salary from customers;
Query: select distinct id, name, age, salary from customers

ここでは、RameshとChaitaliが2回入力した顧客の給与を確認でき、 distinct 演算子を使用して、以下に示すように一意の値を選択できます。

[quickstart.cloudera:21000] > select distinct name, age, address from customers;

上記のクエリを実行すると、次の出力が得られます。

Query: select distinct id, name from customers
+----------+-----+-----------+
| name     | age | address   |
+----------+-----+-----------+
| Ramesh   | 32  | Ahmedabad |
| Khilan   | 25  | Delhi     |
| kaushik  | 23  | Kota      |
| Chaitali | 25  | Mumbai    |
| Hardik   | 27  | Bhopal    |
| Komal    | 22  | MP        |
+----------+-----+-----------+
Fetched 9 row(s) in 1.46s