ハイブ-ビューとインデックス
この章では、ビューを作成および管理する方法について説明します。ビューは、ユーザーの要件に基づいて生成されます。結果セットのデータはすべてビューとして保存できます。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;