Hive-views-and-indexes
Hive-ビューとインデックス
この章では、ビューを作成および管理する方法について説明します。 ビューは、ユーザーの要件に基づいて生成されます。 結果セットのデータはすべてビューとして保存できます。 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の各フィールドを持つ従業員テーブルを以下のように想定します。 Rs 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 (...)]
例
インデックスの例を見てみましょう。 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;