S-JIS[2011-08-10/2011-08-11] 変更履歴

HiveQL データ型

HiveQLHiveのSQLっぽい独自言語)の型(type)に関するメモ。


基本的な型(Primitive 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を使用すると…

複合型(Complex Type)

構造体・マップ・配列。

以下、例として1レコードしか入っていない「dual」というテーブルがあるものとする。

説明
構造体
STRUCT
構造体型の定義は「STRUCT<要素名:型, …>」で行う。 create table s1 (s struct<a:int, b:string>);
create table s2 (s struct<col1:int, col2:string>);
構造体の定数はstruct関数を使って「struct(値1, 値2, …)」で生成する。
ただし要素名は「col1」「col2」となり、insert〜select文では要素名まで一致していないと挿入できない。
insert overwrite table s2
select struct(11, 'aa') from dual;
構造体の要素はピリオドで要素名を指定して取得する。 select s.col1, s.col2 from s2;
11 aa
マップ
MAP
マップ型の定義は「Map<キーの型, 値の型>」で行う。
キーの型はプリミティブ型のみ指定可能。
create table m1 (m map<string, int>);
マップの定数はmap関数を使って「map(キー1,値1, キー2,値2, …)」で生成する。 insert overwrite table m1
select map('a', 1, 'b', 2, 'c', 3) from dual;
マップの値は角括弧でキーを指定して取得する。
存在しないキーの場合はNULLが返る。
select m['b'], m['zzz'] from m1;
1 NULL
size関数でマップの要素数を取得できる。 select size(m) from m1;
3
配列
ARRAY
配列型の定義は「ARRAY<型>」で行う。 create table a1 (a array<string>);
配列の定数はarray関数を使って「array(値1, 値2, …)」で生成する。 insert overwrite table a1
select array('aa','bb','cc') from dual;
配列の要素は角括弧で添字を指定して取得する。
添字には負の数は指定できないが、配列サイズを超えた添字はNULLが返る。
select a[0], a[2], a[3] from a1;
aa cc NULL
配列サイズはsize関数で取得できる。 select size(a) from a1;
3
テーブル生成関数(UDTF)のexplode関数を使うと、配列の要素毎に行データを作る(分割する)ことが出来る。
なお、explode関数を使う場合は必ず新しい項目名(右記の例の「e」)を付ける必要がある。
select explode(a) e from a1;
aa
bb
cc

HiveQLへ戻る / Hive目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま