Impala-quick-guide
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/のホームページを開きます。 以下に示すページが表示されます。
ステップ2
clouderaホームページの[サインイン]リンクをクリックすると、以下に示すようにサインインページにリダイレクトされます。
まだ登録していない場合は、[今すぐ登録]リンクをクリックして、[アカウント登録]フォームを表示します。 そこに登録して、clouderaアカウントにサインインします。
ステップ3
サインインした後、次のスナップショットで強調表示されている[ダウンロード]リンクをクリックして、cloudera Webサイトのダウンロードページを開きます。
ステップ4-QuickStartVMのダウンロード
次のスナップショットで強調表示されているように、今すぐダウンロード*ボタンをクリックして、cloudera *QuickStartVM をダウンロードします。
これにより、 QuickStart VM のダウンロードページにリダイレクトされます。
[今すぐ入手]ボタンをクリックし、ライセンス契約に同意して、下に示すように[送信]ボタンをクリックします。
Clouderaは、VM互換のVMware、KVM、およびVIRTUALBOXを提供します。 必要なバージョンを選択します。 ここでのチュートリアルでは、仮想ボックスを使用した Cloudera QuickStartVM のセットアップを示しています。したがって、以下のスナップショットに示すように、 VIRTUALBOX DOWNLOAD ボタンをクリックします。
これにより、仮想ボックスイメージファイルである cloudera-quickstart-vm-5.5.0-0-virtualbox.ovf という名前のファイルのダウンロードが開始されます。
Cloudera QuickStartVMのインポート
ステップ1
次のリンクから仮想ボックスをダウンロードし、https://www.virtualbox.org/をインストールします
ステップ2
仮想ボックスソフトウェアを開きます。 以下に示すように、[ファイル]をクリックして[アプライアンスのインポート]を選択します。
ステップ3
[アプライアンスのインポート]をクリックすると、[仮想アプライアンスのインポート]ウィンドウが表示されます。 以下に示すように、ダウンロードした画像ファイルの場所を選択します。
Impalaシェルの起動
Impalaを起動するには、ターミナルを開いて次のコマンドを実行します。
これによりImpalaシェルが起動し、次のメッセージが表示されます。
注-すべてのimpala-shellコマンドについては、後の章で説明します。
Impalaクエリエディター
- Impalaシェル*に加えて、Hueブラウザを使用してImpalaと通信できます。 CDH5をインストールしてImpalaを起動した後、ブラウザーを開くと、以下に示すようにclouderaのホームページが表示されます。
ここで、ブックマーク Hue をクリックしてHueブラウザを開きます。 クリックすると、Hueブラウザのログインページが表示され、資格情報clouderaとclouderaでログが記録されます。
Hueブラウザにログオンするとすぐに、以下に示すようにHueブラウザのクイックスタートウィザードが表示されます。
[クエリエディター]ドロップダウンメニューをクリックすると、次のスクリーンショットに示すように、Impalaがサポートするエディターのリストが表示されます。
ドロップダウンメニューで[ Impala ]をクリックすると、以下に示すようにImpalaクエリエディターが表示されます。
Impala-アーキテクチャ
Impalaは、Hadoopクラスター内の多くのシステムで実行されるMPP(Massive Parallel Processing)クエリ実行エンジンです。 従来のストレージシステムとは異なり、impalaはストレージエンジンから切り離されています。 これには、Impalaデーモン_(Impalad)_、Impala Statestore、Impalaメタデータまたはメタストアの3つの主要コンポーネントがあります。
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 を入力します。
次のコマンドを入力してImpalaシェルを起動します-
Impala –汎用コマンド
Impalaの汎用コマンドを以下に説明します-
ヘルプコマンド
Impalaシェルの help コマンドは、Impalaで使用可能なコマンドのリストを提供します-
バージョンコマンド
以下に示すように、 version コマンドはImpalaの現在のバージョンを提供します。
履歴コマンド
Impalaの history コマンドは、シェルで実行された最後の10個のコマンドを表示します。 以下は history コマンドの例です。 ここでは、バージョン、ヘルプ、表示、使用、および履歴の5つのコマンドを実行しました。
終了/終了コマンド
以下に示すように、 quit または exit コマンドを使用して、Impalaシェルから抜けることができます。
接続コマンド
Impalaクエリ固有のオプション
Impalaのクエリ固有のコマンドはクエリを受け入れます。 以下に説明します-
説明する
プロフィール
テーブルおよびデータベース固有のオプション
次の表に、Impalaのテーブルおよびデータ固有のオプションを示します。
Sr.No | Command & Explanation |
---|---|
1 |
|
2 |
Describe Impalaの describe コマンドは、テーブルのメタデータを提供します。 列やデータ型などの情報が含まれています。 describe コマンドには、ショートカットとして desc があります。 |
3 |
Drop
|
4 |
insert Impalaの*挿入*コマンドを使用して、
|
5 |
|
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の単一行コメントの例です。
複数行コメント- / と / の間のすべての行は、Impalaでは複数行コメントと見なされます。 以下は、Impalaの複数行コメントの例です。
Impalaの演算子は、SQLの演算子に似ています。 次のリンクリンクをクリックして、SQLチュートリアルを参照してください:/sql/sql-operators [] sql-operators。
Impala-データベースを作成する
Impalaでは、データベースは名前空間内に関連するテーブル、ビュー、および関数を保持する構造です。 HDFSではディレクトリツリーとして表されます。テーブルパーティションとデータファイルが含まれています。 この章では、Impalaでデータベースを作成する方法について説明します。
CREATE DATABASEステートメント
- CREATE DATABASEステートメント*は、Impalaで新しいデータベースを作成するために使用されます。
構文
以下は、 CREATE DATABASE ステートメントの構文です。
ここで、 IF NOT EXISTS はオプションの句です。 この句を使用すると、同じ名前の既存のデータベースがない場合にのみ、指定された名前のデータベースが作成されます。
例
以下は、 create database statement の例です。 この例では、* my_database。*という名前のデータベースを作成しました
検証
Hdfsパス
HDFSファイルシステムにデータベースを作成するには、データベースを作成する場所を指定する必要があります。
Hue Browserを使用したデータベースの作成
Impala Queryエディターを開き、その中に CREATE DATABASE ステートメントを入力します。 その後、次のスクリーンショットに示すように、実行ボタンをクリックします。
クエリを実行した後、カーソルをドロップダウンメニューの上部にそっと移動すると、更新記号が表示されます。 更新記号をクリックすると、データベースのリストが更新され、最近の変更がデータベースに適用されます。
検証
エディターの左側の見出し DATABASE の下にある*ドロップダウンボックス*をクリックします。 システム内のデータベースのリストを見ることができます。 ここでは、以下に示すように、新しく作成されたデータベース my_db を確認できます。
注意深く観察すると、デフォルトのデータベースとともに、リストに my_db など、1つのデータベースしか表示されません。
Impala-データベースの削除
Impalaの* DROP DATABASEステートメント*は、Impalaからデータベースを削除するために使用されます。 データベースを削除する前に、データベースからすべてのテーブルを削除することをお勧めします。
構文
以下は、 DROP DATABASE ステートメントの構文です。
ここで、 IF EXISTS はオプションの句です。 指定された名前のデータベースが存在するときにこの句を使用すると、削除されます。 また、指定された名前の既存のデータベースがない場合、操作は実行されません。
例
以下は、 DROP DATABASE ステートメントの例です。 Impalaに sample_database という名前のデータベースがあるとします。
そして、 SHOW DATABASES ステートメントを使用してデータベースのリストを検証すると、その中の名前を観察します。
これで、以下に示すように* DROP DATABASEステートメント*を使用してこのデータベースを削除できます。
これにより、指定したデータベースが削除され、次の出力が得られます。
検証
カスケード
一般に、データベースを削除するには、データベース内のすべてのテーブルを手動で削除する必要があります。 カスケードを使用する場合、Impalaは指定されたデータベース内のテーブルを削除する前に削除します。
例
Impalaに sample という名前のデータベースがあり、 student と test という2つのテーブルが含まれているとします。 このデータベースを直接削除しようとすると、次のようなエラーが表示されます。
注意-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ステートメント*の例です。 まず、以下に示すように、 sample_database という名前のデータベースを作成します。
これにより、新しいデータベースが作成され、次の出力が得られます。
次に、以下に示すように USE ステートメントを使用して、新しく作成されたデータベース(sample_database)にセッションを切り替えましょう。
これにより、現在のコンテキストがsample_databaseに変更され、次のようにメッセージが表示されます。
Hue Browserを使用したデータベースの選択
Impalaの Query Editor の左側に、次のスクリーンショットに示すドロップダウンメニューがあります。
ドロップダウンメニューをクリックすると、以下に示すように、Impalaのすべてのデータベースのリストが表示されます。
現在のコンテキストを変更する必要があるデータベースを選択するだけです。
Impala-テーブルステートメントの作成
構文
以下は、 CREATE TABLE ステートメントの構文です。 ここで、 IF NOT EXISTS はオプションの句です。 この句を使用すると、指定された名前のテーブルが作成されますが、指定されたデータベースに同じ名前のテーブルが存在しない場合のみです。
CREATE TABLEは、データベースシステムに新しいテーブルを作成するよう指示するキーワードです。 テーブルの一意の名前または識別子は、CREATE TABLEステートメントの後に続きます。 オプションで、 table_name とともに database_name を指定できます。
例
次に、テーブル作成ステートメントの例を示します。 この例では、データベース my_db に student という名前のテーブルを作成しました。
上記のステートメントを実行すると、指定した名前のテーブルが作成され、次の出力が表示されます。
検証
まず、以下に示すように、必要なテーブルが存在するデータベースにコンテキストを切り替える必要があります。
その後、 show tables クエリを使用してテーブルのリストを取得すると、以下に示すように、 student という名前のテーブルを確認できます。
HDFSパス
HDFSファイルシステムでデータベースを作成するには、以下に示すようにデータベースを作成する場所を指定する必要があります。
Hue Browserを使用したデータベースの作成
impala Queryエディターを開き、その中に CREATE Table ステートメントを入力します。 次のスクリーンショットに示すように、実行ボタンをクリックします。
クエリを実行した後、カーソルをドロップダウンメニューの上部にそっと移動すると、更新記号が表示されます。 更新記号をクリックすると、データベースのリストが更新され、最近行われた変更がデータベースに適用されます。
検証
エディターの左側の見出し DATABASE の下にある*ドロップダウン*をクリックします。 そこでデータベースのリストを見ることができます。 以下に示すように、データベース my_db を選択します。
データベース my_db を選択すると、以下に示すように、その中のテーブルのリストを見ることができます。 以下に示すように、新しく作成された student テーブルを見つけることができます。
Impala-ステートメントの挿入
Impalaの INSERT ステートメントには、 into と overwrite の2つの句があります。 into 句を含むInsertステートメントは、データベース内の既存のテーブルに新しいレコードを追加するために使用されます。
構文
次のように INSERT ステートメントの2つの基本的な構文があります-
ここで、column1、column2、… columnNは、データを挿入するテーブル内の列の名前です。
列名を指定せずに値を追加することもできますが、そのためには、以下に示すように、値の順序が表の列と同じ順序であることを確認する必要があります。
CREATE TABLEは、データベースシステムに新しいテーブルを作成するよう指示するキーワードです。 テーブルの一意の名前または識別子は、CREATE TABLEステートメントの後に続きます。 オプションで、 table_name とともに database_name を指定できます。
例
以下に示すように、Impalaで student という名前のテーブルを作成したとします。
以下は、 employee という名前のテーブルにレコードを作成する例です。
上記のステートメントを実行すると、レコードが employee という名前のテーブルに挿入され、次のメッセージが表示されます。
以下に示すように、列名を指定せずに別のレコードを挿入できます。
上記のステートメントを実行すると、レコードが employee という名前のテーブルに挿入され、次のメッセージが表示されます。
以下に示すように、従業員テーブルにさらにいくつかのレコードを挿入できます。
値を挿入すると、Impalaの employee テーブルは次のようになります。
テーブル内のデータを上書きする
上書き句を使用して、テーブルのレコードを上書きできます。 上書きされたレコードはテーブルから完全に削除されます。 上書き句を使用する構文は次のとおりです。
例
以下は、 overwrite 句の使用例です。
上記のクエリを実行すると、指定したレコードでテーブルデータが上書きされ、次のメッセージが表示されます。
テーブルを検証すると、以下に示すように、テーブル employee のすべてのレコードが新しいレコードで上書きされていることがわかります。
Hueブラウザを使用したデータの挿入
Impala Queryエディターを開き、その中に*挿入*ステートメントを入力します。 次のスクリーンショットに示すように、実行ボタンをクリックします。
クエリ/ステートメントの実行後、このレコードがテーブルに追加されます。
Impala-Selectステートメント
Impala SELECT ステートメントは、データベース内の1つ以上のテーブルからデータをフェッチするために使用されます。 このクエリは、テーブルの形式でデータを返します。
構文
Impalaの select ステートメントの構文は次のとおりです。
ここで、column1、column2 …は、値を取得するテーブルのフィールドです。 あなたがフィールドで利用可能なすべてのフィールドを取得したい場合は、次の構文を使用することができます-
例
Impalaに customers という名前のテーブルがあり、次のデータがあるとします-
以下に示すように、 select ステートメントを使用して、 customers テーブルのすべてのレコードの id、name 、および age をフェッチできます-
上記のクエリを実行すると、Impalaは指定されたテーブルからすべてのレコードのID、名前、年齢を取得し、以下に示すように表示します。
以下に示すように、 select クエリを使用して、 customers テーブルから all レコードをフェッチすることもできます。
上記のクエリを実行すると、Impalaは、以下に示すように、指定されたテーブルからすべてのレコードをフェッチして表示します。
Hueを使用してレコードを取得する
Impala Queryエディターを開き、その中に select ステートメントを入力します。 次のスクリーンショットに示すように、実行ボタンをクリックします。
クエリを実行した後、下にスクロールして[結果]タブを選択すると、以下に示すように、指定したテーブルのレコードのリストが表示されます。
Impala-ステートメントの説明
Impalaの describe ステートメントは、テーブルの説明を提供するために使用されます。 このステートメントの結果には、列名やそのデータ型などのテーブルに関する情報が含まれています。
構文
Impala describe ステートメントの構文は次のとおりです。
例
たとえば、Impalaに customer という名前のテーブルがあり、次のデータがあるとします-
以下に示すように、 describe ステートメントを使用して customer テーブルの説明を取得できます-
上記のクエリを実行すると、Impalaは指定されたテーブルの*メタデータ*を取得し、以下に示すように表示します。
Hueを使用してレコードを記述する
Impalaクエリエディターを開き、その中に describe ステートメントを入力し、次のスクリーンショットに示すように実行ボタンをクリックします。
クエリを実行した後、下にスクロールして[結果]タブを選択すると、以下に示すようにテーブルのメタデータを確認できます。
Impala-テーブルの変更
ImpalaのAlter tableステートメントは、特定のテーブルで変更を実行するために使用されます。 このステートメントを使用して、既存のテーブルの列を追加、削除、または変更でき、名前を変更することもできます。
この章では、構文と例を使用して、さまざまなタイプのALTERステートメントについて説明します。 まず、Impalaの my_db データベースに次のデータを持つ customers という名前のテーブルがあると仮定します。
また、データベース my_db のテーブルのリストを取得すると、以下に示すように、その中に customers テーブルが見つかります。
テーブルの名前を変更する
構文
既存のテーブルの名前を変更する ALTER TABLE の基本的な構文は次のとおりです-
例
以下は、 alter ステートメントを使用してテーブルの名前を変更する例です。 ここでは、テーブル customers の名前をユーザーに変更しています。
上記のクエリを実行した後、Impalaは必要に応じてテーブルの名前を変更し、次のメッセージを表示します。
テーブルに列を追加する
構文
既存のテーブルに列を追加する ALTER TABLE の基本的な構文は次のとおりです-
例
次のクエリは、既存のテーブルに列を追加する方法を示す例です。 ここでは、2つの列account_noおよびphone_number(両方ともbigintデータ型)を users テーブルに追加しています。
上記のクエリを実行すると、指定された列が student という名前のテーブルに追加され、次のメッセージが表示されます。
テーブル users のスキーマを検証すると、以下に示すように、新しく追加された列を見つけることができます。
テーブルから列を削除する
構文
既存のテーブルの DROP COLUMN へのALTER TABLEの基本的な構文は次のとおりです-
例
次のクエリは、既存のテーブルから列を削除する例です。 ここでは、 account_no という名前の列を削除しています。
上記のクエリを実行すると、Impalaはaccount_noという名前の列を削除し、次のメッセージを表示します。
テーブル users のスキーマを確認すると、 account_no という名前の列は削除されているため、見つかりません。
列の名前とタイプを変更する
構文
既存のテーブルの列の名前とデータ型を変更するALTER TABLEの基本的な構文は次のとおりです-
例
以下は、alterステートメントを使用して列の名前とデータ型を変更する例です。 ここでは、列の名前を phone_noをemail に変更し、そのデータ型を string に変更しています。
上記のクエリを実行すると、Impalaは指定された変更を行い、次のメッセージを表示します。
Hueを使用してテーブルを変更する
Impala Queryエディターを開き、その中に alter ステートメントを入力し、次のスクリーンショットに示すように実行ボタンをクリックします。
上記のクエリを実行すると、テーブル customers の名前が users に変更されます。 同様に、すべての alter クエリを実行できます。
Impala-テーブルをドロップする
Impalaの drop table ステートメントは、Impalaの既存のテーブルを削除するために使用されます。 このステートメントは、内部テーブルの基になるHDFSファイルも削除します
注-テーブルを削除すると、テーブルで使用可能なすべての情報も永久に失われるため、このコマンドの使用には注意が必要です。
構文
以下は、 DROP TABLE ステートメントの構文です。 ここで、 IF EXISTS はオプションの句です。 この句を使用すると、指定された名前のテーブルは、存在する場合にのみ削除されます。 それ以外の場合、操作は実行されません。
IF EXISTS句なしで存在しないテーブルを削除しようとすると、エラーが生成されます。 オプションで、t * able_name とともに *database_name を指定できます。
例
以下に示すように、データベース my_db 内のテーブルのリストを最初に確認しましょう。
上記の結果から、データベース my_db に3つのテーブルが含まれていることがわかります。
以下は drop table statement の例です。 この例では、 student という名前のテーブルをデータベース my_db から削除しています。
上記のクエリを実行すると、指定した名前のテーブルが削除され、次の出力が表示されます。
検証
まず、以下に示すように、必要なテーブルが存在するデータベースにコンテキストを切り替える必要があります。
その後、 show tables クエリを使用してテーブルのリストを取得すると、 student という名前のテーブルがリストにないことを確認できます。
Hue Browserを使用したデータベースの作成
Impala Queryエディターを開き、その中に drop Table ステートメントを入力します。 次のスクリーンショットに示すように、実行ボタンをクリックします。
クエリを実行した後、カーソルをドロップダウンメニューの上部にそっと移動すると、更新記号が表示されます。 更新記号をクリックすると、データベースのリストが更新され、最近行われた変更がデータベースに適用されます。
検証
エディターの左側の見出し DATABASE の下にある*ドロップダウン*をクリックします。 そこでデータベースのリストを見ることができます。以下に示すように、データベース my_db を選択します。
データベース my_db を選択すると、以下に示すように、その中のテーブルのリストを見ることができます。 以下に示すように、削除されたテーブル student がリストにありません。
Impala-テーブルを切り捨てる
Impalaの Truncate Table ステートメントは、既存のテーブルからすべてのレコードを削除するために使用されます。
DROP TABLEコマンドを使用して完全なテーブルを削除することもできますが、データベースから完全なテーブル構造を削除し、データを保存する場合はこのテーブルをもう一度作成する必要があります。
構文
以下は、truncate tableステートメントの構文です。
例
Impalaに customers という名前のテーブルがあり、その内容を確認すると、次の結果が得られているとします。 これは、顧客テーブルに6つのレコードが含まれることを意味します。
以下は、 truncate statement を使用してImpalaでテーブルを切り捨てる例です。 ここでは、 customers という名前のテーブルのすべてのレコードを削除しています。
上記のステートメントを実行すると、Impalaは指定されたテーブルのすべてのレコードを削除し、次のメッセージを表示します。
検証
Hueブラウザを使用したテーブルの切り捨て
Impala Queryエディターを開き、その中に truncate ステートメントを入力します。 次のスクリーンショットに示すように、実行ボタンをクリックします。
クエリ/ステートメントを実行すると、テーブルのすべてのレコードが削除されます。
Impala-表を表示
Impalaの show tables ステートメントを使用して、現在のデータベース内のすべての既存のテーブルのリストを取得します。
例
以下は、 show tables ステートメントの例です。 特定のデータベース内のテーブルのリストを取得する場合は、まず、必要なデータベースにコンテキストを変更し、以下に示すように show tables ステートメントを使用してその中のテーブルのリストを取得します。
上記のクエリを実行すると、Impalaは指定されたデータベース内のすべてのテーブルのリストを取得し、以下に示すように表示します。
Hueを使用したテーブルのリスト
impala Queryエディターを開き、コンテキストを my_db として選択し、その中に show tables ステートメントを入力し、次のスクリーンショットに示すように実行ボタンをクリックします。
クエリを実行した後、下にスクロールして[結果]タブを選択すると、次のようにテーブルのリストが表示されます。
Impala-ビューの作成
ビューは、関連付けられた名前でデータベースに保存されるImpalaクエリ言語のステートメントにすぎません。 これは、事前定義されたSQLクエリの形式のテーブルの構成です。
ビューには、テーブルのすべての行または選択した行を含めることができます。 ビューは、1つまたは複数のテーブルから作成できます。 ビューは、ユーザーがすることができます-
- ユーザーまたはユーザーのクラスが自然または直感的に見えるようにデータを構造化します。
- データへのアクセスを制限して、ユーザーが必要なものだけを表示し(場合によっては)変更できるようにします。
- レポートの生成に使用できるさまざまなテーブルのデータを要約します。
Impalaの Create View ステートメントを使用してビューを作成できます。
構文
create viewステートメントの構文は次のとおりです。 IF NOT EXISTS はオプションの句です。 この句を使用すると、指定された名前のテーブルが作成されますが、指定されたデータベースに同じ名前のテーブルが存在しない場合のみです。
例
たとえば、Impalaの my_db データベースに customers という名前のテーブルがあり、次のデータがあるとします。
以下は、 Create View Statement の例です。 この例では、列、名前、および年齢を含む customers テーブルとしてビューを作成しています。
上記のクエリを実行すると、目的の列を持つビューが作成され、次のメッセージが表示されます。
検証
以下に示す select ステートメントを使用して、作成したばかりのビューの内容を確認できます。
これにより、次の結果が生成されます。
Hueを使用してビューを作成する
Impala Queryエディターを開き、コンテキストを my_db として選択し、その中に Create View ステートメントを入力し、次のスクリーンショットに示すように実行ボタンをクリックします。
クエリを実行した後、下にスクロールすると、以下に示すように、テーブルのリストに作成された sample という view が表示されます。
Impala-ビューの変更
Impalaの Alter View ステートメントは、ビューを変更するために使用されます。 このステートメントを使用して、ビューの名前、データベース、およびそれに関連付けられたクエリを変更できます。
構文
以下は Alter View ステートメントの構文です
例
たとえば、Impalaの my_db データベースに customers_view という名前のビューがあり、次の内容があるとします。
以下は Alter View Statement の例です。 この例では、 customers_view に名前と年齢の代わりにid、name、salaryの列を含めています。
上記のクエリを実行すると、Impalaは customers_view に対して指定された変更を行い、次のメッセージを表示します。
検証
以下に示す select ステートメントを使用して、 customers_view という名前の view の内容を確認できます。
これにより、次の結果が生成されます。
Hueを使用してビューを変更する
Impala Queryエディターを開き、コンテキストを my_db として選択し、その中に Alter View ステートメントを入力し、次のスクリーンショットに示すように実行ボタンをクリックします。
クエリの実行後、 sample という view はそれに応じて変更されます。
Impala-ビューをドロップ
Impalaの Drop View クエリは、既存のビューを削除するために使用されます。 view は論理構造であるため、 drop view クエリの影響を受ける物理データはありません。
構文
以下は、ドロップビューステートメントの構文です。
例
たとえば、Impalaの my_db データベースに customers_view という名前のビューがあり、次の内容があるとします。
以下は Drop View Statement の例です。 この例では、 drop view クエリを使用して、 customers_view という名前の view を削除しようとしています。
上記のクエリを実行すると、Impalaは指定されたビューを削除し、次のメッセージを表示します。
検証
これにより、次の結果が生成されます。
Hueを使用してビューを削除する
Impala Queryエディターを開き、コンテキストを my_db として選択し、その中に Drop view ステートメントを入力し、次のスクリーンショットに示すように実行ボタンをクリックします。
クエリを実行した後、下にスクロールすると、 TABLES という名前のリストが表示されます。 このリストには、現在のデータベースのすべての*テーブル*および*ビュー*が含まれています。 このリストから、指定された view が削除されたことがわかります。
Impala-句による順序
Impalaの ORDER BY 句は、1つ以上の列に基づいてデータを昇順または降順に並べ替えるために使用されます。 一部のデータベースは、デフォルトでクエリ結果を昇順でソートします。
構文
ORDER BY句の構文は次のとおりです。
キーワード ASC または DESC をそれぞれ使用して、テーブル内のデータを昇順または降順に並べることができます。
同様に、NULLS FIRSTを使用すると、テーブル内のすべてのNULL値が最上行に配置されます。また、NULLS LASTを使用すると、NULL値を含む行が最後に配置されます。
例
データベース my_db に customers という名前のテーブルがあり、その内容は次のとおりであるとします-
次に、 orderby 句を使用して、 customers テーブルのデータを id の昇順で並べる例を示します。
実行すると、上記のクエリは次の出力を生成します。
同様に、以下に示すように order by 句を使用して、 customers テーブルのデータを降順に並べることができます。
実行すると、上記のクエリは次の出力を生成します。
Impala-句ごとのグループ化
Impala GROUP BY 句は、SELECTステートメントと連携して使用され、同一のデータをグループに配置します。
構文
GROUP BY句の構文は次のとおりです。
例
データベース my_db に customers という名前のテーブルがあり、その内容は次のとおりであるとします-
以下に示すように、GROUP BYクエリを使用して、各顧客の給与の合計額を取得できます。
上記のクエリを実行すると、次の出力が得られます。
以下に示すように、このテーブルに複数のレコードがあると仮定します。
ここでも、以下に示すように Group By 句を使用して、レコードの繰り返し入力を考慮して、従業員の給与の合計額を取得できます。
上記のクエリを実行すると、次の出力が得られます。
Impala-句を持っている
Impalaの Having 句を使用すると、最終結果に表示されるグループ結果をフィルターする条件を指定できます。
一般に、 Having 句は group by 句とともに使用されます。 GROUP BY句によって作成されたグループに条件を設定します。
構文
- Having *句の構文は次のとおりです。
例
データベース my_db に customers という名前のテーブルがあり、その内容は次のとおりであるとします-
以下は、Impalaで Having 句を使用する例です-
このクエリは、最初にテーブルを年齢別にグループ化し、各グループの最大給与を選択して、以下に示すように20000を超える給与を表示します。
Impala-制限条項
Impalaの limit 句は、結果セットの行数を目的の数に制限するために使用されます。つまり、クエリの結果セットは、指定された制限を超えるレコードを保持しません。
構文
Impalaの Limit 句の構文は次のとおりです。
例
データベース my_db に customers という名前のテーブルがあり、その内容は次のとおりであるとします-
以下に示すように、 order by 句を使用して、テーブル内のレコードをIDの昇順で配置できます。
次に、 limit 句を使用して、以下に示すように limit 句を使用して、出力のレコード数を4に制限できます。
上記のクエリを実行すると、次の出力が得られます。
Impala-オフセット句
一般に、 select クエリの結果セットの行は0から始まります。 offset 句を使用して、出力をどこから考慮するかを決定できます。 たとえば、オフセットを0に選択した場合、結果は通常どおりになり、オフセットを5に選択した場合、結果は5行目から始まります。
構文
以下は、Impalaの* offset *句の構文です。
例
データベース my_db に customers という名前のテーブルがあり、その内容は次のとおりであるとします-
次のように limit 句と order by 句を使用して、テーブル内のレコードをIDの昇順で並べ替え、レコード数を4に制限できます。
以下は、 offset 句の例です。 ここでは、IDの順序で customers テーブルのレコードを取得し、0 ^ th ^行から始まる最初の4行を出力しています。
実行すると、上記のクエリは次の結果を返します。
同様に、以下に示すように、オフセット5を持つ行から始まる customers テーブルから4つのレコードを取得できます。
インパラ-ユニオン条項
Impalaの Union 句を使用して、2つのクエリの結果を組み合わせることができます。
構文
Impalaの Union 句の構文は次のとおりです。
例
データベース my_db に customers という名前のテーブルがあり、その内容は次のとおりであるとします-
同じように、 employee という名前の別のテーブルがあり、その内容は次のとおりであるとします-
以下は、Impalaの union 句の例です。 この例では、両方のテーブルのレコードをidの順序で並べ、2つの別個のクエリを使用して3個ずつ制限し、 UNION 句を使用してこれらのクエリを結合します。
上記のクエリを実行すると、次の出力が得られます。
Impala-句あり
クエリが非常に複雑な場合、エイリアス*を複雑な部分に定義し、Impalaの *with 句を使用してクエリに含めることができます。
構文
Impalaの with 句の構文は次のとおりです。
例
データベース my_db に customers という名前のテーブルがあり、その内容は次のとおりであるとします-
同じように、 employee という名前の別のテーブルがあり、その内容は次のとおりであるとします-
以下は、Impalaの with 句の例です。 この例では、 with 句を使用して、年齢が25歳を超える employee と customers の両方のレコードを表示しています。
上記のクエリを実行すると、次の出力が得られます。
Impala-個別のオペレーター
Impalaの distinct 演算子は、重複を削除して一意の値を取得するために使用されます。
構文
以下は distinct 演算子の構文です。
例
Impalaに customers という名前のテーブルがあり、その内容は次のとおりであると仮定します-
ここでは、RameshとChaitaliが2回入力した顧客の給与を確認でき、 distinct 演算子を使用して、以下に示すように一意の値を選択できます。
上記のクエリを実行すると、次の出力が得られます。