ハイブ-ビューとインデックス

この章では、ビューを作成および管理する方法について説明します。ビューは、ユーザーの要件に基づいて生成されます。結果セットのデータはすべてビューとして保存できます。Hiveでのビューの使用法は、SQLでのビューの使用法と同じです。これは標準のRDBMSの概念です。ビューですべてのDML操作を実行できます。

ビューの作成

SELECTステートメントの実行時にビューを作成できます。構文は次のとおりです。

CREATE VIEW [IF NOT EXISTS] view_name [(column_name [COMMENT column_comment], ...) ]
[COMMENT table_comment]
AS SELECT ...

例を見てみましょう。Id、Name、Salary、Designation、およびDeptのフィールドを持つ以下の従業員テーブルを想定します。クエリを生成して、30000ルピーを超える給与を獲得した従業員の詳細を取得します。結果を次の名前のビューに保存します。emp_30000.

+------+--------------+-------------+-------------------+--------+
| ID   | Name         | Salary      | Designation       | Dept   |
+------+--------------+-------------+-------------------+--------+
|1201  | Gopal        | 45000       | Technical manager | TP     |
|1202  | Manisha      | 45000       | Proofreader       | PR     |
|1203  | Masthanvali  | 40000       | Technical writer  | TP     |
|1204  | Krian        | 40000       | Hr Admin          | HR     |
|1205  | Kranthi      | 30000       | Op Admin          | Admin  |
+------+--------------+-------------+-------------------+--------+

次のクエリは、上記のシナリオを使用して従業員の詳細を取得します。

hive> CREATE VIEW emp_30000 AS
SELECT * FROM employee
WHERE salary>30000;

ビューをドロップする

ビューを削除するには、次の構文を使用します。

DROP VIEW view_name

次のクエリは、emp_30000という名前のビューを削除します。

hive> DROP VIEW emp_30000;

インデックスの作成

インデックスは、テーブルの特定の列へのポインタに他なりません。インデックスの作成とは、テーブルの特定の列にポインタを作成することを意味します。その構文は次のとおりです。

CREATE INDEX index_name
ON TABLE base_table_name (col_name, ...)
AS 'index.handler.class.name'
[WITH DEFERRED REBUILD]
[IDXPROPERTIES (property_name=property_value, ...)]
[IN TABLE index_table_name]
[PARTITIONED BY (col_name, ...)]
[
   [ ROW FORMAT ...] STORED AS ...
   | STORED BY ...
]
[LOCATION hdfs_path]
[TBLPROPERTIES (...)]

インデックスの例を見てみましょう。前に使用したのと同じemployeeテーブルを、フィールドId、Name、Salary、Designation、およびDeptで使用します。employeeテーブルのsalary列にindex_salaryという名前のインデックスを作成します。

次のクエリはインデックスを作成します。

hive> CREATE INDEX inedx_salary ON TABLE employee(salary)
AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler';

給与列へのポインタです。列が変更された場合、変更はインデックス値を使用して保存されます。

インデックスを削除する

次の構文は、インデックスを削除するために使用されます。

DROP INDEX <index_name> ON <table_name>

次のクエリは、index_salaryという名前のインデックスを削除します。

hive> DROP INDEX index_salary ON employee;