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; |