Hive データ型: Hive でデータベースを作成および削除する方法
⚡ スマートサマリー
Hiveのデータ型は、各テーブル列が保持できるデータを定義し、CREATE DATABASEコマンドとDROP DATABASEコマンドは、Hiveメタストア内でこれらのテーブルが存在する名前空間を設定または削除します。

データ型は、Hiveクエリ言語とデータモデリングにおいて非常に重要な要素です。テーブルの列型を定義するには、データ型とその使用方法について理解しておく必要があります。
以下では、Hiveに存在するいくつかのデータ型について簡単に概説します。
- 数値型
- 文字列型
- 日付/時刻タイプ
- 複合型
Hive のデータ型
Hiveのすべての列は、以下のいずれかの型で宣言されます。最初に基本的な型が続き、次に1つの列に複数の値を保持する複合型が続きます。
Hive の数値データ型
数値列のサイズは1バイトから8バイトまでなので、値に合う最小の型を選択することで、ストレージとスキャンコストの両方を抑えることができます。
| タイプ | メモリ割り当て |
|---|---|
| タイイント | 1バイトの符号付き整数(-128~127) |
| 小型 | 2バイトの符号付き整数(-32,768~32,767) |
| INT | 4バイトの符号付き整数(-2,147,483,648~2,147,483,647) |
| BIGINT | 8バイトの符号付き整数(-9,223,372,036,854,775,808~9,223,372,036,854,775,807) |
| FLOAT | 4バイトの単精度浮動小数点数 |
| ダブル | 8バイト倍精度浮動小数点数 |
| 10進数 | この型では、精度とスケールを DECIMAL(精度, スケール) のように定義できます。これらが省略された場合、Hive は DECIMAL(10,0) を使用します。 |
Hive 文字列データ型
文字型カラムには3つの形状があり、その違いはHiveが宣言された長さを強制するかどうかです。
| タイプ | 長さ |
|---|---|
| CHAR | 固定長、最大255文字。短い値はスペースで埋められます。 |
| VARCHAR | 1~65,535文字。これより大きい値は自動的に切り捨てられます。 |
| STRING | ここでは長さを定義できます(制限なし) |
Hive の日付/時刻データ型
時間軸の列はタイムゾーンのオフセットなしで保存されるため、異なるクラスターによって書き込まれた値を比較する前に、この点を覚えておくことが重要です。
| タイプ | 使用法 |
|---|---|
| スタンプ | 従来のサポート Unixの オプションでナノ秒精度のタイムスタンプ |
| 日付 | 形式はYYYY-MM-DDです。 Date 型でサポートされる値の範囲は、プリミティブのサポートに応じて 0000-01-01 から 9999-12-31 までです。 Java 典型的な日付 |
Hiveのその他のデータ型
さらに2つのプリミティブは、数値、文字列、日付のファミリーには属さないが、実際のスキーマには頻繁に現れる。
| タイプ | 使用法 |
|---|---|
| ブーリアン | 真偽値を格納する |
| BINARY | バイト配列を格納し、生のコンテンツをSTRING列から除外します。 |
Hive 複合データ型
複合型は値を1つの列内にネストするため、リレーショナル設計で必要となる余分な結合が不要になります。
| タイプ | 使用法 |
|---|---|
| 配列 | 配列 負の値と非定数式は許可されません |
| ゲレンデマップ | 地図 負の値と非定数式は許可されません |
| 構造体 | 構造 |
| Union | ユニオンタイプ |
Hiveの複合データ型の例
上記の表は宣言形式を示しています。以下の記述では、3つの複合型を1つの表にまとめ、区切り句とアクセス構文をまとめて表示しています。
CREATE TABLE employees ( name STRING, skills ARRAY<STRING>, deductions MAP<STRING, FLOAT>, address STRUCT<street:STRING, city:STRING, pin:INT> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
ここでは、3つの異なる区切り文字が必要です。1つ目は列間、2つ目は配列または構造体の要素間、そして3つ目はマップキーとその値間です。テーブルが作成されると、各複合列はそれぞれ専用のアクセサを使用して読み取られます。
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
以下の表は、どのアクセサーがどのタイプに属するかをまとめたものです。
| タイプ | 値の読み取り方 |
|---|---|
| アレイ | スキル[0]などのゼロベースのインデックス |
| MAP | 角括弧内のキー検索、例: deductions['tax'] |
| 構造体 | フィールド名にドット表記を使用する例:address.city |
| ユニオンタイプ | クエリサポートが不完全なため、ほとんど使用されていない。 |
複雑な型はネストされる可能性があるため、配列 > は有効な列宣言です。列のレイアウトが確定したら、テーブル自体は、で説明するステートメントを使用して構築されます。 Hiveでテーブルを作成、変更、削除する.
Hive でデータベースを作成および削除する方法
Hiveにおけるデータベースは、テーブルをグループ化する名前空間に過ぎません。そのため、テーブル操作を開始する前に最初に作成する必要があるオブジェクトです。以下に、Hiveでデータベースを作成および削除する手順を示します。
ステップ1)Hiveでデータベースを作成する
Hiveシェルでデータベースを作成するには、以下の構文に示すコマンドを使用する必要があります。
構文:
Create database <DatabaseName>
例:データベース「guru99」を作成する
以下のスクリーンショットは、作成ステートメントに続いて、クラスタ上のすべてのデータベースを一覧表示するshowコマンドを示しています。
上記のスクリーンショットから、私たちは2つのことを行っています。
- Hiveにデータベース「guru99」を作成する
- 「show」コマンドを使用して既存のデータベースを表示する
同じ画面で、showコマンドを実行すると最後にデータベース「guru99」が表示されます。これは、データベース「guru99」が正常に作成されたことを意味します。
ステップ2)Hiveでデータベースを削除する
ドロップ用ping Hiveシェルでデータベースを削除するには、以下の構文に示すように「drop」コマンドを使用する必要があります。
構文:
Drop database <DatabaseName>
例: データベース guru99 を削除
次のスクリーンショットでは、最初にdrop文が実行され、その後に続くshowコマンドではデータベースが表示されなくなっています。
上記のスクリーンショットでは、2つのことを行っています。
- 私たちはドロップしますping Hiveのデータベース「guru99」
- 「show」コマンドで同じ内容を相互チェックする
同じ画面で、showコマンドを使ってデータベースを確認したところ、データベース「guru99」はHive内に表示されませんでした。したがって、データベース「guru99」が削除されたことが確認できます。
Hiveデータベースコマンド:USE、DESCRIBE、SHOW、ALTER DATABASE
上記の2つの記述は、最も短い形式を使用しています。文書化された構文には、ファイルの保存場所や、名前が既に使われている場合の処理方法を決定するオプションの句が含まれています。
CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];
キーワードDATABASEとSCHEMAは互換性があり、CREATE SCHEMAとCREATE DATABASEは全く同じ動作をします。残りのコマンドは、名前空間を使った日常的な作業を完了させるためのものです。
| Command | 何それがありません |
|---|---|
| データベースを表示します。 | メタストアに登録されているすべてのデータベースを一覧表示します。 |
| データベース名を使用します。 | 現在のデータベースを設定するため、テーブル名にプレフィックスは不要です。 |
| データベースデータベースの説明(データベース名) | コメント、HDFSの場所、所有者を報告します |
| DESCRIBE DATABASE EXTENDED database_name; | DBPROPERTIESのキーと値のペアをその出力に追加します。 |
| ALTER DATABASE database_name SET DBPROPERTIES (…); | メタデータプロパティを追加または置換します |
| ALTER DATABASE database_name SET OWNER USER user_name; | 所有権を別のユーザーまたはロールに譲渡します。 |
| ALTER DATABASE database_name SET LOCATION hdfs_path; | それ以降に作成されるテーブルで使用されるパスを変更します |
2 つのデフォルト設定を覚えておくと良いでしょう。LOCATION 句がない場合、ファイルは通常 /user/hive/warehouse/database_name.db であるウェアハウス ディレクトリの下に配置され、IF EXISTS がない場合、存在しない名前に対してドロップすると、静かに通過するのではなくエラーが発生します。これらの設定は両方とも、 Hiveメタストア.
Hiveのデータ型変換とよくあるエラー
型は必ずしも宣言どおりに使用されるとは限りません。Hive は、情報が失われる可能性がない場合は値を自動的に拡張し、それ以外の場合は明示的な型変換を行います。
- 暗黙的な型拡張は、TINYINT から SMALLINT 、INT から BIGINT 、FLOAT から DOUBLE の順に行われ、数字を保持する STRING は DOUBLE に昇格されます。
- 型の絞り込みは自動的に行われることはないため、DOUBLE 型を INT 型の列に割り当てるには、型変換を記述する必要があります。
- CAST関数は、記述された変換を実行し、値が変換できない場合はエラーではなくNULLを返します。
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
以下に挙げるエラーは、初心者が初めてスキーマを扱う際に遭遇するほとんどの驚きの原因となっています。
| 症状 | 原因と解決策 |
|---|---|
| データベースにテーブルが残っている状態で削除が失敗しました。 | RESTRICT がデフォルトです。CASCADE を追加すると、それと一緒にテーブルが削除されます。 |
| 長い紐が短くなって届きます | VARCHAR は、宣言された長さを超えても警告なしに切り捨てます。制限を設けたくない場合は STRING を使用してください。 |
| 変換後に列がNULLとして読み取られる | CAST は値を解析できませんでした。型を広げる前にソースデータを確認してください。 |
| 通貨の価値はパイサやセントを失う | 引数なしの DECIMAL は DECIMAL(10,0) を意味します。スケールを明示的に指定してください。 |
| 見た目が全く同じ日付が2つあっても、決して一致することはない | STRING型の日付とDATE型の列は異なる型です。比較する前にどちらか一方をキャストしてください。 |
型が正しく動作するようになったら、次のステップはデータ自体のロードとクエリです。これについては、 Order By、Group By、および Hive クエリを使用したクエリ Cluster By.


