HiveQL(HiveのSQLっぽい独自言語)の型(type)に関するメモ。
|
Hiveの基本的な型。指定するときは大文字でも小文字でも可。
| 型 | 説明 | 備考 |
|---|---|---|
| TINYINT | 1バイト整数 | |
| SMALLINT | 2バイト整数 | |
| INT | 4バイト整数 | |
| BIGINT | 8バイト整数 | |
| BOOLEAN | TRUE・FALSE | |
| FLOAT | 単精度 | |
| DOUBLE | 倍精度 | |
| STRING | 文字列 | 文字列定数はシングルクォーテーション「'」またはダブルクォーテーション「"」で囲む。「\t」や「\n」などのエスケープ文字も指定可能だが「\x00」や「\u0000」は使えない。 ただし八進数表記「\000」は使える。[2011-08-11] →データ挿入時に\nを使用すると… |
構造体・マップ・配列。
以下、例として1レコードしか入っていない「dual」というテーブルがあるものとする。
| 型 | 説明 | 例 |
|---|---|---|
| 構造体 STRUCT |
構造体型の定義は「STRUCT<要素名:型, …>」で行う。 |
create table s1 (s struct<a:int, b:string>); |
構造体の定数はstruct関数を使って「struct(値1, 値2, …)」で生成する。ただし要素名は「col1」「col2」となり、insert〜select文では要素名まで一致していないと挿入できない。 |
insert overwrite table s2 |
|
| 構造体の要素はピリオドで要素名を指定して取得する。 | select s.col1, s.col2 from s2; |
|
| マップ MAP |
マップ型の定義は「Map<キーの型, 値の型>」で行う。キーの型はプリミティブ型のみ指定可能。 |
create table m1 (m map<string, int>); |
マップの定数はmap関数を使って「map(キー1,値1, キー2,値2, …)」で生成する。 |
insert overwrite table m1 |
|
| マップの値は角括弧でキーを指定して取得する。 存在しないキーの場合はNULLが返る。 |
select m['b'], m['zzz'] from m1; |
|
| size関数でマップの要素数を取得できる。 | select size(m) from m1; |
|
| 配列 ARRAY |
配列型の定義は「ARRAY<型>」で行う。 |
create table a1 (a array<string>); |
配列の定数はarray関数を使って「array(値1, 値2, …)」で生成する。 |
insert overwrite table a1 |
|
| 配列の要素は角括弧で添字を指定して取得する。 添字には負の数は指定できないが、配列サイズを超えた添字はNULLが返る。 |
select a[0], a[2], a[3] from a1; |
|
| 配列サイズはsize関数で取得できる。 | select size(a) from a1; |
|
| テーブル生成関数(UDTF)のexplode関数を使うと、配列の要素毎に行データを作る(分割する)ことが出来る。 なお、explode関数を使う場合は必ず新しい項目名(右記の例の「e」)を付ける必要がある。 |
select explode(a) e from a1; |